artem
09.01.2018
3254

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

 
avatar
  Подписаться  
Уведомление о

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

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

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices