В Telegram доступен бот TWIN: Бот-имитатор, с помощью которого можно автоматизировать тестирование сценариев. Бот проверяет поведение бота и сравнивает его с ожидаемым поведением, загруженным через файл, в котором содержится ожидаемый формат диалога с ботом. По результатам проверки будет сформирован отчёт со статистикой и ошибками (с указанием в каком блоке сценария возникла и какой результат ожидался).
Инструмент особенно актуален для тестирования изменений при заполнении намерений NLU.
Стоит учитывать, что инструмент не подходит для тестирования AI-агентов, или ботов, генерирующих фразы ответа через GPT. Имитатор производит сравнение фраз бота с конкретными примерами из файла.
/start |
Запуск бота |
/help |
Справка о том, как работать с ботом |
/example |
Получить пример файла |
Входной файл — это xlsx (excel) документ, содержащий следующие столбцы:
| Столбец | Для чего используется | Какие значения могут быть установлены |
|---|---|---|
| «A» | Выбор режима проверки сценария | 0 - «строгий» режим, в таком режиме имитатор ожидает, что ответы будут точно такими же как в загруженном файле (учитывается регистр, знаки препинания, пробелы и т.д.); 1 - «мягкий» режим, будут игнорироваться знаки препинания, пробелы и регистр. |
| «B» | Идентификатор сценария | В этом столбце указывается id сценария, который мы хотим проверить. |
| Начиная со столбца «С» | Используются для размещения реплик по ходу диалога. | В каждый из столбцов вносятся реплики в формате: BOT-CLIENT-BOT. Например, сценарий начинается с блока «Вопрос», текст вопроса - «Как дела?». Далее мы ждём ответа от клиента «Дела - хорошо». В этом случае мы должны записать в загружаемом файле в столбце «С» - «Как дела?», а в следующем столбце «D» - «Дела - хорошо» и т.д. согласно логике вашего сценария. |
Первое и последнее сообщение должно быть от бота.
Получить пример заполненного файла можно с помощью команды
/example

Выбор режима — Если этот показатель равен 1, то будут игнорироваться знаки препинания, пробелы и регистр. Любое другое значение включает строгий режим: ответ бота должен в точности совпадать с примером из файла.
ID сценария — Идентификатор сценария бота из личного кабинета.
Сообщение бота/клиента — Фразы, составляющие пример диалога.
Если несколько реплик бота идут подряд, но в разных блоках сценария, между репликами используется разделитель - «@@@».
Например, если реплики бота выглядят так:
BOT: Меня зовут Максим.
BOT: Как твои дела?
То требуется использовать одну ячейку. Запись в ячейке будет выглядеть так:
Меня зовут Максим.@@@Как твои дела?
Если в сценарии используется случайный выбор из нескольких ответов, то между репликами используется разделитель - «|||».
Например, если реплики бота выглядят так:
BOT: Меня зовут Максим. ИЛИ Меня зовут Платон.
То требуется использовать одну ячейку. Запись в ячейке будет выглядеть так:
Меня зовут Максим.|||Меня зовут Платон.
Если в сценарии несколько реплик бота идут подряд, а также используется случайный выбор, то требуется сначала сделать разделение нескольких сообщений («@@@»), а потом рандом («III»).
Например, сообщения от бота выглядят так:
BOT:Привет!
BOT:Дружище! ИЛИ Друг!
BOT:Как дела?
То требуется использовать одну ячейку. Запись в ячейке будет выглядеть так:
Привет!@@@Дружище!@@@Как дела?|||Привет!@@@Друг!@@@Как дела?
Для игнорирования блока с фразой ботом-имитатором нужно в ячейке указать текст LOGGING NODE.
Сразу после завершения тестирования бот отправит файл с результатами тестирования, а также выведет общую информацию о результатах тестирования (Успешно/Не успешно/Ошибка сервера).


| Столбец | Описание |
|---|---|
| Mode | Указывается какой использовался режим проверки («строгий» - 0, «мягкий» - 1) |
| BotId | id тестируемого сценария |
| Результат теста | 1 - если проверка прошла успешно, ошибок не выявлено; 0 - проверка прошла с ошибкой |
| Подтверждение | Результаты записанные в «Подтверждение» из блока «Результат». |
| NPS | Результаты записанные в «NPS» из блока «Результат». |
| Прочие результаты | Содержат начальные переменные бота, а также произвольный результат из блока «Результат». |
| Остальные столбцы | Содержат реплики по ролям (BOT-CLIENT-BOT). В случае если в блоке обнаружена ошибка, ячейка выделяется красным. В случае обнаружения ошибки сначала выводится ожидаемое значение, после «Ответ бота:» с реальным ответом бота в данном диалоге. Далее идёт информация о том, в каком блоке зафиксирована ошибка и id сценария. |