はじめに
TwilioでSMSを受信し、送信元の電話番号を取得して、SMSを返信する方法について、
調べたので、簡単にですが、書きます。
- Twilioのアカウントの取得
- Twilio電話番号の購入(月額150円くらい)
- Twilioの電話番号にWebhook URLをセットする。SMSを受信した時の返信のため
- CakePHP3でのサンプル
Twilioのアカウントの取得は、割愛します。
必要なもの
- Twilioのアカウント
https://twilio.kddi-web.com/ から取得してください。 - WebhookのURL
- Webhookを受けて、SMSを返すサーバー側プログラム
Twilio電話番号の購入(月額150円くらい)
国際SMSの仕組みを用いてSMSを送受信するので、アメリカの電話番号を購入する必要があります。
- ダッシュボードで電話のアイコンをクリックしてください。下記の画面となります。
- 右側の赤いボタン「Manage Numbers」を押してください。下記の画面となります。
- 「+」ボタンを押してください。下記の画面となります。
上記の画面でUSの電話番号を購入してください。この電話番号を使用してSMSの送受信を行います。
Twilioの電話番号にWebhook URLをセットする。SMSを受信した時の返信のため
SMSを受信した時に、送信元の電話番号を取得する必要があります。Webhook URLを用意し、リクエストを受けた時に、サーバー側プログラムで、POSTパラメータから必要なデータを取得します。
Twilio画面からセット
CakePHP3でのサンプル
Twilio PHP SDK
Twilio PHP SDKを使用します。ここからダウンロードして
https://jp.twilio.com/docs/libraries/php
CakePHP3で使用出来るようにしておいてください。
SMSを受信するテストメソッド
- メソッド、acceptSMSをWebhook URLからリクエスト出来るようにしてください。
- 受けたメッセージをそのまま送信元に返す仕様です。
- サンプルなので簡素に書いています。
// TwilioのClientをインポートしておきます。
use Twilio\Rest\Client;
/**
* SMSを受信するテストメソッド
*/
public function acceptSMS() {
// SMSを受信した時の、POSTパラメータを取得します。
$request = $this->request->getData();
// レイアウトは使用しない
$this->viewBuilder()->enableAutoLayout(false);
// ctpは使用しない
$this->autoRender = false;
// Twilioの電話番号
$twilio_number = "先程取得した番号(E.164 形式 例:+1xxxxxx)";
// 発信元の電話番号
$send_number = $request['From'];
// 発信元のメッセージ
$body = $request['Body'];
// アカウントSIDとAUTHTOKENは、Twilioダッシュボードから取得しセットします。
$client = new Client('アカウントSID', 'AUTHTOKEN');
// SMSを送る
$client->messages->create(
$send_number,
array(
'from' => $twilio_number,
'body' => $body
)
);
}
- 取得した電話番号にSMSを送信すると、Webhookに用いたCakePHP3では、以下のようなPOSTパラメータが取得できます。
(
[ToCountry] => US
[ToState] => CA
[SmsMessageSid] => SMxxxxxxxx
[NumMedia] => 0
[ToCity] =>
[FromZip] =>
[SmsSid] => SMxxxxxxxx
[FromState] =>
[SmsStatus] => received
[FromCity] =>
[Body] => てすと
[FromCountry] => JP
[To] => +1xxxxxxx
[ToZip] =>
[NumSegments] => 1
[MessageSid] => SMxxxxxxxx
[AccountSid] => ACxxxxxxx
[From] => +81xxxxxxxx
[ApiVersion] => YYYY-MM-DD
)