ボクココ

サービス開発を成功させるまでの歩み

TwilioJP-UG Online Vol.2 開催メモ と Twilio Voice SDK 2.0

ども、@kimihom です。

f:id:cevid_cpp:20210731151644p:plain

Twilio コミュニティの オンライン Meetup が開催された。

私の担当である Twilio 最新を追いかける係として、ブログにも記しておく。

Twilio Video, Flex アップデート

今変化の激しいプロダクトは Video と Flex に違いない。

今回のイベントでは、新しくリリースされた Video の 背景画像の適用がデモで見ることができた。

Zoom で当たり前となりつつある、ビデオのバックグラウンド背景画像の適用。これらを Web エンジニアが簡単に自社サービスに取り込めるのが、Twilio API の何よりの強みだ。Zoom は一般的なビデオ配信だけど、Twilio を通じて特定の用途に最適化されたビデオ配信は、今後 ますます発展していくと考えられる。

Flex では、第三者が開発した Flex 拡張アプリを、より簡単に管理できるようになっているようだ。電話をより便利にしたり、チャット、ビデオ通話など顧客とのあらゆるやりとりを一言管理できる Flex。日本により最適な Flex プラグイン を作ることもできるので、アプリのような感覚で顧客とのコミュニケーションをより便利に拡張できる。

Twilio Voice JS SDK 2.0

そして(私にとって) 直近での大きなリリースは、Twilio Voide JS 2.0 のリリースだ。

そこで、ある程度 日本語としてまとめたので、簡単に以下に記しておく。

変更点リンク https://www.twilio.com/docs/voice/sdks/javascript/changelog

執筆時点では、github で公開されている client サンプルアプリは バージョン1のまま。 https://github.com/TwilioDevEd/client-quickstart-node/blob/next/public/index.html

v2 でのサンプルコードが出てきたあと、比較しながら更新した方がいいか。

インストール

import を使った読み込みが基本。

もしくは Github から落として twilio.min.js を読み込ませることで Twilio.Device が利用できる。 https://github.com/twilio/twilio-voice.js/releases

呼び名前 変更

Twilio Client > Twilio Voice JavaScript メインはコードのリファクタリング。

Device singleton behavior removed

Device.setup() で Device 定義できなくなる。 1.0 の頃から new で初期化する方法が推奨されていた。

Connection renamed to Call

Connection の呼び名が Call へ変更。

Signaling connection now lazy loaded

シグナリングと呼ばれる WebRTC の接続 が遅延ロードに。 これに伴って、 ready イベントを実装する必要がなくなった。

発信時は connect イベントを作る。 着信が届くようにするには regsiter を呼ぶ。

トークン期限切れ対応

device.updateToken(newToken) を呼び出す。

Device 状態の変更

[Ready, Busy, Offline] の3つだった。 [Registered, Registering, Unregistered, Destroyed] に変更。 Busy ステータスがなくなる。

Device.isBusy で判別可能。

Device イベントの変更

Registering, Registered, Incoming, Error, Unregistered, Destroyed

今まで登録中のステータスが 曖昧だったのを修正。 offline -> unregistered ready -> registeringregistered

Device 実装の変更

async, promise でコーディングしていく。

const device = new Device(token, { edge: 'ashburn' });

// 着信
await device.register();
device.on(Device.EventName.Incoming, call => {
  /* use `call` here */ 
});
// 発信
const device = new Device(token, { edge: 'ashburn' });
const call = await device.connect({ To: 'alice' });

Device CallOptions and Call AcceptOptions standardized

発着信をするその時点で利用する デバイスを定義する。

device.connect({ To: 'client:alice' }, { deviceId: 'default' });
// or
device.connect({
  params: { To: 'client:alice' },
  rtcConstraints: { audio: { deviceId: 'default' } },
});

Moved to new Error format

TwilioError がメインクラスとなる。

class TwilioError extends Error {
  // エラー原因
  causes: string[];

  // エラーコード
  code: number;

  // エラーの説明
  description: string;

  // エラー内容の説明
  explanation: string;

  // 詳細の説明
  message: string;

  // エラー名
  name: string;

  // 外部システムでのオリジナルエラー
  originalError?: Error;

  // 解決方法
  solutions: string[];
}

Affected Error Codes

エラーコードの修正。 コードによってエラーメッセージ出してる場合は注意

Device Options

setup() で初期化する際にオプションを指定するしか方法がなかったが、updateOptions によって初期化後に設定を変更できるように。

LogLevel Module

ログレベルを 指定できる。 trace/debug/info/warn/error か?

Deprecations

TwiML で指定したカスタムパラメータの取得方法の変更。 Connection.message => Connection.customParameters

Connection.ignore() したときに on('cancel') イベントが呼ばれなくなった。

Twilio Device オプションの一部削除

2.0 でのオプション一覧

export interface Options {
  allowIncomingWhileBusy?: boolean; // busy ステータス時に着信
  appName?: string; // アプリ名
  appVersion?: string; // アプリバージョン
  audioConstraints?: MediaTrackConstraints | boolean; // WebRTC でのオーディオ制約
  closeProtection?: boolean | string; // 通話中にページ閉じる前に確認
  codecPreferences?: Connection.Codec[]; // 優先コーデック. デフォルト Opus 
  disableAudioContextSounds?: boolean; // オーディオ制約の無効
  dscp?: boolean;  // 「Differentiated Services Code Point」の略。
                   // IP Precedence と同様にパケットに優先度を付ける場合に使用
  edge?: string[] | string; // エッジロケーションの指定
  forceAggressiveIceNomination?: boolean; // アグレッシブなICE候補者の指名を可能にするChromeブラウザの実験的な機能。
  maxAverageBitrate?: number; // VoIPアプリケーションが使用する帯域幅をより適切に制御するための最大平均ビットレート。
  rtcConfiguration?: RTCConfiguration; // Twilio デフォルトの RTCConfiguration の上書き
  sounds?: Partial<Record<Device.SoundName, string>>; // 独自 着信音や dtmf 音
}

終わりに

Twilio Voice JS SDK 2.0 のリリースがあったので、旧Twilio Client を利用している方はアップデートを進めていけたらと思う。

昨日として思いっきり大きなアップデートという形ではなさそうだ。新しい JavaScript 記法でより効率良く JavaScript コードを管理されているように見える。

さぁ次なる Twilio Voice へ進んでいこう!