SlideShare a Scribd company logo
Twilio API を
PHP で触ってみよう
2013/10/17 shin1x1
Twilio API 勉強会
Agenda
• Twilioライブラリ
• インストール
• 電話を受ける
• 電話を受ける(簡易 IVR)
• 電話をかける
• セキュリティ
(c) 2013 Masashi Shinbara @shin1x1
Twilioライブラリ

(c) 2013 Masashi Shinbara @shin1x1
Twilioライブラリ
• Twilio API と連携するライブラリ
• 主な機能
(REST API, TwiML, バリデーション)

• 各言語版
(PHP, Ruby, Python, .NET, Java,
Node.js, Salesforce, C++ 等々)
(c) 2013 Masashi Shinbara @shin1x1
Twilio PHP ライブラリ
• twilio-php
• PHP 5.2 以上
• PEAR, ZIP, Composer
• Composer でインストール
(c) 2013 Masashi Shinbara @shin1x1
インストール

(c) 2013 Masashi Shinbara @shin1x1
コード

https://gist.github.com/shin1x1/7006593

#twilioapistudy

(c) 2013 Masashi Shinbara @shin1x1
Composer インストール

$ cd yourdir
$ curl -s http://getcomposer.org/
installer | php
$ ls
composer.phar

(c) 2013 Masashi Shinbara @shin1x1
twilio-php インストール

$ php composer.phar require twilio/sdk devmaster
$ ls
composer.json composer.lock composer.phar vendor

