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リクエストを受信可能なら、Record
のaction
属性を指定することで
録音ファイルURLを教えてもらうこともできそうです。
かなりザワザワした場所で架電テストを行ったからか、ファイルの音質は決してよくありませんでした。
なお、この方法では「発信者のみが話す」内容しか録音ができないようです。
このため、もしTwilioを使って電話の発信者・受信者の会話を録音するためには、Dial
Verbのrecord
を使う必要がありそうです。