理系学生日記

おまえはいつまで学生気分なのか

Twilioで架電した電話を録音する

Twilioで「受けた」電話を録音するサンプルは色んなところに転がっています。 ただ、なかなか「架けた」電話を録音するサンプルがなかったので、確認してみました。

結論

非常に簡単で、電話をかけるときのTwiMLにRecord Verbを指定するだけで良いです。 電話をかけるときのTwiMLはTwimlパラメータで指定可能です。

このため、以下のようなコマンドを投げ込めば良いです。

$ curl -X POST https://api.twilio.com/2010-04-01/Accounts/$ACCOUNT_SID/Calls.json \
  --data-urlencode "Twiml=<Response><Say language='ja-JP'>録音するぞ!</Say><Record></Record></Response>" 
  --data-urlencode "To=$VERIFIED_NUMBER" \
  --data-urlencode "From=$TWILIO_NUMBER" \
  -u $ACCOUNT_SID:$AUTH_TOKEN

すると電話がかかってきて、いきなり「録音するぞ」とクソみたいな発言をされた後で、相手が無言になります。 録音されたファイルは、Twilio側に保存されます。 この録音に関するエンドポイントは、上記curlコマンドの標準出力に対して、jq -r .subresource_uris.recordingsすれば取り出せます。 基本的には/2010-04-01/Accounts/${ACCOUNT_SID}/Calls/${SID}/Recordings.jsonという形式になっているはずです。

このリソースにGETをかけると、録音関連の情報が取得できます。

$ curl https://api.twilio.com/2010-04-01/Accounts/${ACCOUNT_SID}/Calls/${SID}/Recordings.json -u $ACCOUNT_SID:$AUTH_TOKEN | jq -r '.recordings[0].uri'
/2010-04-01/Accounts/${ACCOUNT_SID}/Recordings/xxxxxxxxxxxxxxxx.json"

拡張子を.wavなり.mp3なり指定してGETリクエストを送ると、録音ファイルのダウンロードが可能です。

$ curl -o ~/recording.mp3 -u $ACCOUNT_SID:$AUTH_TOKEN https://api.twilio.com/2010-04-01/Accounts/${ACCOUNT_SID}/Recordings/xxxxx.mp3

curlだと、録音ファイルのURLに行き着くため、こういう取得方法になってしまいました。 一方でTwilioからのHTTPリクエストを受信可能なら、Recordaction属性を指定することで 録音ファイルURLを教えてもらうこともできそうです。

かなりザワザワした場所で架電テストを行ったからか、ファイルの音質は決してよくありませんでした。

なお、この方法では「発信者のみが話す」内容しか録音ができないようです。 このため、もしTwilioを使って電話の発信者・受信者の会話を録音するためには、DialVerbのrecordを使う必要がありそうです。