Работа со сниппетами

Сниппеты: Расширение функциональности с помощью JavaScript

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

Ключевые возможности

С помощью сниппетов вы можете:

  • Взаимодействовать с внешними API: Отправлять запросы на сторонние серверы для получения или отправки данных (например, для проверки статуса заказа, получения информации о погоде и т.д.).

  • Генерировать динамические ответы: Формировать ответы пользователю на основе данных из контекста диалога, результатов вычислений или информации, полученной из внешних систем.

  • Реализовывать кастомную бизнес-логику: Выполнять сложные вычисления, валидацию данных, форматирование и любые другие операции, необходимые для вашего сценария.


Ограничения и рекомендации по использованию

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

  • Память: Объём оперативной памяти, доступной для одного сниппета, ограничен 128 МБ.

  • Время выполнения: Максимальное время выполнения одного сниппета составляет 5 секунд.

Рекомендации по оптимизации:

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

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

  • Недопустимость пустых и закомментированных сниппетов: Критически важно избегать добавления в сценарий пустых сниппетов или сниппетов, в которых весь код закомментирован. Такие блоки могут привести к критической ошибке и остановке выполнения всего сценария.


Создание и интеграция в сценарий

Создание сниппета

  1. Перейдите в раздел «Сниппеты» в левом боковом меню.

  2. Нажмите кнопку «+ Добавить».

  3. В рабочей области появится шаблон асинхронной JavaScript-функции. Вся ваша логика должна быть реализована внутри этой функции.

Интеграция в сценарий

Сниппет добавляется в сценарий как один из видов реакции.

  1. В нужном блоке сценария добавьте реакцию типа «Сниппет».

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

  3. Обработка ошибок: Активируйте чекбокс «Ошибка», чтобы у блока появилась дополнительная ветка (Fail). Крайне рекомендуется использовать эту ветку для обработки потенциальных сбоев:

    • Некорректные данные от пользователя.

    • Сетевые ошибки при выполнении HTTP-запросов.

    • Превышение таймаута выполнения.

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


Встроенные инструменты

Библиотеки

Для вашего удобства в окружение сниппетов предустановлены популярные JS-библиотеки:

  • moment.js

  • request

  • axios

Готовые шаблоны

Мы подготовили шаблоны с часто используемыми методами, которые можно перетаскивать прямо в редактор кода. Шаблоны сгруппированы по категориям:

  • Методы запросов: GET/POST request, axios.

  • Работа с контекстом: get fact, set fact, current event, events history.

  • Прочие методы: Функции для генерации различных реакций (текст, кнопки и т.д.).


Тестирование и отладка

Быстрое тестирование

Для проверки базовой логики сниппета вне сценария используйте кнопку «Run» под редактором кода. Результат выполнения будет отображаться в консоли.

Тестирование с контекстом

Если ваш сниппет использует данные из контекста (например, lastMessage или факты, полученные из API), его запуск вне сценария вызовет ошибку, так как контекст будет отсутствовать.

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

  1. Под тестовым чатом найдите поле «Add global facts».

  2. Задайте необходимые факты в формате JSON-объекта.

  3. После этого можно запускать сниппет — он получит доступ к заданным данным.

Важно: После завершения тестирования не забудьте очистить поле «Add global facts», оставив в нём пустой объект {}

Last updated