artem
09.01.2018
13431

Голосовой набор в 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”:

Регистрация в сервисе Wit.AI

Обязательное условие, Вы должны быть авторизованы в том сервисе, который используете для регистрации.

 

2.                  Подтвердим процедуру авторизации нажатием кнопки “Authorize wit-ai”:

 Регистрация в сервисе Wit.AI

3.                   Введем свой email адрес и информацию о том для каких целей будете использовать сервис Wit.AI:

 Регистрация в сервисе Wit.AI

4.                  После завершения процедуры регистрации можем приступить к получению API ключа для использования сервиса. Перейдём в “Settings” и заполним пункты в соответствии с планируемым региональным использованием приложения распознавания голоса, а так же скопируем “Server Access Token”, который потребуется в дальнейшей настройке.

 Получение API ключа.

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

Установка 'Development Tools'

 Установка NodeJS

6.                  Приступим к установке и настройке AGI сервера, выполним ряд команд вида:

# npm install voicer -g
# npm install pm2 -g

Установка приложения Voicer

Установка приложения PM2

 

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);
}

Редактирование исполняемого файла приложения Voicer.

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})

Редактирование диалплана Asterisk.

 

13.              Теперь при звонке по короткому номеру 777, после звукового сигнала произнесем имя сотрудника и система автоматически соединит с указанным в конфигурационном файле внутренним номером.

Прохождение звонка на короткий номер 777.

14.              Редактирование соответствия имени сотрудника с внутренним номером, добавление вариантов имени, можно производить в WEB интерфейсе, доступному по адресу http://IP_адрес_АТС:3001

WEB интерфейс приложения Voicer.

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.