Работа со сниппетами
Сниппеты: Расширение функциональности с помощью JavaScript
Сниппет — это встроенный в платформу инструмент, позволяющий выполнять произвольный код на языке JavaScript в ответ на действия пользователя. Этот мощный механизм реакции предназначен для реализации сложной бизнес-логики и интеграции со сторонними сервисами.
Ключевые возможности
С помощью сниппетов вы можете:
Взаимодействовать с внешними API: Отправлять запросы на сторонние серверы для получения или отправки данных (например, для проверки статуса заказа, получения информации о погоде и т.д.).
Генерировать динамические ответы: Формировать ответы пользователю на основе данных из контекста диалога, результатов вычислений или информации, полученной из внешних систем.
Реализовывать кастомную бизнес-логику: Выполнять сложные вычисления, валидацию данных, форматирование и любые другие операции, необходимые для вашего сценария.
Ограничения и рекомендации по использованию
Для обеспечения стабильности и производительности платформы на сниппеты наложены следующие ограничения:
Память: Объём оперативной памяти, доступной для одного сниппета, ограничен 128 МБ.
Время выполнения: Максимальное время выполнения одного сниппета составляет 5 секунд.
Критически важные правила выполнения:
Результат выполнения: Сниппет всегда возвращает либо успех, либо ошибку. Если в коде вы напишете функцию, которая вернет успех, но затем вызовете
throw error
или по какой-либо причине следующая функция упадет с ошибкой, которую вы не обработаете должным образом, сниппет вернет ошибку.Пустая последняя строка: Последняя строка в сниппете не должна быть пустой. Это может вызвать ошибку исполнения всего сниппета.
Работа с параметрами контекста: При использовании параметров из контекста сначала присвойте их переменной, а затем используйте. Например:
let param = context.param; core.sendText(param);
вместо прямого вызоваcore.sendText(context.param)
.
Создание и интеграция в сценарий
Создание сниппета
Перейдите в раздел «Сниппеты» в левом боковом меню.
Нажмите кнопку «+ Добавить».
В рабочей области появится шаблон асинхронной JavaScript-функции. Вся ваша логика должна быть реализована внутри этой функции.
Интеграция в сценарий
В нужном блоке сценария добавьте реакцию типа «Сниппет».
Выберите один из ранее созданных сниппетов в панели настроек.
Активируйте чекбокс «Ошибка», чтобы у блока появилась дополнительная ветка (Fail) для обработки потенциальных сбоев.
Важно: В случае ошибки и перехода в ветку «Fail», projectStorage сохранит переменные, но факты, установленные в сниппете, не сохранятся в контексте и сгенерированные реакции не будут отправлены пользователю.
Взаимодействие с контекстом и отправка данных
Работа с контекстом
Вы можете управлять данными диалога, сохраняя и извлекая информацию из контекста.
Динамическая отправка сообщений
Вы можете отправлять сообщения и кнопки прямо из сниппета, не создавая для этого отдельные блоки в сценарии. Это удобно для формирования динамического контента.
Встроенные инструменты Библиотеки
Для вашего удобства в окружение сниппетов предустановлены популярные JS-библиотеки: moment.js, request, axios.
Готовые шаблоны
Мы подготовили шаблоны с часто используемыми методами, которые можно перетаскивать прямо в редактор кода (методы запросов, работа с контекстом и т.д.).
Хранилище проекта (projectStorage) projectStorage — это инструмент для хранения временных данных на уровне всего проекта (кеширование, временные токены). Данные в projectStorage доступны из любого сниппета для всех пользователей вашего проекта.
В этом примере мы сохраняем токен, получаем список всех ключей, читаем данные и затем удаляем их.
Подробнее о projectStorage
и примерах его использования читайте в отдельном руководстве.
Тестирование и отладка
Для проверки базовой логики сниппета вне сценария используйте кнопку «Run» под редактором кода. Результат выполнения будет отображаться в консоли.
Тестирование с контекстом
Если сниппет использует данные из контекста, его запуск вне сценария вызовет ошибку. Для полноценного тестирования необходимо симулировать контекст:
Под тестовым чатом найдите кнопку «Факты».
Задайте необходимые факты в формате JSON-объекта.
Запустите сниппет — он получит доступ к заданным данным.
Важно: После завершения тестирования не забудьте очистить поле «Факты», оставив в нём пустой объект {}
.
Последнее обновление