Тестирование динамических сценариев
Тестирование — критически важный этап разработки, который гарантирует, что ваши динамические сценарии работают корректно и обрабатывают все пограничные случаи. Платформа предоставляет несколько мощных инструментов для отладки.
Эта статья посвящена методам тестирования. Для глубокого понимания объекта context, его структуры и способов установки фактов, пожалуйста, обратитесь к основной документации: Обработка данных и доступ к контексту.
Основные инструменты тестирования
1. Дебаг-чат
Ваш главный инструмент — это дебаг-чат. Он не просто показывает ответы бота, но и предоставляет детальную информацию о том, как было обработано ваше сообщение: какое намерение распозналось, какие сущности были извлечены и с какой уверенностью.
2. Установка фактов вручную
Динамические сценарии часто зависят от контекста — данных о пользователе, которые обычно приходят по API. Чтобы не делать реальные API-запросы при каждом тесте, вы можете имитировать эти данные.
-
Как это работает: В дебаг-чате нажмите кнопку «Факты» и вставьте JSON-объект с данными, которые вы хотите добавить в сессию. Эти данные будут доступны в сниппетах через объект
context. -
Пример: Вы тестируете сценарий, который по-разному реагирует на обычных и VIP-пользователей. Вы можете легко проверить обе ветки, устанавливая нужный факт:
// Тестируем ветку для VIP
{ "user_status": "vip" }// Тестируем ветку для обычного пользователя
{ "user_status": "regular" }
3. Вывод данных из сниппета
Чтобы понять, какие данные находятся внутри сниппета в момент выполнения, используйте следующие методы для вывода информации прямо в дебаг-чат. Предположим, вы получаете данные по API и хотите проверить, что приходит в ответ:
async function main(facts) {
try {
const response = await fetch('https://api.example.com/user/123');
const userData = await response.json();
// Способ 1: Выводим весь объект в чат для анализа
// JSON.stringify() превращает объект в строку для корректного отображения.
await mail.sendText(`Ответ от API: ${JSON.stringify(userData, null, 2)}`);
// Способ 2: Используем console.log для вывода в консоль браузера
// Это не будет видно пользователю, но поможет вам при отладке.
console.log('Получены данные пользователя:', userData);
// Основная логика сниппета
const message = `Здравствуйте, ${userData.name}! Ваш баланс: ${userData.balance}$.`;
await mail.sendText(message);
} catch (error) {
await mail.sendText('Произошла ошибка при получении данных.');
console.error('Ошибка API:', error);
}
}
4. Проверка переменных в текстовых реакциях
Вы также можете быстро проверить значение любого факта или сущности, выведя его напрямую в текстовой реакции с помощью Mustache-синтаксиса ({{...}}).
-
Пример: После сниппета, который установил факт
user_balance, добавьте текстовую реакцию со строкой:Отладка: Баланс пользователя - {{user_balance}}.
Важно: Если сниппет завершается с ошибкой (переходит в ветку «Ошибка»), любые факты, установленные в нем через context.set(), не сохраняются. Это предотвращает запись некорректных данных в контекст.