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

[Twilio] Twilioで電話にメッセージを送る (クライアント環境: Twilio PHP SDK)

More than 5 years have passed since last update.

ローカル環境+PHPで、Twilioから携帯電話などにメッセージを送ってみます。
ここでは、Twimletを利用して、短文(英語)メッセージを送ります。

参考: https://twilio-php.readthedocs.org/en/latest/

前提条件

[推奨] UNIX環境

PHP環境

phpがインストールされていること (5.4以上推奨)

コマンド
which php
結果(例/AmazonLinux)
/usr/bin/php
コマンド(バージョン確認)
 php -v
結果(例/AmazonLinux)
PHP 5.4.45 (cli) (built: Sep 11 2015 21:23:18) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
インストール(yumパッケージの場合)
sudo yum install php54 -y

curlコマンド

curlがインストールされていること

コマンド
which curl
結果(例/AmazonLinux)
/usr/bin/curl

0. 事前作業

0.1. Twilioアカウント情報の設定

Twilioの「はじめよう」画面から以下の情報を取得して変数に格納します。

  • ACCOUNT SID

  • AUTH TOKEN

  • 電話番号

変数の設定
TWILIO_ACCOUNT_SID="ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TWILIO_AUTH_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TEL_TWILIO_ORIGIN=<Twilioで取得した電話番号 ハイフンなし 例:050xxxxxxxx>

0.2. コール先電話番号の指定

Twilioからの通知を受信したい電話(携帯など)の番号を指定します。

変数の設定
TEL_DEST_ORIGIN=<電話番号 ハイフンなし  例:090xxxxxxxx>

間違い電話をしないように慎重に指定してください。

1. メッセージ送信アプリケーションの作成

1.1. アプリケーションディレクトリの作成

変数の設定
DIR_TWILIO_APP="${HOME}/app/twilio-app" \
        && echo ${DIR_TWILIO_APP}
コマンド
mkdir -p ${DIR_TWILIO_APP}

1.2. composerのインストール

コマンド
cd ${DIR_TWILIO_APP} \
        && mkdir bin \
        && curl -sS https://getcomposer.org/installer | \
          php -- --install-dir=bin --filename=composer
結果(例)
      #!/usr/bin/env php
      All settings correct for using Composer
      Downloading...

      Composer successfully installed to: /Users/taro/app/twilio-php/composer.phar
      Use it: php bin/composer

1.3. Twilio PHP SDKの導入

参考: https://jp.twilio.com/docs/php/install

コマンド
cd ${DIR_TWILIO_APP} \
        && ./bin/composer require twilio/sdk
結果(例)
      Using version ^4.2 for twilio/sdk
      ./composer.json has been created
      Loading composer repositories with package information
      Updating dependencies (including require-dev)
        - Installing twilio/sdk (4.2.1)
          Downloading: 100%

      Writing lock file
      Generating autoload files
コマンド
ls ${DIR_TWILIO_APP}/vendor/twilio/sdk/Services/Twilio.php > /dev/null 2>&1 \
        && echo $?
結果(例
0

Twilio PHPライブラリファイルの位置を変数に取り込みます。

変数の設定
FILE_LIB_TWILIO="${DIR_TWILIO_APP}/vendor/twilio/sdk/Services/Twilio.php"

1.4. 送信メッセージの作成

変数の指定
MSG_TWILIO='Hello! Joe.'
コマンド
cat << EOF
<?xml version="1.0" encoding="UTF-8"?>
<Response>
   <Say>${MSG_TWILIO}</Say>
</Response>
EOF

表示されたXMLを https://www.twilio.com/labs/twimlets/echo の'Twimlet Configuration'フォームに貼付して、Resulting URLに表示されたURLを変数に取り込みます。

変数の設定(例)
URL_DEF='http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%3CSay%3EHello!%20Joe.%3C%2FSay%3E%0A%3C%2FResponse%3E&'

1.5. 送信スクリプトの作成

コマンド
cd ${DIR_TWILIO_APP}
変数の設定
FILE_PHP='say.php'
変数の設定
TEL_DEST=$( \
  echo ${TEL_DEST_ORIGIN} |\
  sed 's/^0/81/') \
  && echo ${TEL_DEST}
変数の設定
TEL_TWILIO=$( \
  echo ${TEL_TWILIO_ORIGIN} |\
  sed 's/^0/81/') \
  && echo ${TEL_TWILIO}
変数の確認
cat << ETX

        FILE_PHP:           ${FILE_PHP}
        FILE_LIB_TWILIO:    ${FILE_LIB_TWILIO}
        TWILIO_ACCOUNT_SID: ${TWILIO_ACCOUNT_SID}
        TWILIO_AUTH_TOKEN:  ${TWILIO_AUTH_TOKEN}
        TEL_TWILIO:         ${TEL_TWILIO}
        TEL_DEST:           ${TEL_DEST}
        URL_DEF:            ${URL_DEF}

ETX
コマンド
cat << EOF > ${FILE_PHP}
<?php

require( '${FILE_LIB_TWILIO}' );

\$account_sid = '${TWILIO_ACCOUNT_SID}';
\$auth_token  = '${TWILIO_AUTH_TOKEN}';

\$client = new Services_Twilio( 
    \$account_sid, 
    \$auth_token
);

\$call = \$client->account->calls->create(
    '+${TEL_TWILIO}',
    '+${TEL_DEST}',
    '${URL_DEF}',
    array("Method" => "GET")
);
echo \$call->sid;
EOF

cat ${FILE_PHP}

2. 電話メッセージの発信

${TEL_DEST}宛にメッセージを電話します。

コマンド
php ${FILE_PHP}

完了

日本語での送信は今のところうまくいっていません。

原因としては、以下が考えられそうです。

  • Twimletが日本語のメッセージをURLエンコードしてくれない。(nkfでデコードすれば良いかも。)
  • - GETのURLが長くなりすぎる
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