Инструкция по сборке сценариев

Начало сборки

На Шаге 1 всегда должен быть хотя бы один триггер (интент, файл, сущность), иначе пользователь не попадет в сценарий.

Исключение: если сценарий вспомогательный, и попадать туда будем только через реакцию «Переход».

В абсолютном большинстве проектов после первого триггера мы ставим сниппет check_if_first_message

Сборка сценариев с ответами пользователя и ветвлением

Иногда сценарий должен не только выдавать текстовку в ответ на запрос пользователя, но и ловить его ответ на эту текстовку и по-разному продолжаться в зависимости от этого ответа.

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

Если пользователь может ответить разными намерениями, сущностями или QA, и для каждого из этих вариантов развитие сценария будет разным, нужно:

  1. Для каждого варианта реакции перетащить свой кубик триггера из дополнительной рабочей области на нужный шаг сценария.

  2. В каждом кубике выбрать триггер. Повторять триггеры на одном шаге (например, ставить в разных кубиках одного шага один и тот же интент) нельзя.

  3. Добавить триггер «Прочее» — по этой ветке Лия пойдет, если ответ пользователя не будет соответствовать всем перечисленным на шаге триггерам.

Если пользователь может ответить несколькими намерениями, для которых предполагается одно и то же дальнейшее развитие сценария, то эти намерения можно добавить так:

  1. Перетащить кубик триггера «Намерение» из дополнительной рабочей области на нужный шаг сценария.

  2. Нажать на этот кубик в основной рабочей области.

  3. Выбрать из выпадающего списка первое намерение для этого кубика.

  4. В появившемся ниже окошке выбрать следующее намерение.

  5. Продолжить добавлять намерения до достижения необходимого результата.

Если пользователь может ответить абсолютно любым образом, и реакция Лии должна быть одинаковой в любом случае, то на этот шаг в сценарии нужно добавить только триггер «Прочее».

Во всех ветках необходимо прописывать реакции, иначе, пройдя по нужной ветке, Лия замолчит

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

Пример: Мы предполагаем, что на вопрос «Вы уже сделали заказ?» человек ответит намерением «Согласие» или намерение «Отказ». Часто бывает так, что человек пишет не односложное «Да» или «Нет», а что-то более уникальное («Да нет, еще думаю, через пару дней вернусь»). Мы понимаем, что его намерение — «Отказ», но такие уникальные формулировки Лия умеет распознавать не всегда (этпа проблема решается регулярными дообучениями, в ходе которых Лия учит все больше формулировок). Именно для таких случаев нам нужна ветка «Прочее».

«Прочее» в данной сборке — любая реакция пользователя, не соответствующая перечисленным на шаге намерениям («Согласие» и «Отказ»). Что бы ни написал пользователь (нераспознаваемую реплику, другой интент, сущность, QA), Лия пойдет по ветке «Прочее». «Прочее» на стейтах позволяет избежать молчания бота: если Лия не может распознать интент или мы не предусмотрели ответ, который дал пользователь, у нас есть гарантия того, что Лия не замолчит, а выдаст реакцию, прописанную в ветке «Прочее».

После «Прочего», как и после других намерений, необходимо прописать реакцию, чтобы у бота был ответ для пользователя. В таких случаях корректно отвечать универсальной текстовкой для нераспознанных интентов (т. е. из сценария “Прочее”) и переводом на оператора. В некоторых проектах мы используем в таких ветках кнопки или уточняющие вопросы.

Можно также использовать реакцию «Выход», чтобы попадать в другие сценарии, если реплика распозналась.

Пример: В сценарий, описанный выше, можно добавить на шаг, ловящий ответ пользователя, триггер «Выход», и тогда, если юзер напишет «Спасибо», мы перейдем в сценарий «Поблагодарить», а не уйдем по ветке «Прочее».

Важно тестировать «Выход» перед релизом, чтобы избежать зацикливания сценариев.

Перевод на оператора

Если необходим перевод на оператора, важно не забыть о реакции «Стоп» (она отдаст команду terminate).

Если забыть о «Стоп», то диалог не перейдет к специалисту, а проблема пользователя не будет решена.

Если перевод на оператора всегда осуществляется одинаковым образом, можно осуществлять его при помощи реакции «Переход», ведущей в отдельно созданный сценарий с переводом.

Перевод на оператора через реакцию «Переход» может пригодиться, если требуется быстро заменить текст перед всеми переводами на специалиста в проекте либо добавить текстовку (например, произошел внезапный рост количества обращений, и вы хотите оперативно изменить проект, поставив «заглушку» перед командой terminate).

