При разработке сервисного чатбота нужно оптимально и удобно для пользователя решить несколько задач:
- Поиск адреса ближайшего сервисного центра.
- Ответы на часто задаваемые вопросы.
- Создание сервисной заявки в CRM системе (например, Битрикс).
Проще всего запрототипировать чатбот в конструкторе, например, Leadteh, хотя по результатам система достаточно жесткая. Посмотрим, как оптимальнее решить задачу, чтобы схема получилась максимально простой.
Поиск адреса сервис-центра
Если использовать блок «Цепочка сообщений», схема получается довольно сложной. Раньше программисты стебались над подходом инийских программистов копипастить одинаковые блоки кода, вместо использования функций и циклов, например. 🙂 Здесь примерно тоже самое. Например, как будет выглядеть схема, когда сервисных центров довольно много:
Добавление новых пунктов или правка такой схемы превращается в довольно рискованный процесс, когда неверное движение может сломать нормальную работу алгоритма. Увидеть-же ошибку в таком месиве стрелок проблематично. Даже браузер притормаживает при отрисовке.
При этом и для пользователя выбор выглядит нетривиально, поскольку нужно пролистывать «простыню» пунктов меню в «Цепочке сообщений». Когда их до 7 и они убираются на экране смартфона/десктопа — это нормально. Если -же нужно листать — то такой интерфейс становится неудобным. Обычно в таких случаях начинают использовать предфильтрацию по первым буквам.
Самый простой вариант — уйти от выбора пункта меню и перейти к альтернативе в виде ввода города. Здесь появится некоторое неудобство для клиента, поскольку он не видит списка доступных городов и если его города нет в перечне, то не сможет найти ближайший город, например.
Создадим в Leadteh список сервисных центров. Слева в панели заходим в списки и добавляем новый список «Сервисные центры». Подробно как создавать списки в этом видео:
В списке добавляем два поля с типом «Текст». Первое — название города, а второе — адреса сервис-центров в этом городе. Выглядит как-то вот так для примера:
Важный момент — я рекомендую список городов заполнять в таблице Excel и затем импортировать её в список. Порядок колонок к таблице Excel должен совпадать с порядком полей в списке. Хотя можно заполнить список в редакторе Leadteh, а затем «Экспортировать в Excel», чтобы была резервная копия на случай переноса данных в другой бот, например.
При задании списка нужно обратить внимание на алиасы. Например, Нижний Новгород — долго писать. В разговорной речи нередко называют Нижний: «Я съездил в Нижний». В письменной речи довольно распространенным было сокращение НиНо. В идеале учесть все варианты написания.
Кроме того пользователь при наборе текста вряд ли будет заморачиваться написанием с заглавной буквы. Он легко может ввести все с маленькой, а в конце поставить пробел.
К сожалению, технически, от того какие блоки используются в Leadteh зависит и то, как задавать алиасы при вводе в списки. Например, если использовать только блок «Чтение записи из списка», в котором есть тип поиска «Поисковая фраза содержится в тексте», то тогда можно алиасы перечислять через запятую и не обращать внимание на написание с заглавной или строчной буквы. Например, если в списке задать «Нижний Новгород, НиНо, Нижний» и пользователь введет «нижний», то этот блок найдет запись.
Значительный недостаток этого блока — он не умеет отрабатывать ошибки. Если блок не нашел запись, он выдаст фразу «Запись не найдена». Логично было бы, чтобы в этом блоке было ветвление на случай ошибки и можно было бы его обработать без выдачи сообщения.
Техподдержка Leadteh посоветовала использовать перед блоком «Чтение записи из списка» другой блок — «Проверка существования записи в списке«. Однако он плохо заточен под поиск текста. Например, не умеет искать подстроку в строке. Для него алиасы надо задавать, создавая новую строку. Вместо одной строки «Нижний Новгород, НиНо, Нижний» будет три: «Нижний Новгород», «НиНо», «Нижний» с одними и теми-же значениями в поле «Адрес сервисного центра».
И ладно бы проблема была только в этом. Но этот блок не может делать преобработку, т.е. «Нижний» и «нижний» для него — это разные значения. Естественно, «нижний» и «нижний » (c пробелом в конце) для него тоже разные строки. Эту проблему можно было бы решить функцией приведения строки к строчному или заглавному написанию и trim поисковой строки, но набор функций для работы с текстом очень убогий.
Техподдержка Leadteh не смогла найти приемлемый вариант и послала в их чатбот написать пожелания по развитию. Странно, почему они сами не в состоянии это сделать, если функционал работы со списками сильно урезанный? Видимо, разработчики посылают техподдержку куда подальше с их идеями. 🙂
Если сравнивать фуннкционал Leadteh и Aimylogic, то первый очень серьезно проигрывает в части гибкости, когда нужно избегать «индийского» стиля программирования. 🙂 Однако, в Leadteh удобнее реализовано «ручное» (визуальное) программирование, когда надо по-быстрому создать нечто рабочее.
Например, очень удобен функционал «Сценарии«, фактически реализущий функции/процедуры в программировании, аналогов которого нет в Aimylogic. Из-за этого визуально программировать большие схемы в Aimylogic неудобно.
Итак, тестовый чатбот будет отрабатывать следующим образом:
- Пользователь вводит название своего города в блоке «Цепочка сообщений». Введенное значение сохраняем в локальной переменной client_city
- Блок «Проверка существования записи в списке» проверяет наличие записи из переменной {$client_city}} в списке в поле «Город».
- Если запись не обнаружена, то выдает соответствующую фразу, что в указаном городе {{$client_city}} сервисный центр найти не удалось. И предлагает написать запрос в техподдержку.
- Если запись найдена, то управление передается на блок «Чтение записи из списка«. В нем в качестве текста для поиска по полю «Город» задается {{$client_city}} и тип поиска «Поисковая фраза содержится в тексте».
- Адрес сервисного центра задается для вывода в блоке «Шаблон цепочки сообщения» кнопкой «Адрес сервисного центра», чтобы указать из какого поля записи нужно выводить найденное значение.
В целом, всё для начала. Как упоминал ранее, с учетом ограничений на функционал блоков в Leadteh реализация не самая удачная, но пока что делать нечего…