img

Занимательная интеграция Asterisk и Yandex.SpeechKit

Сегодня хотим рассказать про любопытный сценарий, которой наверняка может быть полезен в сфере E-commerce. Речь пойдет про автоматизацию клиентского обслуживания, а именно:

icon strelka icons icons

узнай больше на курсе

Базовый курс по Asterisk
Двухнедельный онлайн курс по Asterisk от Мерион Нетворкс. 5 блоков обучения с домашним заданием. Именной сертификат с уникальным номером при успешной сдаче экзамена
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
/p>
  1. Клиент звонит в интернет – магазин и ему предлагают ввести номер заказа;
  2. Введенные абонентом значения по DTMF передаются в AGI скрипт;
  3. По номеру заказа, мы формируем SQL – запрос к базе данных, где храним информацию о заказах. Из соответствующей таблицы мы получаем статус заказа и имя клиента;
  4. Мы формируем строку, которую необходимо озвучить клиенту и отправляем ее на аудио-генерацию в сторону API Yandex.SpeechKit (TTS технология – text to speech);
  5. Получаем аудио файл от Yandex, декодируем его в нужный нам формат (.wav, 8k) и воспроизводим клиенту;
  6. Удаляем воспроизведенный файл и завершаем звонок клиента;

На наш взгляд это любопытная автоматизация. Приступаем к настройке? :)


Получение API - токена Yandex.SpeechKit

Для знакомства с технологией Яндекс предоставляет бесплатный тестовый период в 1 месяц с момента отправки первого запроса. После этого, чтобы продолжить использование Yandex. SpeechKit Cloud нужно заключить договор. Подробности условия использования можно прочитать здесь.

Первым делом перейдите в кабинет разработчика по ссылке https://developer.tech.yandex.ru и нажмите Получить ключ:

 Получить API – ключ Yandex.SpeechKit Cloud
  • Имя ключа - введите имя для ключа. Например, Asterisk + TTS;
  • Подключение - выберите из списка SpeechKit Cloud;
 API  токен Yandex.SpeechKit Cloud

Запоминаем значение, которое выделено красным на скриншоте выше – это и есть ваш токен. Переходим к настройке AGI – скрипта.


Создаем таблицу с заказами

Создадим SQL – таблицу, в которой будем хранить данные о заказах. В лабораторных целях, мы развернем ее на том же хосте, что и IP – АТС Asterisk (+ это снизит задержку и процессинг по времени). Итак, вводим следующие команды в консоли сервера (предварительно подключитесь по SSH):

use asteriskcdrdb;
CREATE TABLE zakazy(name varchar(20),phone varchar(20),nomerzakaza varchar(20),status varchar(20));
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Александр", "79257777777", 300388, "Отправлен");
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Иван", "79251111111", 476656, "Оплачен");
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Сергей", "79252222222", 0089822, "Доставлен");

Мы создали и наполнили таблицу. Теперь необходимо создать пользователя, который сможет иметь SELECT – доступ к таблице:

CREATE USER 'логин_mysql'@'localhost' IDENTIFIED BY 'пароль_mysql';
GRANT SELECT ON asteriskcdrdb.zakazy TO 'логин_mysql';

Запомните ваш логин и пароль и переходите к следующему шагу – адаптации скрипта AGI. Традиционно, комментарии к коду после двойного слеша //:


AGI - скрипт

Ниже представлена структура скрипта:

