Giter Club home page Giter Club logo

garoon-schedule-twilio-video's Introduction

はじめに

本記事は、サイボウズ社の中堅、大企業向けグループウェアである「Garoon(ガルーン)」の予定詳細画面上にTwilio Videoのコンポーネントを組み込むことで、ガルーンの画面上で最大4名のテレビ会議を実装する方法になります。

スクリーンショット 2020-04-07 15.30.20.png

市販のテレビ会議ソフトのような機能はありませんが、Garoonの予定詳細画面を開いて参加ボタンを押すだけで会議ができるシンプルさが特長になっています。

Programmable Videoとは

Programmable Video

  • WebRTCをベースに構築された音声・動画・データ通信サービス
  • JavaScript SDK / iOS SDK / Android SDKを提供
  • JavaScript SDKを使うことでGaroon上でビデオが利用可能
  • アクセストークンを使った認証
  • ルームベースでの実装(呼び出し機能はありません)
  • 「ピアツーピア(P2P)ルーム」と、SFUベースの「グループルーム」「スモールグループルーム」の3種類が利用可能
  • ピアツーピアルームは最大10名まで、スモールグループルームは最大4名まで、グループルームは最大50名までの参加者を収容可能
  • TURN/STUNサービスも提供
  • 画面共有に対応(ChromeとFirefoxのみ)
  • 録画機能に対応(グループルーム、スモールグループのみ)
  • メディアコーデックには、Opus(音声)、VP8 / H.264(映像)に対応

Twilio Video SDKが対応するブラウザ

CHROME MS EDGE FIREFOX SAFARI
Android - -
iOS * - *
Linux - -
macOS -
Windows -
  • EDGEは現時点で非対応
  • iOSのChromeとFirefoxでは、WebRTC APIにはアクセスできません。

Video APIの認証

  • Twilio VideoのAPIにアクセスするためにはアクセストークンが必要
  • アクセストークンは、以下の情報を使って動的に生成
  • ACCOUNT SID (Twilioのアカウントに紐付いたID)
  • API KEY
  • API SECRET
  • IDENTITY (セッション中にユーザを識別するための値)
  • アクセストークンに対して、接続可能なルームを埋め込むことが可能
  • API経由で生成する他、管理コンソール上でも生成が可能

実装方法

準備するもの

  • Twilioアカウント(トライアルアカウントでも可)
  • Garoonの管理者アカウント
  • Chromeブラウザが動作するPC
  • ビデオカメラとマイク、スピーカー

Twilioのアカウント取得については、こちらの記事を御覧ください。

事前に調べておくもの

  • GaroonのAPP URI 例:xxxxxx.cybozu.com

作業手順

一連の作業は以下のとおりです。

  1. Twilioの管理コンソールにログインする
  2. Twilio Videoの設定を行う
  3. Twilio VideoでAPIキーとシークレットを取得する
  4. TwilioのRuntime環境を構築する
  5. TwilioのFunctionsにプログラムの実装する
  6. Garoon上でJS/CSSの設定を行う
  7. Garoon上で施設の登録を行う

Twilio管理コンソールにログイン

手順1. Twilioの管理コンソールにログインします。

  • ブラウザでログイン画面を表示し、事前に取得したIDとパスワードでログインをします。

スクリーンショット 2018-05-04 10.13.08.png

手順2. Twilio Videoの設定を行う

  • Twilioの管理コンソールにログインします。
  • 左側のメニューボタン(ボタンのようなアイコン)をクリックし、スライドしたメニューからProgrammable Videoを選択します。
  • **Rooms(部屋)を選択し、さらにSettings(設定)**を選びます。
  • Room Topologyの中のROOM TYPEリストから「Group-Small」を選択します。
  • VIDEO CODECは「VP8 & H.264」を選択します。
  • RECORDINGは「DISABLED」を選択します。
  • MAXIMUM PARTICIPANTSは「4」とします。
  • MEDIA REGIONのプルダウンから「Japan - jp1」を選択します。

スクリーンショット 2020-04-07 16.30.03.png

  • Saveボタンを押します。

手順3. Twilio VideoでAPIキーとシークレットを取得する

  • スライドメニューからProgrammable Videoを選択します。
  • Videoのサブメニューからツールを選択し、さらにAPI Keysを選択します。
  • 新しいAPIキーを生成するを押して、新しいAPIキーを生成します。
  • わかりやすい名前欄に、「Video」と入力します。キータイプはそのままでOKです。

スクリーンショット 2018-10-25 05.28.39.png

  • APIキーを生成するボタンを押します。

Video_API_Key.png

  • 表示されたSIDSECRETの値をメモ帳にコピーしておきます。
  • 完了しました!のチェックをいれて、終了ボタンを押します。

手順4. TwilioのRuntime環境を構築する

  • スライドメニューのRUNTIMEから、Functionsを選択します。
  • **Configure(設定)**を選択します。
  • Enable ACCOUNT_SID and AUTH_TOKENのチェックボックスをONにします。

スクリーンショット 2018-10-25 05.26.06.png

  • Environmental Variablesの赤いアイコンを3回クリックして、3つの行を生成します。
  • 各行に以下の内容を設定します。
KEY VALUE
GAROON_APP_URI 事前に調べておいたGaroonのAPP_URI(xxxxxx.cybozu.com)
TWILIO_VIDEO_KEY VideoのAPIキーのSID文字列
TWILIO_VIDEO_SECRET SIDに対応したSECRET文字列

スクリーンショット 2020-04-07 16.35.02.png

  • Dependenciesのtwilioのバージョンを「3.29.2」に変更します。

スクリーンショット 2020-04-07 16.36.23.png

  • SAVEボタンを押して、設定を保存します。

手順5. TwilioのFunctionsにプログラムの実装する

  • スライドメニューのRUNTIMEから、Functionsの**Manage(管理)**を選択します。
  • 赤いプラスアイコンをクリックするか、Create a new functionを選択して、新しいFunctionを作成します。
  • New Functionダイアログでは、Blankを選択し、Createボタンを押します。
  • FUNCTION NAME欄に「VideoToken」、PATH欄に「/video-token」と入力します。
  • ACCESS CONTROLのチェックボックスを外します。

スクリーンショット 2020-04-07 16.39.01.png

  • CODE欄に予め書かれているコードをすべて削除し、以下のコードを貼り付けます。
