TwilioのProgrammable Chatで動画を送信してみる

TwilioのProgrammable Chatで動画を送信してみる

動画のやり取りができるチャットを作りたいと思い、TwilioのProgrammable ChatのMedia Messageの機能を検証してみました。
Clock Icon2020.09.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

動画のやり取りができるチャットを作りたいと思い、TwilioのProgrammable ChatのMedia Messageの機能を検証してみました。

Programmable Chatとは

Programmable Chatは、リアルタイムのバックエンドを構築、またはスケーリングすることなくWebおよびネイティブのモバイル・アプリケーションへのチャット機能の追加を容易にします。 Chatは開発者のビジネスロジックに統合し、確実に使いこなすにあたって必要なAPiと機能を提供します。

出典: https://jp.twilio.com/docs/chat

要するに汎用的なチャット機能を提供してくれるサービスです。

基本的な機能について、以下の記事で紹介されていますのでご参照ください。

[Tutorial] Twilio Programmable Chatを使ってチャット機能を実装する

やってみる

今回はこちらのサンプルプロジェクト https://github.com/TwilioDevEd/sdk-starter-node に機能を加えて、ファイルをアップロードできるようにしてみます。

Twilioのセットアップ

まずはTwilioの設定を行います。

  • Twilioのアカウント(フリープランで構いません)を作成します。
  • Programmable Chatサービスを作成します。
  • Programmable Chat > Base Configuration から Service SIDを控えておきます。
  • Twilioの設定からアカウントSIDと、APIキーを発行してAPIキー、シークレットを控えておきます。

サンプルプロジェクト

サンプルプロジェクトをforkして、READMEに従い.envファイルに値を設定します。

そしてサンプルプロジェクトのChatページにMedia Messageを送受信する機能を追加しました。

diffはこちらを参照してください

npm start でローカルサーバを起動して http://localhost:3000/chat/ にアクセスすると以下のページが表示されます。

ファイルを選択してテキストエリアにカーソルがある状態でEnterキーを押すと、選択したファイルが送信されます。また、 load message の部分をクリックすると、Messageを読み込んで、MediaのTemporaryURLを取得してconsole.logに出力するようにしています。

以下はTwilioのコンソールで確認できたアップロードされたMediaです。

TemporaryUrlは以下の形式になります。有効期限は300秒のようです。

https://media.us1.twilio.com/{MediaのSID}?Expires={UnixTime}&Signature={省略}&Key-Pair-Id={省略}

感想

良い点

MediaへのアクセスはTemporaryUrl(一時的なURL)でアクセスするようになっており、Media Messageを参照する権限がある人、つまりチャンネルの参加者のみがそのURLを発行可能となっています。

また料金がMediaのデータ保存量だけで、トラフィック料金がかからないので費用面で優しいです。

制限や課題

Mediaの最大サイズは150MBに制限されています。動画で150MBというと、画質をスマートフォンでまあまあきれいに見られるレベルに落として、せいぜい5分程度の長さでしょうか。動画を送るにはギリギリのラインという感じです。

また、動画の変換処理などはありませんので、送信側で予め変換しておくか、Programmable ChatのWebhookの処理でどうにかする、ということになるかと思います。別のアイディアとして、Media Messageを使わずに、動画は別のサービスにアップロードしておいて、MessageのAttributesに動画のidだけを設定しておいて、動画は別のサービスから取得する、という方法も可能と思います。次回はその検証を行いたいと思います。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.