(c) 2013 Masashi Shinbara @shin1x1
インストール確認
• サンプルスクリプト [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
電話を受ける

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける
050-xxxx-xxxx

Twilio

Webサーバ

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける
HTTPリクエスト

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける
処理を実行
TwiML生成

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける

TwiMLを返す

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける

音声を返す
電話を転送
応答を待つ等々

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける
HTTPリクエスト

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける

TwiMLを返す

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける
• HTTPリクエストが来たら
• 何か処理をして
• TwiMLを返す
普通のWebシステムと一緒!

(c) 2013 Masashi Shinbara @shin1x1
作ってみよう!
• 電話をかけると
• 「こんにちは!」と言ってくれる
• TwiML 生成にライブラリを使う

(c) 2013 Masashi Shinbara @shin1x1
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
管理画面

URL を変更する
http://hoge/yourdir/inbound.php
保存を忘れずに

(c) 2013 Masashi Shinbara @shin1x1
電話してみよう

050-xxxx-xxxx
「こんにちは!」が聞こえればok

(c) 2013 Masashi Shinbara @shin1x1
電話を受ける
(簡易IVR)
(c) 2013 Masashi Shinbara @shin1x1
IVR

• プッシュフォンで操作
• インタラクティブな操作を実現
• 電話の転送などもできる

(c) 2013 Masashi Shinbara @shin1x1
IVR
• 宅配便の再配達依頼
• コールセンター案内
• チケット購入
• などなど
(c) 2013 Masashi Shinbara @shin1x1
簡易IVR

• アナウンスが流れる
• 1 なら「1を押しました」

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR
050-xxxx-xxxx

Twilio

Webサーバ

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR
HTTPリクエスト

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR

TwiMLを返す
<Gather>

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR

応答待ち

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR
1 をプッシュ

Twilio

Webサーバ

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR
HTTPリクエスト
「1が押された」
Digits = 1

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR

TwiMLを返す
<Say>

(c) 2013 Masashi Shinbara @shin1x1
簡易IVR

「1を押しました」

(c) 2013 Masashi Shinbara @shin1x1
簡易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
簡易IVR
• アナウンスが流れる
• 1 / 2 / 3 / 9 を受け付ける
• 1-3 なら「Nを押しました」
• 9 で終了
(c) 2013 Masashi Shinbara @shin1x1
電話をかける

(c) 2013 Masashi Shinbara @shin1x1
電話をかける
HTTPリクエスト
REST API

Webサーバ

Twilio

電話

(c) 2013 Masashi Shinbara @shin1x1
電話をかける
通話に利用する
TwiML取得

Webサーバ

Twilio

電話

(c) 2013 Masashi Shinbara @shin1x1
電話をかける
050-xxxx-xxxx
から電話!

Webサーバ

Twilio

電話

(c) 2013 Masashi Shinbara @shin1x1
SID / Token

ACCOUNT SID

AUTH TOKEN

https://jp.twilio.com/user/account
(c) 2013 Masashi Shinbara @shin1x1
電話をかける
<?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
セキュリティ

(c) 2013 Masashi Shinbara @shin1x1
Twilio からのリクエスト検証
• SSL(自己証明書はNG)
• Basic / Digest認証
• リクエストのバリデーション
(HMAC-SHA1形式署名検証)
(ライブラリで対応可)
(c) 2013 Masashi Shinbara @shin1x1
セキュリティページ

https://jp.twilio.com/docs/security

(c) 2013 Masashi Shinbara @shin1x1
まとめ

(c) 2013 Masashi Shinbara @shin1x1
まとめ
• Twilioとの連携は HTTP の世界
• TwiML か REST API か
• SMS には海外番号が必要
• 既存システムとの連携から
(c) 2013 Masashi Shinbara @shin1x1
参照

https://jp.twilio.com/docs
(c) 2013 Masashi Shinbara @shin1x1
参照

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
@shin1x1

(c) 2013 Masashi Shinbara @shin1x1

More Related Content

PDF
Vagrant で PHP 開発環境を作る ハンズオン
PDF
Vagrant で作る PHP 開発環境 [実践編]
PDF
Heroku で作る
スケーラブルな 
PHP アプリケーション
PDF
Ansible ではじめるサーバ作業の自動化
PDF
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
PDF
開発現場で活用するVagrant
PDF
わかってるフレームワーク Laravel
PDF
Azure Websites で作るスケーラブルな PHP アプリケーション
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で作る PHP 開発環境 [実践編]
Heroku で作る
スケーラブルな 
PHP アプリケーション
Ansible ではじめるサーバ作業の自動化
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
開発現場で活用するVagrant
わかってるフレームワーク Laravel
Azure Websites で作るスケーラブルな PHP アプリケーション

What's hot (20)

PDF
Vagrant体験入門
PDF
いまどきのPHP
PDF
Vagrant を Web開発環境に使う
PDF
ビルドサーバで使うDocker
PDF
Laravel ユーザなら知っておくべきAuthオートログイン
PDF
PHPコードではなく PHPコードの「書き方」を知る
PDF
BOSHでお手軽CFデプロイon AWS
PDF
AWS SDK for Smalltalk
PDF
Elixir Meetup #1 Loggerの構造と拡張
PDF
フィードフォースと AWS と私
PDF
Terraforming
PDF
Lambdaによるクラウド型言語の実装
PPTX
SpringOne 2015 報告会 - Lattice + Spring Cloud Netflix
PDF
DevStackで始めるCloud FoundryとBOSH
PPTX
Step by stepで学ぶTerraformによる監視付きAWS構築
PDF
Fission で 始める Containerless Kubernetes #serverlesstokyo
PDF
さくらのインフラコード
PDF
Ansible 2.0を使って組む kubernetesクラスタ vol.1
PDF
Rubyを使った分散全文検索ミドルウェア
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Vagrant体験入門
いまどきのPHP
Vagrant を Web開発環境に使う
ビルドサーバで使うDocker
Laravel ユーザなら知っておくべきAuthオートログイン
PHPコードではなく PHPコードの「書き方」を知る
BOSHでお手軽CFデプロイon AWS
AWS SDK for Smalltalk
Elixir Meetup #1 Loggerの構造と拡張
フィードフォースと AWS と私
Terraforming
Lambdaによるクラウド型言語の実装
SpringOne 2015 報告会 - Lattice + Spring Cloud Netflix
DevStackで始めるCloud FoundryとBOSH
Step by stepで学ぶTerraformによる監視付きAWS構築
Fission で 始める Containerless Kubernetes #serverlesstokyo
さくらのインフラコード
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Rubyを使った分散全文検索ミドルウェア
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Ad

Viewers also liked (17)

PDF
【B-1】kintoneでお手軽コールセンター!
PDF
Twilioを使ったAndroidのSMS認証の実装
PPTX
今日からでもできる!とある企業のtwilio活用方法
PPTX
Twilioでコールセンター
PDF
「自動電話リレーサービス」を作ってみてわかった、Twilioを使ったビジネスの可能性
PDF
AWSアイデアソン20150509
PDF
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
PDF
コミュニティで歴史をつくろう!
PPTX
TwilioAPIやってみた(エンジニアちゃうけど)俺聞け7
PDF
Twilioが動いているところを見てみよう(仮)
PDF
Twilioビジネスセミナー資料
PDF
Twilio jpug大阪(掲載用)20160227
PDF
Twilio Japan Summit 2014 presentation
PDF
TwilioコールセンターアプリRuna-CCA紹介
PPTX
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
PDF
電話とは何か、そして Twilio の正体
PDF
Building Blocks for Next Generation Contact Centers
【B-1】kintoneでお手軽コールセンター!
Twilioを使ったAndroidのSMS認証の実装
今日からでもできる!とある企業のtwilio活用方法
Twilioでコールセンター
「自動電話リレーサービス」を作ってみてわかった、Twilioを使ったビジネスの可能性
AWSアイデアソン20150509
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
コミュニティで歴史をつくろう!
TwilioAPIやってみた(エンジニアちゃうけど)俺聞け7
Twilioが動いているところを見てみよう(仮)
Twilioビジネスセミナー資料
Twilio jpug大阪(掲載用)20160227
Twilio Japan Summit 2014 presentation
TwilioコールセンターアプリRuna-CCA紹介
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!
電話とは何か、そして Twilio の正体
Building Blocks for Next Generation Contact Centers
Ad

Similar to Twilio API を PHP で触ってみよう (16)

PDF
Twilio TBS - 20140301
PDF
fukuokaphp7 PHP x twilio
PDF
phpcon2013 PHP x twilio
PDF
Twilio入門 -Web アプリ編-
PDF
日本語消えたスライド
PDF
Twilio API 勉強会 Vol.12 - アイデアを元にTwilioの機能を試してみる会
PDF
20130927 MA9 東京ハッカソン発表資料
PDF
Twilio api-jaws
PDF
第0回 Twilio勉強会 with JAWS UG in 福岡
PPTX
Bluemixユーザー会発表資料 - デモ付き
PDF
【Twilio client】twiliox azureハンズオン
PDF
Twilio serveless architecture
PPT
Twilio rubyhiroba
PDF
IPメッセージングはこうやって実装するのだ!
PDF
Twilioハンズオン資料 鹿児島
PPT
1221bot講習会
Twilio TBS - 20140301
fukuokaphp7 PHP x twilio
phpcon2013 PHP x twilio
Twilio入門 -Web アプリ編-
日本語消えたスライド
Twilio API 勉強会 Vol.12 - アイデアを元にTwilioの機能を試してみる会
20130927 MA9 東京ハッカソン発表資料
Twilio api-jaws
第0回 Twilio勉強会 with JAWS UG in 福岡
Bluemixユーザー会発表資料 - デモ付き
【Twilio client】twiliox azureハンズオン
Twilio serveless architecture
Twilio rubyhiroba
IPメッセージングはこうやって実装するのだ!
Twilioハンズオン資料 鹿児島
1221bot講習会

More from Masashi Shinbara (12)

PDF
いまどきのPHP開発現場 -2015年秋-
PDF
先取り!PHP 7 と WordPress
PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
PDF
How to learn Laravel5 application from Authentication
PDF
認証機能で学ぶ Laravel 5 アプリケーション
PDF
VagrantユーザのためのDocker入門
PDF
キャラ立ちしたエンジニアになる!
PDF
Composer 再入門
PDF
PHP 5.5 Zend OPcache
PDF
サーバの防災訓練
PDF
Kansai PHP Users Group 2012年活動報告
KEY
10分で分かる最近のCakePHP
いまどきのPHP開発現場 -2015年秋-
先取り!PHP 7 と WordPress
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
How to learn Laravel5 application from Authentication
認証機能で学ぶ Laravel 5 アプリケーション
VagrantユーザのためのDocker入門
キャラ立ちしたエンジニアになる!
Composer 再入門
PHP 5.5 Zend OPcache
サーバの防災訓練
Kansai PHP Users Group 2012年活動報告
10分で分かる最近のCakePHP

Twilio API を PHP で触ってみよう