#!/usr/bin/php -q
<?php
error_reporting(0);
require('phpagi.php');
$agi = new AGI();
$result = $agi->get_data('custom/generate', 6000, 10); //принимаем DTMF от клиента;
$number= $result['result']; //записываем в переменную введенный клиентом номер заказа;
$hostname = "localhost"; // у нас localhost. У вас может быть IP адрес сервера, на котором хранится БД с заказами (настройте предварительно pg_hba.conf на удаленном хосте);
$username = "логин_mysql"; // логин, который вы создали этапом ранее;
$password = "пароль_mysql"; // пароль, который вы создали этапом ранее;
$dbName = "asteriskcdrdb"; 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
$query = "SELECT * FROM zakazy WHERE `nomerzakaza`='$number';"; // подключаемся и парсим данные по номеру заказа;
$res=mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_assoc($res)) {
$status = $row['status'];
$name = $row['name']; // имя и статус, полученные из SQL пишем в переменные;
};
$str = 'Дорогой '.$name.'!    Статус вашего заказа    '.$status.'     Спасибо за обращение, всего доброго!'; // формируем строку, которую необходимо синтезировать;
$qs = http_build_query(array("format" => "wav","lang" => "ru-RU","speaker" => "jane","key" => "ваш_токен","emotion" => "good", "text" => $str)); //описываем переменные, которые будем отправлять в сторону API Яндекса. Вы можете регулировать формат файла, локаль, спикера (мужской или женский голоса) и эмоциональный окрас. Заменить "ваш_токен" на ключ, полученный от API Yandex. SpeechKit Cloud;
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: 
")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx);
$file = fopen("file1.wav", "w");
fwrite($file, $soundfile);
fclose($file); // получаем аудио файл (сохраняем его как file1.wav);
shell_exec('sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 /var/lib/asterisk/sounds/ru/custom/output1.wav'); // выполняем преобразование аудио в нужный  для Asterisk аудио-формат и копируем его в директорию /var/lib/asterisk/sounds/ru/custom/;
shell_exec('chown asterisk:asterisk /var/lib/asterisk/sounds/ru/custom/output1.wav');
shell_exec('chmod 775 /var/lib/asterisk/sounds/ru/custom/output1.wav'); // даем файлу нужные пермишны;
$agi->exec('Playback',"custom/output1");  // передаем в AGI команду проиграть полученный аудио – файл;
shell_exec('rm -f /var/lib/asterisk/sounds/ru/custom/output1.wav'); 
shell_exec('rm -f file1.wav'); // удаляем оба файла;

Скачать скрипт AGI
После загрузки файла, сохраните его с расширением .php

Сохраните скрипт под именем tts.php в директории /var/lib/asterisk/agi-bin и дайте следующие команды в консоль сервера:

dos2unix /var/lib/asterisk/agi-bin/tts.php 
chown asterisk:asterisk /var/lib/asterisk/agi-bin/tts.php 
chmod 775 /var/lib/asterisk/agi-bin/tts.php

Адаптируем функционал в «продакшн»

Итак, первым делом, открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись:

[tts_menu]
exten => s,1,Answer()
exten => s,2,AGI(tts.php)

Очень хорошо. Сделаем вызов кастомного контекста из FreePBX. Для этого воспользуемся модулем Custom Destinations. Переходим по пути AdminCustom Destinations и нажимаем Add Destination:

 Custom Destination для SpeechKit

Нажимаем Submit и Apply Config. Мы хотим чтобы из главного IVR – меню клиент при нажатии 4 мог бы узнать статус своего заказа. Переходим в главный IVR и в секции IVR Entries добавляем следующее:

 TTS в IVR FreePBX

Готово. Если что – либо не получилось, напишите нам в комментариях, постараемся помочь :)

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Базовый курс по Asterisk
Двухнедельный онлайн курс по Asterisk от Мерион Нетворкс. 5 блоков обучения с домашним заданием. Именной сертификат с уникальным номером при успешной сдаче экзамена
Подробнее о курсе
DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Подробнее о курсе
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Подробнее о курсе
Онлайн-курс по сетевой безопасности
Изучи основы сетевой безопасности и прокачай скилл системного администратора и сетевого инженера
Подробнее о курсе
Онлайн-курс по кибербезопасности
Полный курс по кибербезопасности от Мерион Нетворкс - учим с нуля специалистов по информационной безопасности. Пора стать безопасником!
Подробнее о курсе
Этичный хакинг
Научись работать с Kali Linux, изучи самые распространенные уязвимости, разверни виртуальную лабораторию для пентестинга
Подробнее о курсе
Еще по теме:
img
Мы создали калькулятор инсталляции IP - АТС Asterisk. При планировании сервера и необходимого оборудования заполните соответствующие поля для расчета производительности, шлюзов и плат
img
Скачать руководство администратора Cisco UCM/CME на русском языке
img
Скачать руководство администратора FreePBX на русском языке
img
Рассказываем как рассчитать пропускную способность для IP-вызовов Cisco
img
Рассказываем как настроить отправку СМС сообщений из контакт-центра Октелл через Ростелеком СМС Реклама
Весенние скидки
30%
50%
60%
До конца акции: 30 дней 24 : 59 : 59