This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
голосовые_сервисы_помогут_голосовой_почте [2020/12/11 20:26] val [Шаг 6. Добавляем голосовую почту в диалплан] |
голосовые_сервисы_помогут_голосовой_почте [2026/06/22 14:42] (current) val [Шаг 4. Разворачиваем Yandex SpeechKit] |
||
|---|---|---|---|
| Line 30: | Line 30: | ||
| ==== Система ==== | ==== Система ==== | ||
| - | * Linux [[http://val.bmstu.ru/unix/img/My%20Documents/debian_10.0_64_01.ova|Debian 10]] в домашней сети | + | * Linux [[https://val.bmstu.ru/unix/img/My%20Documents/debian_10.11_64_01.ova|Debian 10]] в домашней сети |
| ==== Настройка сети ==== | ==== Настройка сети ==== | ||
| Line 97: | Line 97: | ||
| * Используя тему "[[Сервис Asterisk#Запись звукового файла]]" записываем и прослушиваем сообщение | * Используя тему "[[Сервис Asterisk#Запись звукового файла]]" записываем и прослушиваем сообщение | ||
| - | ===== Шаг 4. Разворачиваем Yandex SpeechKit ====== | + | ===== Шаг 4. ====== |
| + | |||
| + | ==== Разворачиваем Yandex SpeechKit === | ||
| * [[https://cloud.yandex.ru/docs/free-trial/concepts/quickstart|Как воспользоваться пробным периодом]] | * [[https://cloud.yandex.ru/docs/free-trial/concepts/quickstart|Как воспользоваться пробным периодом]] | ||
| * [[https://console.cloud.yandex.ru/billing]] | * [[https://console.cloud.yandex.ru/billing]] | ||
| + | * Установка ПО для [[Перекодировка звука#Перекодировка в ogg формат]] | ||
| * Используя [[Пакет sudo]] переключаемся на пользователя аsterisk | * Используя [[Пакет sudo]] переключаемся на пользователя аsterisk | ||
| - | * Инициализируем [[Yandex SpeechKit]] | + | * [[Перекодировка звука#Перекодировка в ogg формат]] записанного голосового сообщения |
| - | * Тестируем распознавание подготовив звуковой файл ([[Перекодировка звука#Перекодировка alaw в ogg формат]]) | + | * Инициализируем и тестируем распознавание [[Yandex SpeechKit]] |
| - | + | ||
| - | ===== Шаг 5. Развертываем систему рассылки email ====== | + | |
| - | * [[Организация рассылки электронной почты#Утилита msmtp]] | + | ==== Или Whisper ==== |
| <code> | <code> | ||
| - | # cat /etc/msmtprc | + | # su - asterisk |
| - | </code><code> | + | |
| - | defaults | + | |
| - | port 25 | + | |
| - | tls off | + | |
| - | + | ||
| - | account default | + | |
| - | host localhost | + | |
| - | domain localhost | + | |
| - | auth off | + | |
| - | </code><code> | + | |
| - | asterisk@server:~$ cat mail.txt | + | |
| - | </code><code> | + | |
| - | Content-Type: text/plain; charset=UTF-8 | + | |
| - | To: user1@corp13.un | + | |
| - | From: Вячеслав Лохтуров<user2@corp13.un> | + | |
| - | Subject: Запись | + | |
| - | cделана | + | |
| - | </code><code> | + | |
| - | asterisk@server:~$ cat mail.txt | msmtp -f user2@corp13.un user1@corp13.un | + | |
| </code> | </code> | ||
| + | |||
| + | * [[Whisper]] | ||
| + | ===== Шаг 5. Развертываем систему рассылки email ====== | ||
| + | |||
| + | * [[UA mutt]] | ||
| ===== Шаг 6. Добавляем голосовую почту в диалплан ====== | ===== Шаг 6. Добавляем голосовую почту в диалплан ====== | ||
| Line 146: | Line 133: | ||
| RECFILENAME=${DIR}$1 | RECFILENAME=${DIR}$1 | ||
| MAILTO=$2 | MAILTO=$2 | ||
| - | MAILFROM=${3:-asterisk@server.corpX.un} | + | MAILFROM=${3%.empty} |
| NUMFROM=$4 | NUMFROM=$4 | ||
| - | NAMEFROM=$5 | + | NAMEFROM=${5%.empty} |
| - | NAMEFROM=`echo $NAMEFROM | iconv -f utf-8 -t koi-7 | tr '[:upper:]' '[:lower:]'` | + | if [ -z "$MAILFROM" ] |
| + | then | ||
| + | MAILFROM=asterisk@server.corpX.un | ||
| + | fi | ||
| logger -t asterisk -p local0.info $@ | logger -t asterisk -p local0.info $@ | ||
| #exit 0 | #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/sox -t al -r 8000 -c 1 ${RECFILENAME}.alaw ${RECFILENAME}.wav | ||
| Line 164: | Line 151: | ||
| -acodec libvorbis ${RECFILENAME}.ogg | -acodec libvorbis ${RECFILENAME}.ogg | ||
| - | /bin/cat > ${RECFILENAME}.txt <<EOF | + | #FOLDER_ID=b1gg4j6ru4esprat3uu7 |
| - | Content-Type: text/plain; charset=UTF-8 | + | #IAM_TOKEN=`/var/lib/asterisk/yandex-cloud/bin/yc iam create-token` |
| - | To: $MAILTO | + | #/usr/bin/curl -s -X POST -H "Authorization: Bearer ${IAM_TOKEN}" \ |
| - | From: $NAMEFROM <$MAILFROM> | + | # --data-binary "@${RECFILENAME}.ogg" \ |
| - | Subject: Voice message from ${NUMFROM} | + | # "https://stt.api.cloud.yandex.net/speech/v1/stt:recognize?folderId=${FOLDER_ID}" \ |
| - | EOF | + | # | jq '.result' | tr -d '"' > ${RECFILENAME}.txt |
| + | |||
| + | source ~/venv1/bin/activate | ||
| + | cd $DIR | ||
| + | ~/venv1/bin/whisper ${FILENAME}.ogg --model base --device cpu --language ru >/dev/null 2>&1 | ||
| + | cd | ||
| - | /usr/bin/curl -s -X POST -H "Authorization: Bearer ${IAM_TOKEN}" \ | + | export EMAIL="${NAMEFROM}<${MAILFROM}>" |
| - | --data-binary "@${RECFILENAME}.ogg" \ | + | cat ${RECFILENAME}.txt | mutt -s "Голосовое сообщение от абонента ${NUMFROM}" -a ${RECFILENAME}.ogg -- ${MAILTO} |
| - | "https://stt.api.cloud.yandex.net/speech/v1/stt:recognize?folderId=${FOLDER_ID}" \ | + | |
| - | | jq '.result' | tr -d '"' >> ${RECFILENAME}.txt | + | |
| - | + | ||
| - | /bin/cat ${RECFILENAME}.txt | msmtp -f ${MAILFROM} ${MAILTO} | + | |
| /bin/rm ${RECFILENAME}.* | /bin/rm ${RECFILENAME}.* | ||
| Line 182: | Line 170: | ||
| exit 0 | exit 0 | ||
| </code><code> | </code><code> | ||
| + | # chmod +x /usr/local/bin/mailsend.sh | ||
| + | |||
| + | # su - asterisk | ||
| + | |||
| + | $ wget https://val.bmstu.ru/unix/Media/speech.alaw -P /usr/share/asterisk/sounds/recordings/ | ||
| + | |||
| + | $ /usr/local/bin/mailsend.sh speech user3@corpX.un '' 401 '' | ||
| + | |||
| # cat /etc/asterisk/extensions.conf | # cat /etc/asterisk/extensions.conf | ||
| </code><code> | </code><code> | ||
| [default] | [default] | ||
| ... | ... | ||
| - | exten => _4XX,1,Dial(PJSIP/${EXTEN},10) | + | ;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=${PJSIP_ENDPOINT(${EXTEN},MY-USER-ID)}) | ||
| - | ;exten => _4XX,1,Set(MY-CALLED-USER-ID=${SIPPEER(${EXTEN},chanvar[MY-USER-ID])}) | + | exten => _4XX,n,Set(MY-CALLED-USER-ID=${SIPPEER(${EXTEN},chanvar[MY-USER-ID])}) |
| exten => _4XX,n,Goto(mailrec,s,1) | exten => _4XX,n,Goto(mailrec,s,1) | ||
| + | |||
| + | ... | ||
| [mailrec] | [mailrec] | ||
| exten => s,1,Playback(vm-intro) | exten => s,1,Playback(vm-intro) | ||
| - | exten => s,n,Record(recordings/${UNIQUEID}.alaw,,,xk) | + | exten => s,n,Record(recordings/${UNIQUEID}.alaw,,29,xk) |
| exten => s,n,Hangup() | exten => s,n,Hangup() | ||
| - | exten => h,1,System(/usr/local/bin/mailsend.sh ${UNIQUEID} ${MY-CALLED-USER-ID} "${MY-USER-ID}" ${CALLERID(num)} "${CALLERID(name)}" &) | + | exten => h,1,System(/usr/local/bin/mailsend.sh ${UNIQUEID} ${MY-CALLED-USER-ID} ${MY-USER-ID}.empty ${CALLERID(num)} "${CALLERID(name)}.empty" &) |
| + | |||
| </code> | </code> | ||