====== Голосовые сервисы спешат на помощь голосовой почте! ====== ===== Анонс вебинара ===== * [[https://www.specialist.ru/news/5066/integraciya-golosovih-servisov-yandeks-s-iptelefoniej|Учебный центр «Специалист» приглашает на бесплатный семинар «Интеграция голосовых сервисов Яндекс с IP-телефонией». Он пройдет 3 декабря в 17:30]] ===== Запись вебинара ===== * [[https://youtu.be/dxZirqb8GS8|Интеграция голосовых сервисов Яндекс с IP-телефонией Asterisk]] ===== Реклама вебинара ===== Вопрос в классе на курсе телефонии: кто пользуется голосовой почтой? - В ответ - ироничные усмешки... Следующий вопрос - а почему Вы не пользуетесь голосовой почтой? - В ответ - откровенный смех) Действительно, первого знакомства, например, с решением, которое идет "из коробки" в Asterisk, достаточно что бы расхотеть иметь с ней дело: Введите номер абонента... пароль ... вы получили 5 новых сообщений, нажмите N что бы прослушать новые сообщения ... первое сообщение получено ... далее нудное перечисление даты и времени, наконец, воспроизведение самого сообщения, и так с каждым. А еще, надо удалять сообщения, не забывать то, о чем в них просили... Конечно, со временем можно приноровиться ускорять процесс заученными последовательностями DTMF, но, удобным решением это назвать трудно. С другой стороны, многие из нас, сочиняя текст очередного электронного письма, задумывались, что в этот раз было бы проще все объяснить голосом. Почему бы не объединить обе технологии - голосовую и электронную почту? На курсе, посвященном вопросам интеграции Asterisk с внешними системами, большой популярность пользуется лабораторная работа, в которой голосовая почта размещается в IMAP хранилище, что позволяет получить доступ к звуковым файлом как с телефонного аппарата, так и через интерфейс электронной почты. Да, выглядит зрелищно, но, будем честны, мало кому нравится прослушивать сообщения, присланные, например в WhatsApp или Viber, гораздо удобнее прочитать текст. Вот мы и подошли к теме нашего вебинара - подключим к голосовой почте Aserisk голосовые сервисы Yandex и Ваши сотрудники будут получать голосовые сообщения в виде текста в электронной почте а у клиентов будет выбор - написать письмо или оставить сообщение голосом. ===== Шаг 1. Исходное состояние стенда ===== ==== Система ==== * Linux [[https://val.bmstu.ru/unix/img/My%20Documents/debian_10.11_64_01.ova|Debian 10]] в домашней сети ==== Настройка сети ==== * [[Настройка сети в Linux#Динамическая настройка параметров]] или # ip l # dhclient eth0 # ip a ==== Установка ПО ==== # apt update # DEBIAN_FRONTEND=noninteractive apt -y install postfix mailutils dovecot-imapd locales dialog default-mysql-server roundcube asterisk asterisk-core-sounds-ru-wav sox lame ffmpeg jq msmtp ===== Шаг 2. Сервис электронной почты ===== * Вместо DNS используем: # hostname server.corp13.un # bash # cat /etc/hosts 127.0.0.1 localhost 10.5.M.N server.corp13.un corp13.un server * [[Управление учетными записями в Linux]] user1 и user2 (достаточно логин, пароль и домашний каталог) * [[Локализация системы#Локализация временной зоны]] * [[Локализация окружения]] * Сервис MTA [[Сервис MTA#Настройка MTA на обработку почты домена corpX.un]] * [[UA mail]] user1@corp13.un * Сервер dovecot [[Сервер dovecot#Настройка с использованием стандартных mailboxes и аутентификации открытым текстом]] * Сервер dovecot [[Сервер dovecot#Аутентификация для postfix]] * [[Сервис MTA#Настройка MTA на релеинг почты на основе аутентификации]] * Web интерфейс к почте [[Web интерфейс к почте#roundcube]] для пользователей user1 и user2 * [[http://10.5.M.N/roundcube/]] ===== Шаг 3. Настраиваем asterisk ====== * Сервис Asterisk [[Сервис Asterisk#Установка]] * [[Сервис Asterisk#Локализация сообщений Asterisk]] * [[Сервис Asterisk#Настройка RES_PJSIP каналов]] * Подключение телефонов [[ZoIPer]] (401) и [[Linksys SPA-3102]] (402) * Добавляем CallerID: 401 - Иван Иванов и 402 - Ваше ФИО * [[Сервис Asterisk#Настройка базового плана нумерации]], номерной план _4XX * Используя тему "[[Сервис Asterisk#Запись звукового файла]]" записываем и прослушиваем сообщение ===== Шаг 4. Разворачиваем Yandex SpeechKit ====== * [[https://cloud.yandex.ru/docs/free-trial/concepts/quickstart|Как воспользоваться пробным периодом]] * [[https://console.cloud.yandex.ru/billing]] * Установка ПО для [[Перекодировка звука#Перекодировка в ogg формат]] * Используя [[Пакет sudo]] переключаемся на пользователя аsterisk * [[Перекодировка звука#Перекодировка в ogg формат]] записанного голосового сообщения * Инициализируем и тестируем распознавание [[Yandex SpeechKit]] ===== Шаг 5. Развертываем систему рассылки email ====== * [[UA mutt]] ===== Шаг 6. Добавляем голосовую почту в диалплан ====== * [[Сервис Asterisk#Настройка RES_PJSIP каналов]] добавляем переменные MY-USER-ID для email # cat /usr/local/bin/mailsend.sh #!/bin/sh DIR=/usr/share/asterisk/sounds/recordings/ RECFILENAME=${DIR}$1 MAILTO=$2 MAILFROM=${3%.empty} NUMFROM=$4 NAMEFROM=${5%.empty} if [ -z "$MAILFROM" ] then MAILFROM=asterisk@server.corpX.un fi logger -t asterisk -p local0.info $@ #exit 0 FOLDER_ID=b1gg4j6ru4esprat3uu7 IAM_TOKEN=`/var/lib/asterisk/yandex-cloud/bin/yc iam create-token` /usr/bin/sox -t al -r 8000 -c 1 ${RECFILENAME}.alaw ${RECFILENAME}.wav /usr/bin/ffmpeg -y -nostats -loglevel 0 \ -i ${RECFILENAME}.wav \ -acodec libvorbis ${RECFILENAME}.ogg /usr/bin/curl -s -X POST -H "Authorization: Bearer ${IAM_TOKEN}" \ --data-binary "@${RECFILENAME}.ogg" \ "https://stt.api.cloud.yandex.net/speech/v1/stt:recognize?folderId=${FOLDER_ID}" \ | jq '.result' | tr -d '"' > ${RECFILENAME}.txt export EMAIL="${NAMEFROM}<${MAILFROM}>" cat ${RECFILENAME}.txt | mutt -s "Голосовое сообщение от абонента ${NUMFROM}" -a ${RECFILENAME}.ogg -- ${MAILTO} /bin/rm ${RECFILENAME}.* exit 0 # chmod +x /usr/local/bin/mailsend.sh # cat /etc/asterisk/extensions.conf [default] ... ;exten => _4XX,1,Dial(PJSIP/${EXTEN},10) exten => _4XX,1,Dial(SIP/${EXTEN},10) ;exten => _4XX,n,Set(MY-CALLED-USER-ID=${PJSIP_ENDPOINT(${EXTEN},MY-USER-ID)}) exten => _4XX,n,Set(MY-CALLED-USER-ID=${SIPPEER(${EXTEN},chanvar[MY-USER-ID])}) exten => _4XX,n,Goto(mailrec,s,1) ... [mailrec] exten => s,1,Playback(vm-intro) exten => s,n,Record(recordings/${UNIQUEID}.alaw,,29,xk) exten => s,n,Hangup() exten => h,1,System(/usr/local/bin/mailsend.sh ${UNIQUEID} ${MY-CALLED-USER-ID} ${MY-USER-ID}.empty ${CALLERID(num)} "${CALLERID(name)}.empty" &)