Перейти к содержанию

Разработка Action

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

Каждый компонент определяет определенное поведение, и они выполняются последовательно в зависимости от истории разговора и состояния помощника. Для добавления нового вам потребуется сам файл action-скрипта с расширением .py.

В самой папке стенда все action-скрипты находятся в каталоге actions (Название стенда -> actions), нужно поместить файл со скриптом в эту папку и прописать его в init.py.

alt text

Пример кода скрипта, который отправляет ответ в виде сообщения "Это сообщение из action скрипта":

alt text

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

alt text alt text alt text

Затем вы должны вписать название скрипта в настройках проекта (Настройки -> Домен по умолчанию -> actions). После этого нажать на кнопку "Сохранить" и запустить переобучение модели.

alt text

При успешном переобучении модели, при переходе на историю, в которую вы поместили вызов скрипта, сработает код внутри action-скрипта.

Кастомные action скрипты

Эти события представляют собой пользовательское действие, реализованное вами. Пользовательские действия позволяют писать бизнес-логику, взаимодействовать с API или выполнять другие вычисления. Для реализации пользовательского действия необходимо создать класс Python, который наследуется от класса Action, предоставляемого Rasa.

Этот класс должен определить атрибут name, соответствующий имени действия в сценарии, и реализовать метод run. Метод run содержит код, который будет выполняться при срабатывании действия. Например, это действие может получать данные из базы данных или обрабатывать вводимые пользователем данные.

alt text

Возможные варианты использования

  1. action_api_call:

Это событие аналогично пользовательскому действию, но специально предназначено для выполнения вызовов API и получения данных из внешних источников. Оно позволяет получать данные, обрабатывать их и отправлять результат в виде ответа пользователю. Как и для пользовательских действий, необходимо создать класс на языке Python, наследующий класс Action.

В методе run пишется код для взаимодействия с API и извлечения необходимой информации из ответа.

alt text

  1. action_validate_email:

Проверка введенных пользователем данных: Действия могут использоваться для проверки введенных пользователем данных перед тем, как перейти к дальнейшему взаимодействию.

Например, если пользователь вводит неверный формат электронной почты, можно запустить действие, которое проверит введенные данные и попросит пользователя указать правильный адрес электронной почты.

alt text

  1. action_perform_conditional_logic:

В этом примере мы создали пользовательское действие под названием ActionPerformConditionalLogic. Внутри метода run этого действия мы получаем ответ пользователя из трекера и выполняем условную логику, основанную на этом ответе.

Если пользователь выбирает "да", то действие выводит ответ "Вы выбрали 'да'!". Если пользователь выбирает "нет", то выводится ответ "Вы выбрали 'нет'!". В противном случае, если пользователь не выбрал ни "да", ни "нет", выводится стандартный ответ "Вы выбрали что-то другое!".

alt text

  1. action_fetch_purchase_history:

Когда пользователь запрашивает историю своих последних покупок, срабатывает действие FetchPurchaseHistoryAction, которое запрашивает эту информацию в базе данных. Ответ будет отправлен обратно пользователю.

alt text

  1. action_fetch_joke:

Пример действия в Rasa, которое генерирует динамический ответ, получая случайную шутку из API-шутки.

alt text

  1. action_book_flight:

Действия могут быть использованы для реализации пользовательской бизнес-логики, специфичной для вашего приложения

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

alt text

  1. action_make_payment:

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

Например, если пользователь хочет произвести оплату, можно запустить действие, отправляющее запрос на оплату в платежный шлюз.

alt text

  1. action_store_name:

Скрипт может использоваться для поддержания и обновления состояния разговора.

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

alt text

  1. action_schedule_reminder:

Действия могут использоваться для отправки пользователям уведомлений или предупреждений.

Например, если пользователь запрашивает напоминание о каком-либо событии, можно запустить действие для планирования и отправки пользователю уведомления о напоминании в указанное время.

alt text

Action-скрипты для интернет-магазина Криптоарм

Скрипт "Подбор товара"

Описание процесса

Этап I "Формирование категорий товаров"

Данный скрипт использует слоты.

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

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

В таблице с данными наименование столбцов содержит сам вопрос, а варианты ответа на вопрос (в виде кнопок) это все уникальные строки при использования среза для текущего столбца.

Этап II "Прохождение фильтров"

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

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

Этап III "Подтверждение товара"

После прохождения всех фильтров и выбора наименования нужного товара, пользователю будет задан вопрос об подтверждении выбранного им товара. При подтверждении (кнопка "да"), запускается скрипт оформления заказа, при отказе, все текущие фильтры сбрасываются и происходит переход на этап I.

Дополнительная информация:

В скрипте реализовано отслеживание периодичности получения ответа, если время между ответами от пользователя на этапе "прохождения фильтров" будет больше 120 секунд, ассистент спросит "Хотите продолжить подбора товара", если пользователь ответит "да" этап "прохождения фильтров" продолжится, если пользователь ответит "нет", все ранее сохраненные фильтры сбросятся пользователь перейдет на Этап I "Формирование категорий товаров".

Структурная схема работы скрипта

alt text

Функциональные схемы

Этап I "Формирование категорий товаров":

alt text

Этап II "Прохождение фильтров":

alt text

Этап III "Подтверждение товара"

alt text

Скрипт "Оформление заказа"

Описание процесса

Данный скрипт использует формы и слоты.

Формы в определяются с помощью формата YAML и состоят из набора действий формы, слотов и правил валидации(не обязательно). Действие формы представляет собой отдельный шаг в форме и определяет подсказки и ответы, которые ассистент будет использовать для взаимодействия с пользователем на этом шаге.

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

Вызывается после скрипта "Подбор товара" пользователя просят сообщить данные для оформления заказа, запускается форма с такими вопросами как количество товара, ФИО, способ доставки товара и т.д, ответы на эти вопросы хранятся в слотах. После получения всех нужных данных для оформления заказа,пользователю сообщают всю собранную ранее информацию, для подтверждения или отмене заказа, при подтверждении все данные отправляются на сайт КриптоАРМ и создается заказ, пользователь получает номер заказа ссылку для оплаты, при отмене вся информация очищается и пользователь получает сообщение об отмене оформлении заказа.

Структурная схема работы скрипта

alt text

Функциональные схемы

I "Оформление заказа физлицо с физической поставкой":

alt text alt text

II "Оформление заказа физлицо с электронной поставкой":

alt text

III "Оформление заказа юрлица с физической поставкой":

alt text

IV "Оформление заказа юрлица с электронной поставкой":

alt text

Скрипт "Статус заказа"

Описание процесса

Данный скрипт использует слоты.

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

При определении намерения о запуске, скрипт получает последнее сообщение от пользователя и определяет есть ли в номер заказа в формате XXXXX(X). Если номер заказа определен, запускается форма с вопросом о электронной почте указанной при оформлении заказа, если не определен, запускается форма с вопросами о номере заказа, и электронной почте указанной при оформлении заказа.

После этого введенные данные сохраняются в слотах, проверяются через API запрос к интернет-магазину КриптоАРМ, если номер и электронная совпадает, пользователь получает информацию: оплачен/не оплачен, сумму заказа, наименование товара(ов) и электронную почту которая указывалась при оформлении заказа. Если номер и почта не совпадает пользователь получает сообщение об ошибке.

Структурная схема работы скрипта

alt text

Функциональные схемы

alt text

Скрипт "Приветствие"

Описание процесса

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

Структурная схема работы скрипта

alt text

Функциональная схема

alt text