exports.handler = function(context, event, callback) {
    const response = new Twilio.Response();
    response.appendHeader('Access-Control-Allow-Origin', 'https://'+context.GAROON_APP_URI);

    const IDENTITY = event.identity || '';
    if (IDENTITY === '') callback(new Error(`Parameter 'identity' was not set.`));

    const roomName = event.room || '';
    if (roomName === '') callback(new Error(`Parameter 'room' was not set.`));

    const ACCOUNT_SID = context.ACCOUNT_SID;
    const API_KEY = context.TWILIO_VIDEO_KEY;
    const API_SECRET = context.TWILIO_VIDEO_SECRET;

    const AccessToken = Twilio.jwt.AccessToken;
    const VideoGrant = AccessToken.VideoGrant;

    const videoGrant = new VideoGrant({
        room: roomName
    });

    const accessToken = new AccessToken(
        ACCOUNT_SID,
        API_KEY,
        API_SECRET
    );

    accessToken.addGrant(videoGrant);
    accessToken.identity = IDENTITY;

    response.appendHeader('Content-Type', 'application/json');
    response.setBody({
        token: accessToken.toJwt()
    });
    callback(null, response);
};
  • SAVEボタンを押して、コードを保存します。
  • しばらくすると、デプロイ完了の緑色のバナーが表示されます。
  • 画面上のPATHの部分に表示されているURL(https://xxxxxxxx-xxxxx-xxxx.twil.io)をメモ帳に控えておいてください。

Function_Path.png

以上でTwilio側の設定は終了です。このあとはGaroonの設定を行っていきます。

手順6. Garoon上でJS/CSSの設定を行う

まずはGaroonに組み込むJSファイルと、CSSファイルをダウンロードします。

以下のGitHubから「twilioVideo.js」ファイルをダウンロードしてください。 https://github.com/twilioforkwc/garoon-schedule-twilio-video 以下のGitHubから「grn_kit.css」ファイルをダウンロードしてください。 https://github.com/garoon/css-for-customize

  • ダウンロードしたtwilioVideo.jsをエディタで開きます。
  • 13行目にある以下の行のxxxxxxxxx-xxxxx-xxxxの部分を、先程控えておいたFunctionのPATHに置き換えてください。
const TWILIO_DOMAIN = 'xxxxxxxxx-xxxxx-xxxx.twil.io'; // xxxxxxx-xxxxxxx-xxxx.twil.io

では次に、このJSのファイルをGaroonに組み込んでいきます。

ここからの作業は、Garoonの管理者権限をもったユーザが行う必要があります。

  • Garoonを開きます。

  • 右上の歯車アイコンをクリックして、Garoonシステム管理を選択します。 Garoon_Garoonシステム管理選択.png

  • 左側の一覧からスケジュールを選択し、JavaScript / CSSによるカスタマイズをクリックします。 Garoon_JavaScriptCSS選択.png

  • カスタマイズグループを追加するというリンクをクリックします。

  • 以下の内容を登録していきます。

項目名 説明
カスタマイズ 適用するを選択します
カスタマイズグループ名 「TwilioVideo」と入力します
適用対象 変更するを選択して、このビデオを利用するユーザをすべて追加します。

JavaScriptカスタマイズには、以下の並び順でリンクとJSファイルを登録します。

順番 適用するファイルおよびリンク
1 https://unpkg.com/axios/dist/axios.min.js
2 https://media.twiliocdn.com/sdk/js/video/releases/2.2.0/twilio-video.min.js
3 twilioVideo.js (先程ダウンロードしたもの)

CSSカスタマイズには、先程ダウンロードしたgrn_kit.cssを登録してください。

スクリーンショット 2020-04-08 16.44.43.png

  • 追加するボタンを押して設定を保存します。
  1. Garoon上で施設の登録を行う
  • システム管理(各アプリケーション)に戻り、左側のスケジュールを選択します。

  • 施設/施設グループを選択します。 Garoon_施設選択.png

  • 施設を追加するリンクをクリックします。

  • 以下の内容を追加します。

項目名 説明
施設名 標準に「TwilioVideo」と入力します
施設コード 「TwilioVideo」と入力します
メモ 「Room:Room」と入力します(大文字小文字に注意してください)。

スクリーンショット 2020-04-08 16.53.32.png

  • 追加するボタンを押します。

施設が登録されたら、一通りの設定はすべて終了です。

テスト

Garoon上で予定を登録します。 その際に、施設の一覧から「TwilioVideo」を選択しておきます。

スクリーンショット 2020-04-08 16.55.52.png

作成した予定の詳細画面上で、自分の姿が映れば成功です。 ※最初のアクセス時は、カメラとマイクのアクセス確認が表示されますので、許可を選択してください。 スクリーンショット 2020-04-08 16.58.59.png

実際に会議を始めるときは、参加ボタンを押します。 会議を終了するときは、退出ボタンを押します。

まとめ

冒頭にも書きましたが、市販のビデオ会議サービスなどに比べると機能もほとんどなく、シンプルな作りになっていますので、設定さえ間違えなければ誰でもすぐに使い始めることができると思います。

ちなみにこのシステムにかかる料金を最後のご紹介しておきます。 今回は、最大4名までのSmall-Video Roomを使っているため、1参加者あたり0.61111円/分が課金されます。 たとえば、30分のミーティングを4名で行った場合、単純に計算すると73.3332円となります。 基本料などはなく、完全従量制です。


Twilio(トゥイリオ)とは

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

garoon-schedule-twilio-video's People

Contributors

mobilebiz avatar chick-p avatar

Watchers

James Cloos avatar Twilio for KDDI Web Communications avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.