Реакция «Переход»

Реакция «Переход» позволяет переходить из одного сценария в другой, причем на любой его шаг. Это позволяет не пересобирать ветки нескольких сценариев, если нужно внести какие-то изменения. Для того чтобы внести изменения сразу в несколько сценариев, достаточно отредактировать один сценарий, в который происходит переход.€

Дебаг-чат

После сборки сценария необходимо проверять свежую сборку или внесенную правку в дебаг-чате. Почему это важно:

  • возможны ошибки в тексте при сборке,

  • интент, триггерящий сценарий, может уже стоять на первом шаге в другом не заархивленном сценарии,

  • при сборке могут быть пропущены важные реакции — например «Переход» или «Стоп»,

  • интент, триггерящий сценарий, может быть заархивлен,

  • и т. д.

В дебаг-чате вы сможете убедиться, что сценарий работает так, как вам хотелось бы, перед выводом сценария на прод.

Возможные действия со сценарием

Удаление

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

Клонирование

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

Архивирование

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

Пока интент в архиве, Лия его не может распознавать. Пока сценарий в архиве, Лия не может пойти в него.

Если заархивировать сценарий, но не заархивировать или не переложить в другой сценарий интент, находящийся на шаге 1, Лия не попадет в сценарий, однако интент она будет распознавать. Так как ей нечем будет ответить, она может замолчать.

Если сценарий не в архиве, но интент, находящийся на шаге 1, заархивирован, Лия не попадет в сценарий по этому интенту. Это удобно, если нужно быстро выключить сценарий на время.

Сниппеты в проекте

В проектах есть особые сниппеты, которые пишутся с учетом специфики конкретного проекта. О них лучше консультироваться с командой Лия. Но есть и сниппеты, стандартные для большинства проектов.

check_if_first_message

Сниппет, который отдает приветствие пользователю и выполняет проверку повтора сообщения. Проверка повтора делает общение человека с ботом более органичным: на первый запрос Лия поздоровается ответит по сценарию, на повторное сообщение той же тематики, что и первое, Лия передаст диалог оператору. Через определенное время событие перестает считаться повторным, и Лия снова отвечает по сценарию. В данном сниппете возможны дополнительные доработки и разные конфигурации приветствия: например, различные текстовки в зависимости от разных интентов, особые текстовки для «Прочего» и т. д.

was_terminated

Если после последнего сообщения пользователя уже был terminate, то идем в ветку «Успех» и молчим (не делаем повторный перевод на оператора). Этот сниппет нужен, чтобы избежать повторных переводов на оператора.

Distributor

Этот сниппет нужен, чтобы символы, отправленные пользователем в составе сообщения, не путали Лию. В случае если пользователь пишет предложение с большим количеством символов, сниппет Distributor позволяет игнорировать символы и отвечать только на содержательную часть сообщения. А если пользователи отправляют только символы без всякого контекста, то сниппет идет в ветку «Ошибка», и, как правило, мы отвечаем уточняющим вопросом.

snippet language

Сниппет нужен, чтобы распознать входящую латиницу. Иногда он используется для реакции на смайлы, иногда применяется, если в трафике содержится некоторое количество входящих на английском языке. Такие сообщения мы также фильтруем, чтобы не пытаться отвечать на английский текст интентами, обученными на русскоязычных примерах. Возможные реакции: уточняющий вопрос либо terminate.

Ошибка в сниппете

У сниппета можно проставить ошибку, чтобы разделить сценарий на две ветки. Тогда в случае успеха мы пойдем по одной ветке, в случае ошибки перейдем во вторую. Таким образом можно разделить реакции в зависимости от наличия/отсутствия каких-либо данных и ветвить сценарии.

Опция рандомных текстовок

Эта опция предназначена для того, чтобы быстро разнообразить ответы бота, сделать его реакции менее однотипными для пользователя, при этом не прибегая к сниппетам.

В такой сборке Лия будет выбирать разные варианты ответа. Если в сценарии не получается найти текстовку из диалогов, попробуйте проверить поля с вариантами текстовок — для этого нужно нажать на текстовку в теле сценария, и все варианты текстовок выведутся в дополнительной рабочей области в правой части экрана. Важно не оставлять в окошках, предназначенных для вариантов текстовок, случайные буквы или какие-либо комментарии.

Last updated