Help us understand the problem. What is going on with this article?

Twilioを使ったSMSの受信と送信元への返信

More than 1 year has passed since last update.

はじめに

TwilioでSMSを受信し、送信元の電話番号を取得して、SMSを返信する方法について、
調べたので、簡単にですが、書きます。

  1. Twilioのアカウントの取得
  2. Twilio電話番号の購入(月額150円くらい)
  3. Twilioの電話番号にWebhook URLをセットする。SMSを受信した時の返信のため
  4. CakePHP3でのサンプル

Twilioのアカウントの取得は、割愛します。

必要なもの

  1. Twilioのアカウント https://twilio.kddi-web.com/ から取得してください。
  2. WebhookのURL
  3. Webhookを受けて、SMSを返すサーバー側プログラム

Twilio電話番号の購入(月額150円くらい)

国際SMSの仕組みを用いてSMSを送受信するので、アメリカの電話番号を購入する必要があります。

  • ダッシュボードで電話のアイコンをクリックしてください。下記の画面となります。 1.telno.png
  • 右側の赤いボタン「Manage Numbers」を押してください。下記の画面となります。 1.2telno_get.png
  • 「+」ボタンを押してください。下記の画面となります。 2.telno_get.png 上記の画面でUSの電話番号を購入してください。この電話番号を使用してSMSの送受信を行います。

Twilioの電話番号にWebhook URLをセットする。SMSを受信した時の返信のため

SMSを受信した時に、送信元の電話番号を取得する必要があります。Webhook URLを用意し、リクエストを受けた時に、サーバー側プログラムで、POSTパラメータから必要なデータを取得します。

Twilio画面からセット

  • 電話番号は、下記画面のように一覧表示されますので、先程取得した電話番号をクリックしてください。
    list.png

  • Webhook URLをメッセージ受信時のURLにセットします。保存を忘れずに。
    webhook.png

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
)

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away