Появилась как то задача, организовать в офисе расшифровку голосовых сообщений клиентов и отправлять их на почту менеджеру, чтобы оперативнее отрабатывать проблемы, ну и стать чуточку 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-интерфейсе есть раздел Администрирование/Дополнительные назначения:
Вот туда мы и напишем запуск нашего диалплана.
Автор: push