Голосовой набор в 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=»33[0;31m»
g=»33[0;32m»
y=»33[0;33m»
n=»33[0m»
FILE=/etc/voicer/data/peernames.json
clear
echo -e «${y}Привет! Я скрипт выгрузки информации по внутренним номерам ${n}»
rm -f $FILE && echo -e «${y}Я уже удалил предыдущий файлик и приступил к заполнению нового ${n}»
for i in $(asterisk -rx ‘sip show peers’ | grep -P ‘OK|UNKNOWN’ | sed ‘s/// /g’ | awk ‘{print $1}’); do
if [[ «${#i}» < 6 && -z «${i//[0-9]/}» ]];then
#echo ${i}
str=$( asterisk -rx «sip show peer $i» | grep «Reg. Contact : sip»; )
#echo $str
name=$( asterisk -rx «sip show peer $i» | grep «Callerid»; )
#echo $name
ext=${str##*’sip:’}
ext=${ext%%’@’*}
name=${name##*’: «‘}
name=${name%%'» <‘*}
name=${name%%’ ‘*}
echo -e «n {n «name»: «$ext»,n «target»: «SIP/$ext»,n «variants»: [n «${name}»n ]n },» >> $FILE
echo -e «${g}Номерок $ext уже обработан и добавлен в список. Следующий…${n}»
fi
done
sed -i -e ‘1 s/^/[/;’ $FILE
echo ‘]’ >> $FILE
echo -e «${y}Я закончил! До свидания! =^_^=${n}»
# chmod 777 /usr/src/parser.sh
# cd /usr/src/
# ./parser.sh
10. Отредактируем исполнительный файл приложения:
# nano /usr/bin/voicer
Приведем данный файл к виду:
#!/usr/bin/node
var configfile = ‘/etc/voicer/config.js’;
var fileExists = require(‘file-exists’);
var conf = configfile;
if (fileExists(conf)) {
var config = require(configfile);
var Voicer = require(‘./index’);
var voicer = new Voicer(config);
voicer.start();
} else {
console.log(‘no configfile:’, conf);
}
11. Для возможности автозапуска и управлением AGI сервером как сложбой, создадим сервис:
# nano /etc/init.d/voicer
Приведём данный файл к виду:
#!/bin/sh
### BEGIN INIT INFO
# Provides: voicer
# Required-Start: $network $syslog $named
# Required-Stop: $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop voicer
### END INIT INFO
set -e
if [ -z «$1» ] ; then
echo «Usage: $0 [start|stop|restart]»
exit 0
fi
if [ «$1» = «start» ] ; then
pm2 start voicer
elif [ «$1» = «stop» ] ; then
pm2 stop voicer
elif [ «$1» = «restart» ] ; then
$0 stop
sleep 5
$0 start
fi
# chmod 777 /etc/init.d/voicer
# chkconfig voicer on
# service voicer start
12. Добавим в диалплан Asterisk возможность обращения к AGI серверу:
# nano /etc/asterisk/extensions_custom.conf
И добавим строки вида:
exten=777,1,AGI(agi://localhost:3000)
exten=777,n,GotoIf($[${RECOGNITION_RESULT}=SUCCESS]?:default,777,4)
exten=777,n,Dial(${RECOGNITION_TARGET})
13. Теперь при звонке по короткому номеру 777, после звукового сигнала произнесем имя сотрудника и система автоматически соединит с указанным в конфигурационном файле внутренним номером.
14. Редактирование соответствия имени сотрудника с внутренним номером, добавление вариантов имени, можно производить в WEB интерфейсе, доступному по адресу http://IP_адрес_АТС:3001
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.