はじめに
初めまして、k.s.ロジャースの西谷です。
今回はPHPからSMSメッセージを送信する要件があったため、調査を行いました。
当初はプログラムから携帯電話にメッセージを送信する方法は検討もつかない状態でした。
Twilioを使えばいいと聞いて調べた結果、APIですべて出来るようになっており、びっくりしています。
間違い・助言等があればコメントにてお知らせいただけたらと思います。
Twilioの導入
SMSの送信や電話を代わりに掛けてくれるサービスです。
こちらから登録できます。
登録後500円の無料枠を頂けるのでお気軽に試すことが出来ます。
購入後に表示される、SIDとAUTHTOKENはAPI側で利用します。
PHP側のSDK導入は簡単で以下コマンドを実行するだけです。
composer require twilio/sdk
SMSを送信する
SMSの送信はリファレンス通りで簡単にできます。
送信先の電話番号はE.164形式で指定します。
日本の場合、080-xxxx-xxxx
は+8180xxxxxxxx
となります。
use Twilio\Rest\Client;
$account_sid = '{SID}';
$auth_token = '{AUTHTOKEN}';
$twilio_number = '{購入した電話番号}';
$client = new Client($account_sid, $auth_token);
$client->messages->create(
'{送信先の番号}',
[
'from' => $twilio_number,
'body' => '送信テスト'
]
);
account_sid
, auth_token
, twilio_number
はダッシュボードから確認することが出来ます。
SMSに対して返信する
取得した電話番号にSMSが送信された場合は返信することができます。
こちらはTwilio側からWebhookで返答内容を取得するため、ローカル開発の場合はngrockなどで開発環境を公開する必要があります。
全体の手順としては次のようになっています。
- 受信内容に対して返信するAPIを作成する
- 返信APIを公開する
- Twilioで返信APIのURLを登録する
- 電話番号に対してSMSを送信しると、返信APIの内容がSMSで返信される
返信APIの実装
$_REQUEST['Body']
で送信内容を取得できます。
これがあれば、API側で作り込めば大抵なことは出来そうな気がします。
use Twilio\TwiML\MessagingResponse;
$body = $_REQUEST['Body'];
header("content-type: text/xml");
$response = new MessagingResponse();
$response->message(
"「{$body}」に対する返信です。"
);
echo $response;
TwilioにWebhook登録
Twilioの設定画面の電話番号からWebhookを設定出来ます。
こちらに先程実装したAPIのURLを登録します。
登録後に、購入した電話番号にSMSを送信するとAPI通りの返信を受け取れます!
電話関連の機能
電話を掛けられる場合は自動音声で応答することが出来ます。
また、APIから電話をかけることも出来ます。
電話に応答する
こちらはSMSの返信と同じです。
まずは応答のAPIを実装します。
header("content-type: text/xml");
$response = new VoiceResponse();
$response->say(
"test message",
["voice" => "alice"]
);
echo $response;
後は購入した電話番号に電話を掛けると自動音声で応答してくれると思います!
電話をかける
APIを実行すると指定番号に電話が掛かります。
こちらもE.164で電話番号を指定します。
電話内容はurl
で指定することが出来ます。(サンプルでは上記の応答メッセージを指定しています)
また、method
を指定しない場合はPOSTでデータ取得を行う点にご注意ください。
use Twilio\Rest\Client;
$account_sid = '{SID}';
$auth_token = '{AUTHTOKEN}';
$twilio_number = '{購入した電話番号}';
$client = new Client($this->account_sid, $this->auth_token);
$client->account->calls->create(
"{電話番号}",
$this->twilio_number,
[
"url" => "http://f1683917.ngrok.io/api/test/voice.xml",
"method" => "GET"
]
);
おわりに
今回はTwilioでSMSと電話機能について調査しました。
応用すれば、緊急時に自動で電話を掛けたりと面白いことができそうです。(コストはかかりますが。。。)
他にも録音やルール設定など多くの機能がありますので、機会があればこれらも触ってみようと思います。
Wantedlyでもブログ投稿してます
Techブログに加えて会社ブログなどもやっているので、気になった方はぜひ覗いてみてください。
https://www.wantedly.com/companies/ks-rogers