Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 66 Next »

Общее описание

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

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

Описание сценариев в системе ведется при помощи языка DSL autoFAQ. Тело сценария состоит из последовательных операций. Каждая операция располагается в отдельной строке, для связи со следующей операцией в конце строки требуется указание символа "+". Некоторые операции могут содержать 1 или несколько опциональных модификаторов. 

Примеры готовых сценариев доступны в разделе Примеры сценариев


Переменные

Встроенные переменные

Для работы с данными в сценариях доступны следующие встроенные переменные:

{platformInMessageQuery} - текст первоначального запроса пользователя, по которому был создан диалог с AutoFAQ

Данные пользователя
{userFullName} - имя пользователя
{userLogin} - логин пользователя
{userEmail} - электронная почта пользователя
{userPayload.*} - хранилище дополнительных данных о пользователе

Данные пользовательского канала, через который пришел текущий запрос
{channelId} - идентификатор канала
{channelType} - тип канала (Telegram, Whatsapp, Widget)

Встроенные переменные для работы с API вызовами
{http_code} - код статуса последнего API запроса

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

Пользовательские переменные

В сценариях возможно создавать и использовать для хранения данных пользовательские переменные трех типов:

  • переменные сценария

  • переменные диалога

  • переменные пользователя

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

Ко всем переменным можно обратиться через указание названия переменной в обрамлении фигурными скобками {userSaid}:

сообщениеПользователю.сШаблоном("Текст сообщения: {userSaid}") +

Детальнее об определении переменных смотрите в разделе Установка переменных

Переменные могут хранить не одно, а сразу несколько значений. Переменная, объявленная как attachments[]  хранит не одно значение, а список значений, при записи новых значений в данную переменная они будут дописаны в конец списка.

запроситьФайл("Приложите файл").сохранитьРезультат("files[]") + 

Порядок выполнения шагов сценария 

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

сообщениеПользователю.сШаблоном("Привет")+						- шаг будет выполнен
//сообщениеПользователю.сШаблоном("Привет, {userFullName}")+ 	- шаг не будет выполнен

В конце сценария обязательно размещение одного из шагов завершения сценария:

завершить - завершение сценария
завершитьСШаблоном("Пока!") - завершение сценария с выводом сообщения пользователю
завершитьСНовымЗапросом("Новый запрос") - завершение сценария и одновременный запуск в работу нового сообщения
завершитьИПеревестиНаОператора - звершение сценария и перевод диалога в очередь оператору
завершитьИЗакрытьДиалог() - завершение сценария и закрытие диалога, следующая реплика пользователя начнет новый диалог

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

если("{http_code} != 200").то(
  комментарий("Данные пользователя не обновлены")+
  завершитьИПеревестиНаОператора 
)+
комментарий("Обовлены данные пользователя. Новые данные отправлены в CRM")+
завершить

Примеры готовых сценариев

Примеры готовых сценариев приведены в разделе Примеры сценариев

Справочник шагов сценария

Справочник возможных шагов сценария доступен в разделе Справочник шагов сценария

Старое описание привидено ниже для сохранения доступности ссылок:

Шаги установки переменных

установитьПеременную(*переменная, *значение) -

установитьПеременнуюВДиалог(*args) -

установитьПеременнуюПользователю(*переменная, *значение)

Шаги переписки с пользователями 

сообщениеПользователю.сШаблоном(*сообщение)  

задатьПользователюВопрос(*сообщение).сохранитьРезультат(*переменная)  

запроситьФайл(*сообщение).сохранитьРезультат(*переменная)

Шаги работы с внешними сервисами  

вызвать.внешнийСервис(*адрес, *тип).сохранитьРезультат(*args)

Сервисные шаги

если(*условие).то(*операции) 

установитьМетку(*название)

перейтиНаМетку(*метка)

комментарий(*сообщение)

выполнитьJs(*скрипт)

Шаги управления диалогом

запросВБазыЗнаний(*args)

назначитьТематику(*идентификатор)

назначитьОператора(*логин)

Шаги генерации формы для оператора

добавитьПолеВФормуОператора(*args)

показатьФормуОператору(имя = "форма")

Шаги работы с группами

определитьИдентификаторГруппы(*переменная)

