Twilio API を PHP で触ってみよう

13,829 views

Published on

2013/10/17 Twilio API 勉強会

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,829
On SlideShare
0
From Embeds
0
Number of Embeds
8,470
Actions
Shares
0
Downloads
24
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Twilio API を PHP で触ってみよう

  1. 1. Twilio API を PHP で触ってみよう 2013/10/17 shin1x1 Twilio API 勉強会
  2. 2. Agenda • Twilioライブラリ • インストール • 電話を受ける • 電話を受ける(簡易 IVR) • 電話をかける • セキュリティ (c) 2013 Masashi Shinbara @shin1x1
  3. 3. Twilioライブラリ (c) 2013 Masashi Shinbara @shin1x1
  4. 4. Twilioライブラリ • Twilio API と連携するライブラリ • 主な機能 (REST API, TwiML, バリデーション) • 各言語版 (PHP, Ruby, Python, .NET, Java, Node.js, Salesforce, C++ 等々) (c) 2013 Masashi Shinbara @shin1x1
  5. 5. Twilio PHP ライブラリ • twilio-php • PHP 5.2 以上 • PEAR, ZIP, Composer • Composer でインストール (c) 2013 Masashi Shinbara @shin1x1
  6. 6. インストール (c) 2013 Masashi Shinbara @shin1x1
  7. 7. コード https://gist.github.com/shin1x1/7006593 #twilioapistudy (c) 2013 Masashi Shinbara @shin1x1
  8. 8. Composer インストール $ cd yourdir $ curl -s http://getcomposer.org/ installer | php $ ls composer.phar (c) 2013 Masashi Shinbara @shin1x1
  9. 9. twilio-php インストール $ php composer.phar require twilio/sdk devmaster $ ls composer.json composer.lock composer.phar vendor (c) 2013 Masashi Shinbara @shin1x1
  10. 10. インストール確認 • サンプルスクリプト [sample.php] <?php require_once __DIR__.'/vendor/autoload.php'; $xml = new Services_Twilio_Twiml(); $xml->say('Hello!'); header('Content-type: text/xml; charset=utf-8'); echo $xml; http://xxx/yourdir/sample.php (c) 2013 Masashi Shinbara @shin1x1
  11. 11. 電話を受ける (c) 2013 Masashi Shinbara @shin1x1
  12. 12. 電話を受ける 050-xxxx-xxxx Twilio Webサーバ (c) 2013 Masashi Shinbara @shin1x1
  13. 13. 電話を受ける HTTPリクエスト (c) 2013 Masashi Shinbara @shin1x1
  14. 14. 電話を受ける 処理を実行 TwiML生成 (c) 2013 Masashi Shinbara @shin1x1
  15. 15. 電話を受ける TwiMLを返す (c) 2013 Masashi Shinbara @shin1x1
  16. 16. 電話を受ける 音声を返す 電話を転送 応答を待つ等々 (c) 2013 Masashi Shinbara @shin1x1
  17. 17. 電話を受ける HTTPリクエスト (c) 2013 Masashi Shinbara @shin1x1
  18. 18. 電話を受ける TwiMLを返す (c) 2013 Masashi Shinbara @shin1x1
  19. 19. 電話を受ける • HTTPリクエストが来たら • 何か処理をして • TwiMLを返す 普通のWebシステムと一緒! (c) 2013 Masashi Shinbara @shin1x1
  20. 20. 作ってみよう! • 電話をかけると • 「こんにちは!」と言ってくれる • TwiML 生成にライブラリを使う (c) 2013 Masashi Shinbara @shin1x1
  21. 21. PHPコード •inbound.php <?php require_once __DIR__.'/vendor/autoload.php'; $xml = new Services_Twilio_Twiml(); $xml->say('こんにちは!', array('language' => 'ja-jp')); header('Content-type: text/xml; charset=utf-8'); print $xml; http://xxx/yourdir/inbound.php (c) 2013 Masashi Shinbara @shin1x1
  22. 22. 管理画面 URL を変更する http://hoge/yourdir/inbound.php 保存を忘れずに (c) 2013 Masashi Shinbara @shin1x1
  23. 23. 電話してみよう 050-xxxx-xxxx 「こんにちは!」が聞こえればok (c) 2013 Masashi Shinbara @shin1x1
  24. 24. 電話を受ける (簡易IVR) (c) 2013 Masashi Shinbara @shin1x1
  25. 25. IVR • プッシュフォンで操作 • インタラクティブな操作を実現 • 電話の転送などもできる (c) 2013 Masashi Shinbara @shin1x1
  26. 26. IVR • 宅配便の再配達依頼 • コールセンター案内 • チケット購入 • などなど (c) 2013 Masashi Shinbara @shin1x1
  27. 27. 簡易IVR • アナウンスが流れる • 1 なら「1を押しました」 (c) 2013 Masashi Shinbara @shin1x1
  28. 28. 簡易IVR 050-xxxx-xxxx Twilio Webサーバ (c) 2013 Masashi Shinbara @shin1x1
  29. 29. 簡易IVR HTTPリクエスト (c) 2013 Masashi Shinbara @shin1x1
  30. 30. 簡易IVR TwiMLを返す <Gather> (c) 2013 Masashi Shinbara @shin1x1
  31. 31. 簡易IVR 応答待ち (c) 2013 Masashi Shinbara @shin1x1
  32. 32. 簡易IVR 1 をプッシュ Twilio Webサーバ (c) 2013 Masashi Shinbara @shin1x1
  33. 33. 簡易IVR HTTPリクエスト 「1が押された」 Digits = 1 (c) 2013 Masashi Shinbara @shin1x1
  34. 34. 簡易IVR TwiMLを返す <Say> (c) 2013 Masashi Shinbara @shin1x1
  35. 35. 簡易IVR 「1を押しました」 (c) 2013 Masashi Shinbara @shin1x1
  36. 36. 簡易IVR <?php require_once __DIR__.'/vendor/autoload.php'; $xml = new Services_Twilio_Twiml(); if (empty($_POST['Digits'])) { $digit = null; } else { $digit = (integer)$_POST['Digits']; } if ($digit == 1) { $xml->say('1を押しました。', array('language' => 'ja-jp')); } else { $xml->say('こんにちは!1 を押して下さい。', array('language' => 'ja-jp')); } $xml->gather(array('numDigits' => 1, 'timeout' => 30)); header('Content-type: text/xml; charset=utf-8'); echo $xml; (c) 2013 Masashi Shinbara @shin1x1
  37. 37. 簡易IVR • アナウンスが流れる • 1 / 2 / 3 / 9 を受け付ける • 1-3 なら「Nを押しました」 • 9 で終了 (c) 2013 Masashi Shinbara @shin1x1
  38. 38. 電話をかける (c) 2013 Masashi Shinbara @shin1x1
  39. 39. 電話をかける HTTPリクエスト REST API Webサーバ Twilio 電話 (c) 2013 Masashi Shinbara @shin1x1
  40. 40. 電話をかける 通話に利用する TwiML取得 Webサーバ Twilio 電話 (c) 2013 Masashi Shinbara @shin1x1
  41. 41. 電話をかける 050-xxxx-xxxx から電話! Webサーバ Twilio 電話 (c) 2013 Masashi Shinbara @shin1x1
  42. 42. SID / Token ACCOUNT SID AUTH TOKEN https://jp.twilio.com/user/account (c) 2013 Masashi Shinbara @shin1x1
  43. 43. 電話をかける <?php require_once __DIR__.'/vendor/autoload.php'; $sid = 'xxx'; $token = 'xxx'; $client = new Services_Twilio($sid, $token); $ret = $client->account->calls->create( '+81-xx-xxxx-xxxx', // From number(Twilio) '+81-xx-xxxx-xxxx', // To number(Your phone number) 'http://demo.twilio.com/docs/voice.xml' ); var_dump($ret->sid); http://xxx/yourdir/outbound.php (c) 2013 Masashi Shinbara @shin1x1
  44. 44. セキュリティ (c) 2013 Masashi Shinbara @shin1x1
  45. 45. Twilio からのリクエスト検証 • SSL(自己証明書はNG) • Basic / Digest認証 • リクエストのバリデーション (HMAC-SHA1形式署名検証) (ライブラリで対応可) (c) 2013 Masashi Shinbara @shin1x1
  46. 46. セキュリティページ https://jp.twilio.com/docs/security (c) 2013 Masashi Shinbara @shin1x1
  47. 47. まとめ (c) 2013 Masashi Shinbara @shin1x1
  48. 48. まとめ • Twilioとの連携は HTTP の世界 • TwiML か REST API か • SMS には海外番号が必要 • 既存システムとの連携から (c) 2013 Masashi Shinbara @shin1x1
  49. 49. 参照 https://jp.twilio.com/docs (c) 2013 Masashi Shinbara @shin1x1
  50. 50. 参照 http://blog.twilio.kddi-web.com/%E3%82%BC%E3%83%AD%E3%81%8B %E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%81%9Ctwilio/ (c) 2013 Masashi Shinbara @shin1x1
  51. 51. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1

×