Система распознавания и отправки уведомлений FreePBX

в 13:24, , рубрики: asterisk, Google API, Google Cloud Platform

Появилась как то задача, организовать в офисе расшифровку голосовых сообщений клиентов и отправлять их на почту менеджеру, чтобы оперативнее отрабатывать проблемы, ну и стать чуточку IT-привлекательней для клиентов.

За основу взят пост, но он не актуален в силу изменения работы самого API у Google.

Документация Google

Для начала необходимо установить нужные пакеты:

В консоли:

yum install python
yum install python-pip
yum install google-cloud-sdk
yum install google-cloud-sdk-app-engine-python
gcloud init
pip install --upgrade google-cloud

Теперь необходимо создать проект и создать ключ API в консоли Google Cloud Platform:
описание создания API-ключа.

Сохраняем ключ на сервер asterisk.

Теперь привяжем ключ API:

gcloud auth activate-service-account --key-file=[Путь к файлу API-ключа]

Качаем все скрипты с github

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

Устанавливаем то, что скачали из скрипта установки.

pip install -r requirements.txt

Все скрипты для удобства сохранил на Asterisk в ./opt/test.

Так же необходимо на все файлы в папках которые используются в скрипте, выдать полные права на пользователя Asterisk.

Использовать для отправки сообщений будем стандартный почтовый клиент FreePBX (Его настраивали при первой установке FreePBX).

Скрипт для распознавания и отправки recognize.sh.

#!/bin/bash
#скрипт для отправки уведомлений

# экспортируем необходимые переменные окружения
# файл API-ключа гугла
export GOOGLE_APPLICATION_CREDENTIALS=/opt/test/project-*******.json
# название проекта на Google Cloud платформе
export GCLOUD_PROJECT=chrome-courage-******
# кодировка для питона
export PYTHONIOENCODING=UTF-8

# перекодируем звуковой файл в raw для того, чтобы отдать его гугл апи
sox /opt/record/record.wav -r 16000 -b 16 -c 1 /opt/record/record.raw

#конвертация звука в текст и обрезаем не нужное
python /opt/test/transcribe_async.py /opt/record/record.raw | tee /opt/text.txt
sed -i s/Transcript/Сообщение/ /opt/text.txt
sed -i '/Confidence/d' /opt/text.txt
sed -i '/Waiting/d' /opt/text.txt

#отправляем письмо, включаем в письмо распознанный текст
mail -s "новое уведомление" example@mail.net < /opt/text.txt
sleep 15
find /opt/text.txt -delete

Осталось все это прикрутить в dialplan FreePBX, так как FreePBX не любит чтобы непосредственно в его конфиги писали изменения, существует файл extensions_custom.conf. Вот в него и будем вносить изменения.


[Voice-to-text]
exten => s,1,Answer()
same => n,Playback(custom/2_IVR)
same => n,Playback(beep)
same => n,Record(/opt/record/record.wav,0,30,k)
exten => h,1,System(/opt/test/recognize.sh)
same => n,wait(30)
exten => s,n,Hangup()

Осталось это подключить в наш основной диалплан, для этого в web-интерфейсе есть раздел Администрирование/Дополнительные назначения:

Скрин

image

Вот туда мы и напишем запуск нашего диалплана.

Автор: push

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js