Голосовой набор в Asterisk.
Думаю каждому помнится удобный функционал мобильных телефонов Nokia, когда можно было позвонить абоненту, лишь произнеся его имя. В данной статье мы рассмотрим прекрасную разработку Дмитриева Сергея, которая написана на NodeJS и позволяет реализовать функционал быстрого голосового набора в Asterisk.

Все описанные действия в статье на сервере телефонии необходимо выполнять от имени суперпользователя (root). Установка и настройка производилась на предустановленной системе CentOS 6.9 + Asterisk 11.23.1 + FreePBX 13.
Инструкция:
Голосовой набор реализован на базе мини AGI сервера и имеет возможность работы с такими распространёнными сервисами распознавания голоса как Yandex SpeechKit Cloud, Google Speech(и данные сервисы ранее рассматривались у нас на сайте (Синтез речи средствами yandex speech / Автоответчик с распознаванием речи или принятие заявок в автоматическом режиме). Но в данной статье мы рассмотрим новый для нас сервис распознавания голоса Wit.AI с которым мини AGI сервер так же способен работать.
1. Получим API ключ от сервиса Wit.AI, для этого нам необходимо пройти регистрацию на странице https://wit.ai/ . Регистрация на сервисе возможна с помощью учетной записи GitHub или Facebook. В нашем случае будет рассмотрена регистрация с использованием учетной записи GitHub, нажмём на кнопку “Log in with GitHub”:
Обязательное условие, Вы должны быть авторизованы в том сервисе, который используете для регистрации.
2. Подтвердим процедуру авторизации нажатием кнопки “Authorize wit-ai”:
3. Введем свой email адрес и информацию о том для каких целей будете использовать сервис Wit.AI:
4. После завершения процедуры регистрации можем приступить к получению API ключа для использования сервиса. Перейдём в “Settings” и заполним пункты в соответствии с планируемым региональным использованием приложения распознавания голоса, а так же скопируем “Server Access Token”, который потребуется в дальнейшей настройке.
5. Для начала нам необходимо произвести установку NodeJS, выполним подключение по SSH к серверу телефонии, в зависимости от используемой системы(Windows, Linux, MacOS), подключение по SSH можно выполнить с использованием различного дополнительного программного обеспечения(Putty), либо системного терминала. И выполним ряд команд вида:
# yum -y groupinstall ‘Development Tools’
# curl –silent –location https://rpm.nodesource.com/setup_7.x | bash –
# yum -y install nodejs
6. Приступим к установке и настройке AGI сервера, выполним ряд команд вида:
# npm install voicer -g
# npm install pm2 -g
7. Выполним настройку установленного AGI сервера:
# mkdir /etc/voicer
# mkdir /etc/voicer/data
# nano /etc/voicer/config.js
Приведем файл к виду:
module.exports = {
agi: {
port: 3000
},
web: {
port: 3100,
auth: true,
username: ‘admin’,
password: ‘admin’,
realm: ‘My company’
},
processing: {
totalAttempts: 2,
playGreeting: true,
playBeepBeforeRecording: false //use system beep
},
asterisk: {
sounds: {
onErrorBeforeFinish: ‘invalid’,
onErrorBeforeRepeat: ‘invalid’,
greeting: ‘beep’
},
recognitionDialplanVars: {
status: ‘RECOGNITION_RESULT’,
target: ‘RECOGNITION_TARGET’
}
},
record: {
directory: ‘/tmp’,
type: ‘wav’,
duration: 2,
},
recognize: {
directory: ‘/tmp’,
type: ‘witai’, // [‘yandex’, ‘google’, ‘witai’]
options: {
developer_key: ‘API_ключ’
}
},
lookup: {
type: ‘file’,
options: {
dataFile: ‘/etc/voicer/data/peernames.json’
}
},
logger: {
console: {
colorize: true
},
file: {
filename: ‘/var/log/voicer.log’,
json: false
}
}
};
Где основными элементами требующими настройки является:
username, password – логин и пароль для доступа к WEB панели управления AGI сервером
type: ‘witai’ – имя используемого сервиса распознавания голоса
developer_key – API ключ сервиса распознавания голоса
8. Для того чтобы AGI сервер обращался корректно к созданному конфигурационному файлу, закрепим системную переменную:
# export VOICER_CONFIGFILE=/etc/voicer/config.js
9. AGI сервер перенаправляет звонок на соответствующий номер внесенный в конфигурационный файл. Для удобства занесения соответствия имени сотрудника и внутреннего номера, был написан BASH скрипт, который парсит занесенный внутренние номера и присвоенные им имена.
# nano /usr/src/parser.sh
Приведём данный файл к виду:
#!/bin/bash
r=”