本日の資料
以下にアップされています(限定公開URL)
http://goo.gl/V3sfrx
ハンズオンの目的
Twilioのことをよく知ろう
- Twilioとは
- 管理コンソールの操作
- TwiML/RestAPI
- SMS
- もくもくしよー!
プロモーションアカウントについて
- トライアルアカウントではありません
- 一定額のポイントがチャージされています
- 利用規約に同意していただく必要があります
- ハンズオン終了後も使い続けられます
自己紹介
髙橋克己(たかはしかつみ)
(株)KDDIウェブコミュニケーションズ
Twilio事業部 ソリューションアーキテクト
katsumi.takahashi@kddi-web.com
Twilioとは
Twilioの読み方
**「トゥイリオ」**と発音します。
「ツイリオ」←×
「トィリオ」←×
「ツイーリオ」←×
打ち方難しいので、Twilio(Tは大文字)で。
「とえりお」を早口でいうとネイティブ発音に近いらしいです。
Twilioの歴史
Twilioの機能
-
Voice&Video
音声通話&ビデオ通話 -
Messaging
SMS、IP Messaging、Facebook Messanger等 -
Authentication
Authy(二要素認証)
Twilioの事例紹介
Twilioの構成(Voice)
Twilio for KWC
- 日本独自のアカウント管理
- 050/0120/0800番号の提供
- 通信経路の最適化
- 日本語によるサポートの提供
- ログイン画面の右上にKDDIのロゴ
Twilioに必要な環境
ネット回線
-
インターネット環境
-
上りアクセス先
https://api.twilio.com -
下りアクセス元
AWSのすべてのIPアドレス範囲
公開サーバー
- 外部からアクセスができること
- 固定アドレス
- HTTPもしくはHTTPS(推奨)
- Basic認証設定可
- フェイルオーバー利用可
プログラミング環境
- TwilioからのHTTP/HTTPSリクエストを処理
- Twilio RestAPIの実行
- ヘルパーライブラリあり(後述)
クライアント
- 電話機
- VoIPクライアント(ブラウザ/iOS/Android)
- VoIPクライアント用SDKあり
コンソール
ログイン後に、https://jp.twilio.com/console
実習(コンソールの基本操作)
- 旧コンソールからの切り替え
- ログイン後に、https://jp.twilio.com/console
- 各種メニュー
- ドキュメントの閲覧
- 名前とメールアドレスを変更してみる
課金
- 課金のしくみ
- 支払い方法
- 何に対して課金されるのか
課金の仕組み
- ポイントを事前購入し、利用した分だけがそこから引かれていく。
- 残ポイントはコンソールから確認可能。
- ポイントがなくなってしまったアカウントはサスペンド。
- ポイントを追加すればサスペンド解除。
支払い方法
- カード(Visa/Master)、PayPalによる都度決済
- オートチャージ設定も可能
- バックアップ設定
- 後払い(請求書払い)を希望する場合は営業に問い合わせ。
何に対して課金されるのか
- 電話番号(月単位)
- 通話料(通話終了時)
- 着信料(通話終了時)
- SMS送信(Twilio設備から送信された時)
- SMS受信(Twilio設備に受信した時)
- その他(録音、カンファレンスなど)
電話番号
- 電話番号の購入
- SMS送信用番号の購入
- 電話番号のリリース
- 検証済み電話番号
実習(電話番号の購入)
- 電話番号を購入する
- 050番号を購入する
- USの番号を購入する
TwiML
TwiMLとは
- **「トゥイムル」**と発音します
- 表記方法は、「TwiML」です(wiだけ小文字)
- Twilio独自のXMLファイル
- Twilioからのリクエストに対して返却します
- Twilioに実行して欲しい動作を記述します
TwiMLのしくみ
Voice着信の例
TwiMLのサンプル
- 先頭行で、XMLファイルであることを規定
- <Response>と</Response>で囲む
- <Say>や<Record>は動詞
- voiceやmaxLengthは属性
- 大文字、小文字に注意
- ヘルパーライブラリに頼ると便利
TwiML動詞一覧
TwiML Apps
- TwiMLを返却するURLに名前を付けたもの
- 番号ごとにURLを指定するより、メンテナンスビリティが向上する
- VoIPクライアントから発信するときにも利用
- コンソールの電話番号→ツール or SMS→ツール
- 発信テストが可能
TwiML bins
- Webサーバーを用意しないでTwiMLを返すことができる
- TwiMLのテストを行う(文法チェックあり)
- アカウントごとに管理されている
- TwiML binsは無料
- URLも生成されるので、TwiML Appsと連携可
着信時の動作について
電話番号の設定
CONFIGURE WITH
-
Webhooks/TwiML
URLで指定する(Webhooks)か、TwiML binsから選択する -
TwiML Apps
あらかじめ作成しておいたTwiML Appsから選択する -
SIP Trunk
接続させたいSIP Trunkを指定する
実習(着信時の動作)
- 応答メッセージを流す
- 電話を転送する
- 通話を録音する
- ログを確認する
TwiMLを作成しよう
<Response>
<Say language='ja-JP' voice='alice'>
この電話を転送しますので、しばらくお待ち下さい</Say>
<Dial callerId='購入した番号'
record='record-from-ringing'>
<Number>かけたい番号</Number>
</Dial>
</Response>
転送(TwiMLで発信)の仕様
<Dial>動詞で指定できる名詞
- <Client>: VoIPクライアントを呼び出す
- <Conference>: カンファレンスに参加させる
- <Number>: PSTN経由で発信する
- <Queue>: キューに滞留した呼を取り出す
- <Sip>: SIPクライアントを呼び出す
<Dial>動詞のパラメータ
- action: 通話が終了したときに呼び出されるWebhook
- method: POST/GET
- timeout: 最大呼び出し秒数(Max60秒、初期値30秒)
- hangupOnStar: アスタリスクで通話終了
- timeLimit: 最大通話秒数(Max14400、4時間)
- callerId: Twilioで購入した番号(必須)
- record: 通話録音するかどうか
- trim: 録音データの先頭と最後の無音を削除するか
<Number>名詞のパラメータ
-
sendDigits: 応答後に送信するDTMF信号
-
url: 応答直後に実行するTwiMLを返すWebhook
-
method: urlに対するPOST/GET
-
statusCallback: イベント発生時のWebhook
statusCallbackについては、Vol.2で詳しくやります。 -
statusCallbackEvent: 呼の状態を受け取るイベント
-
statusCallbackMethod: statusCallbackのPOST/GET
Twilio RestAPI
Twilio RestAPIとは
- Twilioの機能を外部から呼び出すRest API
- VoiceやSMSの機能の他、電話番号の購入、アカウント操作や、ログの管理も可能
- HTTPS+Basic認証(AccountSidとAuthToken)
- ヘルパーライブラリが用意されている
(参考) Rest API
- Webサービスを外部から呼び出すための規約
- Webhookとも呼ばれる
- HTTPプロトコルベース
- GET/POST/PUT/DELETE
Twilio RestAPIの例(Curl)
- 電話発信の例
curl -XPOST \
https://api.twilio.com/2010-04-01/Accounts/ACXXXX/Calls.json \
-d "Url=http://demo.twilio.com/docs/voice.xml" \
-d "To=%2B8150XXXXXXXX" \
-d "From=%2B8150XXXXXXXX" \
-u 'ACXXXX:your_auth_token'
ヘルパーライブラリ
-
Server Side SDK
C#/.NET, Java, Node, PHP, Python, Ruby, Salesforce -
VoIPクライアント用SDK
JavaScript SDK, iOS SDK, Android SDK
ヘルパーライブラリの例(PHP)
TwiMLとRestAPIの使い分け
- TwiMLの<Dial>動詞と、RestAPIのコールの生成(発信)はどう違うのか
- すでに生成された呼に対してはTwiML
- 呼を生成するにはRest API
呼(コール)とは何か
- 通話の単位
- 状態を持つ(Queued → Initiated → Ringing → In-progress → Completed)
- Twilioはコール単位にログが記録される
コール(転送)の例
Voiceサービスの制限事項
- 050番号からは、0AB0、1XY、#ABCD、0120、0800には発信できません(177は市外局番を付与すればOK)
- 0120、0800番号からは、0AB0、1XY、#ABCDには発信できません(177は市外局番を付与すればOK)
- 1秒間に1発信の制限があります
- 非通知着信は266696687が表示されます
SMS
Twilio for KWCにおけるSMS
- 050番号ではSMSサービスを提供していません(国の仕様)
- 050番号以外のSMSが送信できる番号を購入してください
- 国際SMSを利用するため、複数のアグリゲーターを経由します
- 1通/秒/番号の送信制限があります
- 到達率は70%(2016年7月現在)
- 送信料、着信料が必要です(140文字単位)
- 送信者IDに、電話番号以外は指定できません
コパイロットSMS
-
通常のSMSを包含した、より高機能なメッセージングサービス
-
送信時に、From番号ではなく、Sidを指定する
-
以下の機能を用意(StickySender、Scaler以外は国内未対応)
StickySender/Alpha Sender Id/Scaler/Geomatch/Shortcode-reroute/MMS Converter
Rest APIを使ったSMS送信の例
実習(SMSの送信)
- SMSを送信するTwiMLを作成
- 電話番号の着信時設定
<Response>
<Say language='ja-JP' voice='alice'>
お電話ありがとうございます。ショートメールを送信します。</Say>
<Sms from='購入したUSの番号'>Welcome CPI MEGA MIX !\n
http://www.shared-blog.kddi-web.com/mega-mix2016/
</Sms>
</Response>