[Twilio]発信者の声を録音して再生してみる#7

2013.04.25

Twilioでは録音もできます

今回は、Tiwlioの録音機能について紹介します。
Twilioでは、Recordタグを使用することで、
留守番電話にメッセージを吹き込むように、発信者のメッセージを録音することができます。
(Dialタグを使用すれば、双方の会話内容を録音することもできるみたいです)
この機能も簡単に実装できるので、やってみましょう。

環境構築方法

実行環境およびTwilioアカウントについては、第1回記事第2回記事を見て設定&確認しておいてください。
今回も第4回のサンプルをベースに作成するので、
Heroku環境とそのサンプルを用意しましょう。

発信者の声を録音して、そのまま再生してみる

さて、今回は任意のTwilioの電話番号をコールすると、録音を促すメッセージが流れ、発信者側の音声を録音できるようにします。
そして、録音が終わるとすぐに録音された音声が再生されるようにします。

1.Voice Request URLを指定

前回はメニュー読み上げのためのURLを指定しました。
今回も番号管理ページで使用する電話番号部分をクリックし、音声通話情報設定ページで、Voice Request URLを下記のように指定しましょう。

http://<デプロイしたサーバのドメイン>/recordMessage

電話をかけると、Twilioは/recordMessageへリクエスト行い、録音のためのTwiMLを返します。

2.アプリケーションを修正

app.jsに2つルート情報を追加します。
録音用TwiMLを返す/recordMessageと、録音後にその音声を再生する/playMessageを追加します。

・
・
//メッセージを録音
app.get('/recordMessage', routes.recordMessage);
//録音したメッセージを再生
app.get('/playMessage', routes.playMessage);
・
・

index.jsに関数を追加します。まずはコール時に録音を行う、recordMessage関数を追加しましょう。

・
・
/** メッセージ録音 */
exports.recordMessage = function (req, res) {
    var resp = new twilio.TwimlResponse();
    var opt = {
        voice: 'woman',
        language: 'ja-jp'
    }

    resp.say('録音を開始します。', opt)
    .record({
        action: 'http://<デプロイしたサーバのドメイン>/playMessage',
        method: 'GET',
        finishOnKey: '#',
        maxLength:10
    }).say('録音できませんでした。', opt);

    res.writeHead(200, {'Content-Type': 'text/xml'});
    console.log(resp);
    res.end(resp.toString());
};

record関数を使用すると、録音を行うことができます。actionは録音終了後にリクエストするURL、methodはリクエスト時のメソッドを指定します。
また、maxLengthでは、録音時間を秒単位で指定することができます。
指定時間内に録音を終了したい場合、finishOnKeyの値を入力すれば、その時点で録音を終了することができます。

次は、録音後に実行するTwiMLを生成するためのplayMessage関数を追加します。
Recordからの遷移先URLでは、「RecordingUrl」というパラメータ名で録音された音声のパスをもっています。
このパスをplay関数に渡して、そのまま再生しています。

/** メッセージ再生 */
exports.playMessage = function (req, res) {
    var recordingUrl =  req.query.RecordingUrl;
    console.log("recordingUrl",recordingUrl);

    var resp = new twilio.TwimlResponse();
    var opt = {
        voice: 'woman',
        language: 'ja-jp'
    }

    resp.say('録音した音声を再生します。', opt)
        .play(recordingUrl)
        .say('通話を終了します。', opt);

    res.writeHead(200, {'Content-Type': 'text/xml'});
    console.log(resp);
    res.end(resp.toString());
};

3.Herokuにデプロイして確認

いつものように、Herokuへログイン後、デプロイしましょう。

% heroku login //IDパスワード入力
% git add .
% git commit -m "録音機能追加"
% git push heroku master

デプロイと起動が完了したら、Voice Request URLで指定した電話番号にかけてみましょう。
自分の音声を録音することができ、その後すぐに録音した音声が再生されます。

録音された音声は下記URLにアクセスすれば、ブラウザでそのまま再生することもできます。
※環境により違うので、RecordingUrlを確認してください

http://api.twilio.com/2010-04-01/Accounts/<アカウントID>/Recordings/<id>

なお、上記URLに対してDELETEメッセージを送れば、削除することができます。

まとめ

今回は発信者メッセージの録音を試してみました。
録音した音声はすぐに誰でもアクセスできる状況になるので、いろいろ使い道がありそうです。

参考サイトなど