Asterisk のボイスメールを自動的に Google に文字起こしさせてメールで送る方法がないかと思って調べてみたら、既に試してみた人がいて、手順とスクリプトが纏められていました。
これをそのまま導入すれば良いのかと思いきや、API Key が必要ない Google Speech API の v1 は既に廃止されているらしく、これを動かすと API からは 404 が帰って来てしまいます。ちなみに Google の音声認識 API については Google Cloud Speech API が正式に提供されており、private 扱いとなっている Google Speech API はあまり推奨されないのかもしれませんが、今回は改造を最小限に抑えるために Google Speech API v2 に対応させてみます。
† Google Speech API の API Key を取得する
Google Speech API は private 扱いなので、利用するためにはあらかじめ Chromium-dev グループに参加しておく必要があります。
この辺りの手順や、API の仕様については以下のサイトにまとまっていますので、これらを参考に API Key を取得します。
† sendmailmp3 へのパッチ
基本的には sendmailmp3 の導入を行うだけですが、sendmailmp3 に以下のパッチを当ててください。
(###YOUR_API_KEY### の部分については自分の API Key に置き換える必要があります。)
また、この API は 1 日 50 回程度までしかアクセスできないので注意が必要です。
普通の人の留守電の用途であれば十分な回数だとは思いますが・・・・・・
diff -u /usr/sbin/sendmailmp3{.org,}
--- sendmailmp3.org 2018-01-27 20:53:40.425626774 +0900
+++ sendmailmp3 2018-01-27 22:23:54.469675777 +0900
@@ -13,7 +13,7 @@
# 16/07/2015 - V2.2 - Handle natively GSM WAV (thanks to Michael Munger)
# set language for voice recognition (en-US, en-GB, fr-FR, ...)
-LANGUAGE="en-US"
+LANGUAGE="ja-JP"
# set PATH
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
@@ -77,12 +77,13 @@
sox stream.part3.wav -r 16000 -b 16 -c 1 audio.flac vad reverse vad reverse lowpass -2 2500
# call Google Voice Recognition sending flac file as POST
- curl --data-binary @audio.flac --header 'Content-type: audio/x-flac; rate=16000' 'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&pfilter=0&lang='$LANGUAGE'&maxresults=1' 1>audio.txt
+ curl -X POST --data-binary @'stream.part3.wav' --header 'Content-Type: audio/l16; rate=8000;' 'https://www.google.com/speech-api/v2/recognize?output=json&lang='$LANGUAGE'&key=###YOUR_API_KEY###' | jq '.result[].alternative[0].transcript' >audio.txt
# extract the transcript and confidence results
- FILETOOBIG=$(cat audio.txt | grep "<HTML>")
- TRANSCRIPT=$(cat audio.txt | cut -d"," -f3 | sed 's/^.*utterance\":\"\(.*\)\"$/\1/g')
- CONFIDENCE=$(cat audio.txt | cut -d"," -f4 | sed 's/^.*confidence\":0.\([0-9][0-9]\).*$/\1/g')
+# FILETOOBIG=$(cat audio.txt | grep "<HTML>")
+# TRANSCRIPT=$(cat audio.txt | cut -d"," -f3 | sed 's/^.*utterance\":\"\(.*\)\"$/\1/g')
+ TRANSCRIPT=$(cat audio.txt)
+# CONFIDENCE=$(cat audio.txt | cut -d"," -f4 | sed 's/^.*confidence\":0.\([0-9][0-9]\).*$/\1/g')
# generate first part of mail body, converting it to LF only
mv stream.part stream.new
@@ -99,7 +100,7 @@
echo "Voice message is too long to be transcripted." >> stream.new
else
# append result of transcription
- echo "Message seems to be ( $CONFIDENCE% confidence ) :" >> stream.new
+# echo "Message seems to be ( $CONFIDENCE% confidence ) :" >> stream.new
echo "$TRANSCRIPT" >> stream.new
fi
† ボイスメール本文の例
こんな感じで、いつものボイスメールの末尾に文字おこししたテキストが追加されるようになります。
これで簡単な要件であればファイルを開くことなく内容が分かるようになります。
line,
3000 に新しいボイスメールが届いています
From: "line" <3000>
Length: 0:10 seconds
Date: Saturday, January 27, 2018 at 10:23:54 PM
Dial *98 to access your voicemail by phone.
Visit http://AMPWEBADDRESS/ucp to check your voicemail with a web browser.
---
"これは ボイスメールのテストです これは ボイスメールのテストです"