Twilio Assets上にPrivateで登録したmp3ファイルをFunctionsを使って再生する


はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズのTwilio事業部エバンジェリストの高橋です。

今回は、タイトルにある通り、Twilio Assets上にプライベート属性で保存したmp3ファイルを、Functionsから呼び出す方法をご紹介します。

プライベートなAssetsとは

Twilio Assetsは、Twilioが提供しているストレージサービスで、mp3ファイルに限らず、様々なファイルをアップロードしておくことができます。
Assets上のファイルはTwilio上に保存されているため、Twilioからの呼び出しが早いというメリットがありますが、一方で通常の保存方法では、URLさえわかってしまうと外部から自由にアクセスできてしまうというデメリットがあります。
これを解決するために、Assets上にプライベート属性でファイルを保存することができます。


アップロード時に、MAKE PRIVATEにチェックを入れるとプライベート属性として保存されます。

プライベート属性として保存したファイルについては、Twilio Functionsから呼び出すことができますが、今回はmp3ファイルを呼び出して、再生するためのFunctionをご紹介します。

コーディング

さっそくコードをご紹介します。

const fs = require('fs');
exports.handler = function(context, event, callback) {
  const assets = Runtime.getAssets();
  const mp3AssetPath = assets['levelup.mp3'].path;  // Assets上に保存したファイル名を指定
  const stat = fs.statSync(mp3AssetPath);
  const response = new Twilio.Response();
  response.setStatusCode(200);
  response.appendHeader('Content-Type', 'audio/mpeg');
  response.appendHeader('Content-Length', stat.size);
  response.setBody(fs.readFileSync(mp3AssetPath));
  callback(null, response);
};

4行目にプライベート属性として保存したmp3ファイル名を指定してください(この例では、levelup.mp3)。
このコードを使って、Functionsを作成します。

もしTwilio StudioなどのTwilio内部から呼び出すのであれば、ACCESS CONTROLにチェックを入れておくことで、外部から直接呼び出されないようにできます。

たとえば、Studioから呼び出すときは、Say/Playウィジェットなどを使って、Play a Messageを選択、URL OF AUDIO FILEに先程のFunctionsのURLを指定すればOKです。

まとめ

プライベート属性のAssetsが、外部からのアクセスをできなくする目的には向いていますが、一方で登録できるファイルが10個までという制限があります。

と、ここまで記事にしてから気がついた。
本家のドキュメントに今回の記事と全く同じ内容が載っていた・・。
https://jp.twilio.com/docs/runtime/assets


Twilio(トゥイリオ)とは

https://cloudapi.kddi-web.com
Twilioは音声通話、メッセージング(SMS/チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。