1С + asterisk (автоматический обзвон) часть 2. Распознавание речи
Пример реализации автообзвона (с распознаванием речи ответа отвечающей стороны) с использованием ami asterisk. Данная статья может быть полезна программистам, интеграторам, администраторам. Версия и релиз технологической платформы не имеет значения.
- Описание
- Подробнее
Описание
Продолжение предыдущей статьи. (//sale.itcity.ru/public/954564/)
Пример применения распознавания речи в исходящих звонках asterisk.
Задача:
Получить (не) подтверждение о приезде клиента на определенный момент.
Общая логика решения задачи:
1. Дозвониться
2. Прочитать текст
3. Записать речь отвечающей стороны в файл
4. Выполнить распознавание речи
5. Попрощаться
6. В зависимости от результата распознавания принять решение
7. В зависимости от принятия решения выполнить некие действия в 1С(двинуть бп дальше, оповестить ответственных лиц, закрыть задачи, освободить занятое время, и тд)
8. Сохранить историю событий asterisk
Технологии:
1. 1С (выборка данных, инициализация вызова, обработка завершения, бизнес логика)
2. asterisk (ami сервер) (телефония)
3. python (бэк, прокси сервер между фронтом и телефонией, ami клиент)
4. Yandex.SpeechKit (распознавание речи)
5. php (agi)
Общая принцип работы:
Средствами 1С регламентное задание делает выборку по предварительно сформированным задачам, уведомление клиента за 24 часа. Из выборки берется телефон для набора, и определяется путь к файлу, который будет в дальнейшем воспроизводится. 1С делает гет запрос в бэк, передавая параметры (телефон, путь к файлу). Бэк получает запрос, парсит параметры, подключается к ами asterisk, вызывает действие "Originate" с указанием параметров(телефон, путь к файлу, контекс диалплана, канала вызывающей стороны), подписывается на события ами, подключается к kafka для отправки событий(на самом деле подключается при старте и держит соединение). Asterisk после успешного поднятия трубки на отвечающей стороне читает файл, где в конце файла будет что-то вроде "скажите да если вы приедете, скажите нет если не приедете" (ну условно). Asterisk записывает в файл разговор отвечающей стороны. Делает пост запрос в бэк, передавая файл и ид звонка(каллер ид), затем прощается, завершает вызов. Бэк получает файл, передает его на asr.yandex. asr.yandex распознает возвращает xml. Бэк парсит xml генерирует событие в kafka. kafka при получении событий отправляет в http сервис 1С, для дальнейшей обработки. 1С обрабатывает состояние, реализует бизнес логику.
Синтез речи (генерация файлов для воспроизведения) был описан в предыдущей статье.
В отличии от предыдущей статьи по астериску, здесь код:
1. будет адаптирован под работу в микросервисе (kafka, предыдущая статья по kafka)
2. web часть будет перенесена на flask
Шаг 1. диалплан
Инициализация исходящего звонка будет происходить через asterisk ami, далее звонок идет в dial plan.
Для реализации задачи был добавлен контекст и макрос.(да, снова не ari)