перевестиНаГруппу(*идентификатор).иЗавершить

перевестиНаГруппу(*идентификатор).иЗавершитьСНовымЗапросом(*запрос)

перевестиНаГруппу(*идентификатор).иЗавершитьИПеревестиНаОператора

Шаги завершения сценария

завершить

завершитьСНовымЗапросом("вопрос")

завершитьИПеревестиНаОператора

завершитьИЗакрытьДиалог()

Примеры сценариев

Сценарий с вызовом внешнего сервиса, разбором ответа в JS.

установитьПеременную("host_cities", "https://api.autofaq.ai/v1/query") +
установитьПеременную("service_id", "121000") +
установитьПеременную("service_token", "939b8") +
установитьПеременную("other_score", "0.5") +
задатьПользователюВопрос("Уточните ваш город, пожалуйста?").сохранитьРезультат("city")+
вызвать.внешнийСервис("{host_cities}", "POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8")).сТеломСообщения("{\"service_token\": \"{service_token}\",\"service_id\":{service_id},\"query\":\"{city}\"}").сохранитьРезультатКакСтроку("results")+
выполнитьJs("""
var result = JSON.parse(results); var score = 0.0; var answer = '';
if (result.results.length > 0) {
	answer = result.results[0]['answer']; score = result.results[0]['score'];
    answer = answer.replace(/\n/g,'<br>');
} 
var exit = {'answer':answer, 'score':score}; exit;
""") +
если("{http_code} > 210").то(завершитьСШаблоном("Что-то сломалось. Зайдите попозже."))+
если("{score} < {other_score}").то(завершитьСШаблоном("Вот в этом городе у нас ничего нет"))+
сообщениеПользователю.сШаблоном("В указанном городе можно приобрести по адресам: <br>{answer}")+
задатьПользователюВопрос("Все ок?").сВариантамиОтвета("Да", "А мне не выдают").сохранитьРезультат("what")+
если("{what} == Да").или("{what} == да").то(завершитьСШаблоном("ну и отлично. Всего хорошего!"))+
завершитьСНовымЗапросом("Перевести на оператора")

Сценарий для интеграции на событие "Нажатие кнопки оператором"

комментарий("Запуск интеграции по кнопке.")+
установитьПеременнуюВДиалог("Поле 2", значение = "Field 2", название = "Поле 2", показыватьОператору = true, обязательное = true, редактируемое = false)+
установитьПеременную("priority", "{\"v1\": \"Blocker\", \"v2\": \"Critical\", \"v3\": \"Major\", \"v4\": \"Minor\"}") +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t1",
  название = "Что вам нужно сделать: ",
  тип = "Нередактируемый текст",
  значение = "Заполните форму"
) +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t2",
  название = "Название заявки",
  тип = "Однострочный редактируемый текст",
  описание = "Введите название заводимой заявки",
  значение = "Введите",
  обязательное = true
) +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t3",
  название = "Критичность",
  тип = "Выпадающий список",
  описание = "Выберите из списка критичность заявки",
  обязательное = true,
  значение = "v3", 
  варианты = "{priority}"
) +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t4",
  название = "Описание",
  тип = "Многострочный редактируемый текст",
  описание = "Опишите вашу проблему",
  обязательное = true
) +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t5",
  название = "Уведомить руководителя?",
  тип = "Переключатель",
  обязательное = false
) +
установитьПеременную("tags", "{\"v1\": \"Teacher\", \"v2\": \"Student\", \"v3\": \"Sales\", \"v4\": \"Tech\"}") +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t6",
  название = "Теги",
  тип = "Множественный выбор",
  описание = "Выберите теги, которыми пометить обращение",
  варианты = "{tags}",
  обязательное = true
) +
добавитьПолеВФормуОператора(
  форма = "Заведение заявки в Jira",
  переменная = "t7",
  тип = "Целое число",
  название = "Частота возникновения проблемы",
  описание = "% пользователей, у которых возникает проблема" 
) +
показатьФормуОператору(имя = "Заведение заявки в Jira") +
комментарий("Вот что у нас получилось: {t2}, {t3}, {t4}")+
комментарий("Конец сценария интеграции!")


  • No labels