Как стать автором
Обновить

Быстрый голосовой набор на Asterisk

Время на прочтение3 мин
Количество просмотров25K
Статей по использованию сервисов распознавания речи в asterisk от Google и Яндекса на Хабре уже есть несколько. Но всегда хочется сделать что-нибудь свое и как-нибудь по-своему.

Так вот, хотелось сделать быстрый голосовой вызов абонентов из адресной книжки. Когда в организации работаешь с несколькими десятками человек, каждый день иногда забываешь и путаешь внутренние номера абонентов (а кнопок быстрого набора на всех не хватает). Поэтому просто надо, чтобы нажал кнопочку, сказал «Зина из третьего мобильный» и тебе отвечает Зина из третьего на своем мобильном.

Короткое видео с демонстрацией работы:



Написал небольшой AGI-сервер на node.js. Многие реализуют логику работы AGI в диалплане как запуск скриптов из папки agi-bin, но можно запустить серверное приложение на каком-нибудь сетевом порту и обрабатывать запросы от asterisk'а.

В диалплане asterisk'а нам нужна практически одна строка, которая перенаправит управление ходом звонка из диалплана в наше приложение voicer.

//extensions.conf
[default]
exten => 1000,1,AGI(agi://192.168.2.1:3000/)

При этом надо четко понимать, что если логика формирования диалплана перенесена из asterisk'а на AGI, но вся работа все равно происходит на asterisk'е.

Далее. Позвонив на номер 1000 (1) мы слышим приветствие (3), затем произносим имя, asterisk записывает файл(4), AGI-сервис отправляет его в Яндекс или Google на распознавание(5), получает вариант распознавания, ищет его в своем списке (6), в случае нахождения удачного варианта совершает вызов на указанный номер (7).

Схема работы voicer:



Как запустить у себя voicer?


А. Устанавливаем приложение
  • Копируем репозиторий и устанавливаем зависимости

Б. Настраиваем сервис распознавания

В. Настраиваем поиск имени (об этом далее)
Г. Настраиваем диалплан по примеру выше
Д. Запускаем приложение, делаем тестовый звонок.

(Подробная пошаговая установка с командами приведена в readme)

Как работает поиск по слову?


В приложении прикладывается тестовый json-файл, заполнив в котором соответствие имени и канала можно получить готовый файл для поиска совпадений. Канал в данном случае это канал в понимании asterisk'а. Например, SIP/123 или Local/8913XXXXXX@outbound. Т.е. если напротив «Маша» будет SIP/123, то asterisk соединит вас с каналом SIP/123, а напротив «Маша мобильный» будет SIP/8913XXXYYYY@gate, то вызов пойдет на номер через контекст gate. Конечно, исходящая связь должна быть настроена на asterisk'е заранее.

Пример файла:
[{
"name": "Василий",
"channel": "SIP/Sf12345678"
},
{
"name": "Василий Мобильный",
"channel": "Local/8913XXXXXXX@outbound"
}]

В приложении приложены скрипты поиска по mongodb и mysql, можно модифицировать под имеющуюся у вас адресную книгу.

Дополнительно


Также в настройках необходимо указать директорию, где должны сохраняться записанные файлы, и директорию, где брать файлы, чтобы отправлять их на сервис распознавания.

Казалось бы, это одна директория, но это так пока вы запускаете voicer на той же машине, что и работает у вас asterisk. Если у вас asterisk и voicer работают на разных машинах (мой случай), то директория для записи — это директория на машине c asterisk (AGI-сервер говорит asterisk'у куда записать файл с тем, что произнес абонент), а директория с файлами для распознавания — это та же директория с записанными файлами примонтированная к машине с работающим voicer'ом.



Репозиторий приложения на гитхабе Надеюсь кому-нибудь пригодится такой вариант реализации голосового быстрого набора на asterisk.

Ссылки на используемые npm в приложении: ding-dong (мой форк node-agi) — AGI сервер с обертками на AGI-команды, yandex-speech, google-speech — обертки на голосовые сервисы Яндекса и Google.

Имея возможность сравнить сервисы распознавания речи, могу отметить более четкое распознавание фамилий и имен Google'ом. Яндекс, например, плохо различал Пахомова (определял как «Плохо»), Виталя («Детали») и т.п.
Теги:
Хабы:
Всего голосов 25: ↑24 и ↓1+23
Комментарии15

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн