Разветвление для чат-бота (ключевое слово-ответ)

219
06 октября 2021, 13:40

Я хочу сделать чат-бота по типа: ключевое слово-ответ. Я понимаю, как его реализовать, но структуризация вводит меня в ступор. Для полного понимания приведу пример: человек хочет написать сообщение и ему предлагается 3 варианта (что-то вроде меню). После отправки одного из 3 слов, человека переносит на соответствующую ветку уже с 8 вариантами и так до тех пор, пока человек не найдет нужную для него информацию.

Мне не совсем понятно, как можно компактно уложить ключевые слова и соответствующие им ответы, а также как добавить "уровни", чтобы человек смог свободно перемещаться по ветви. Хотелось бы услышать вашего мнения по этому поводу

Answer 1

Делал как-то текстовый квест и эта задача очень схожа. У чат-бота должен быть граф (карта), по которому человек должен будет перемещаться отвечая по одному из вариантов.

Такую карту я сделал следующим образом:

  1. Хранил это в массиве объектов. Ключ массива - позиция человека в ответах, некая точка, на которой можно задать определённые вопросы (пример будет ниже)
  2. У каждой точки есть набор ответов, который человек может ввести. Каждый ответ может перенести человека на новую точку
  3. У каждой точки может быть некий callback-действие, изменение параметров пользователя (в БД, в переменной и т.п.)

Пример:

$map = [
  'start' => [
    [
      'word' => ['старт', 'начало'], // Переход на обучение
      'newPoint' => 'begin',
    ],
    [
      'word' => ['пропустить'], // Пропустить обучение
      'newPoint' => 'books', // Переход на выбор книг
    ]
  ],
  'begin' => [...], // Описание ветки обучения
  'books' => [
    [
      'word' => ['найти', 'поиск'], // Переход на поиск книг. Можно сделать обработку, чтобы искать книгу по названию: найти <название книги>
      'newPoint' => 'find',
    ],
    [
      'word' => ['обучение', 'помощь'], // Перейти к обучению
      'newPoint' => 'begin',
    ]
  ],
  'find' => [...] // Логика поиска книг
]

В этом примере следующая логика:

  1. человек может написать 'старт' или 'начало', чтобы перейти на обучение. И может написать 'пропустить', чтобы пропустить обучение и перейти на поиск книг

  2. на поиске книг человек может написать 'обучение', 'помощь', чтобы перейти на обучение. Также может написать 'найти', 'поиск', чтобы искать книги

Т.е. вся работа будет заключаться в описании карты переходов и хранение текущего положения человек на этой карте. По параметрам текущего положения нужно обрабатывать ответы человеку, что отправлять.

Answer 2
  1. Определись, для начала, с языком программирования
  2. Дальше уже изучать библиотеки (готовые уже есть на гитхабе)
  3. Потом делаешь своего робота
  4. all done
READ ALSO
Почему если указать data_seek один раз, то в следующий раз данные выведутся из другой строки?

Почему если указать data_seek один раз, то в следующий раз данные выведутся из другой строки?

У меня есть таблица, которая имеет столбцы number и balanceЯ хочу вывести данные, хранящиеся в них на страницу

169
Сохранение файла из $_FILES

Сохранение файла из $_FILES

Все доброго дня!

102
PHP, MYSQL UPDATE

PHP, MYSQL UPDATE

Не работает перебор значения в циклах for, foreach

162
Как через PHP сравнить текст и ответ от сервера и вывести указанное значение?

Как через PHP сравнить текст и ответ от сервера и вывести указанное значение?

Как через PHP сравнить текст и ответ от сервера и вывести указанное значение? Нужно, чтобы сервер сравнил переменную с отображаемым Пользуюсь...

210