Перейти к основному содержимому
Версия: 3.0

Навыки

Навык это готовый блок сценария с собственной формой настройки. Он добавляется на холст из панели инструментов слева (значки под кнопками типов звеньев), получает имя вида «Выбор 1», «API 2», а внутри создаёт служебный подпроцесс в папке skills/, который не нужно редактировать вручную. У каждого навыка есть переходы-исходы: «Успех» и «Ошибка» (у «Выбора» по одному переходу на каждый вариант и «Ошибка»). Настройки открываются двойным щелчком по звену.

Одиночный выбор​

Задаёт вопрос с вариантами ответа и ведёт по разным переходам в зависимости от выбора.

ВкладкаЧто настроить
ОсновныеВопрос и варианты: для каждого варианта название кнопки и значение. Через запятую можно перечислить альтернативы, которые клиент может набрать текстом вместо нажатия («да, конечно, ага»)
РасширенныеМаксимальное число попыток (по умолчанию 3), повторять ли вопрос при неверном ответе и что сказать перед повтором, имя переменной, куда записать выбранное значение, тип элемента содержимого для вопроса

Переходы: «Если [вариант]» для каждого варианта и «Ошибка». Любой переход открывается двойным щелчком по нему на звене и показывается как «Если нажата кнопка» с вашим меню и выбранным вариантом; «Ошибка» срабатывает, если клиент так и не выбрал ни один вариант за отведённые попытки. Совпадение по тексту работает и через NLU: если вариант назван так же, как намерение, распознанное намерение тоже засчитывается.

Вызов API​

Обращение к внешней системе по HTTP: CRM, ДБО, учётной системе, Helpdesk. В демонстрационном боте остатки по картам имитируются действиями, в реальном проекте на их месте стоит этот навык.

ВкладкаЧто настроить
ЗапросМетод (GET, POST, PUT, PATCH, DELETE), адрес и тело запроса. Адрес и тело принимают переменные: https://api.bank.local/cards/{{temp.card}}/balance, {"clientId": "{{user.id}}"}
ПараметрыЗаголовки запроса в JSON, например {"Authorization": "Bearer {{temp.token}}", "Content-Type": "application/json"}
ОтветХранилище и имя переменной, куда записать ответ (по умолчанию temp.response)

В переменную попадает объект { body, status }: temp.response.body.balance, temp.response.status. При сетевой ошибке или ответе с кодом ошибки записывается только status, а переход идёт по «Ошибке». Переходы «Успех» и «Ошибка» проверяют temp.valid и !temp.valid.

Ключи и пароли внешних систем не вписывайте в заголовки открытым текстом: попросите администратора задать их переменными окружения сервера с префиксом EXPOSED_ и используйте в собственном действии (process.env.EXPOSED_CRM_TOKEN), см. «Действия и хуки». Ответ приходит в пределах тайм-аута диалога (converse.timeout, по умолчанию 5 секунд): медленные системы лучше вызывать асинхронно.

Заполнение слота​

Получает от клиента конкретное значение (сумму, дату, город, адрес почты) и переспрашивает, пока не получит.

ПолеЧто настроить
Намерение и Слот для заполненияНамерение, в котором описан слот, и сам слот (см. «Сущности, слоты и контексты»)
Вопрос для уточненияЭлемент содержимого, которым бот спрашивает значение («Укажите сумму перевода»)
Сообщение при ошибке вводаЧто сказать, если во фразе клиента нужного значения не нашлось
Количество попытокПосле стольких неудач срабатывает переход «Ошибка»
Очистка после X переходовЧерез сколько ходов диалога слот забывается (-1: не забывать)
Дополнительная валидацияСкрипт, который проверяет значение и записывает temp.valid = true или false (например, сумма не больше лимита)

Значение слота доступно как session.slots.<имя слота>.value (платформа хранит заполненные слоты в сессии) и в event.nlu.slots на том ходу, когда клиент его назвал.

Отправка Email​

Отправляет письмо через почтовый сервер, заданный администратором (параметр transportConnectionString модуля базовых навыков). Поля: отправитель, получатель, копия, скрытая копия, тема и текст письма; тема и текст выбираются из элементов содержимого и могут содержать переменные (Заявка от {{user.name}}). Переходы «Успех» и «Ошибка».

Переадресация диалога​

Передаёт обращение в iQChannels оператору, группе операторов или обратно в очередь; бот после этого выходит из диалога.

ПолеЧто настроить
Куда передать диалогНа оператора (идентификатор оператора), на группу операторов (идентификатор группы) или вернуть в очередь. Идентификаторы берутся из iQChannels; можно подставить переменную, например {{temp.groupId}}, чтобы выбирать группу по теме вопроса
Тема обращенияНе менять, сбросить или установить тему (идентификатор темы в iQChannels): так обращение попадает в нужную очередь с правильной категорией
Сообщение клиентуТекст, который клиент увидит перед передачей: «Переключаю вас на оператора»

В демонстрационном боте так устроен процесс «Связь_с_оператором». Технически навык отправляет текстовый ответ с полями маршрутизации (operatorid, groupid, toqueue, categoryid), которые понимает iQChannels; в эмуляторе Studio передача не происходит, виден только текст.

Закрытие диалога​

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

ИИ-агент​

Передаёт вопрос клиента генеративной модели через шлюз iQGPT и возвращает ответ в переменную. Описан отдельно в разделе «ИИ-агент на основе GPT».

Общие правила​

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