ローカル環境+PHPで、Twilioから携帯電話などにメッセージを送ってみます。
ここでは、S3を利用して、日本語メッセージを送ってみます。
前提条件
Twilioのアカウント
- Twilioのアカウントを保有していること。
- Twilioの電話番号
- Twilioの認証情報 (ACCOUNT SID / AUTH TOKEN)
Twilio+PHP環境
- PHP (5.4以上を想定)
- Twilio PHP SDK
(参考) Twilioで電話にメッセージを送る (クライアント環境: Twilio PHP SDK): http://qiita.com/tcsh/items/d0449909f20916fff159
S3への権限
S3バケットに対してオブジェクトのread/write権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.8.11
- AWS CLI 1.7.40
aws --version
aws-cli/1.8.11 Python/2.7.5 Darwin/13.4.0
0. 事前準備
0.1. リージョンの決定
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. 変数の確認
aws configure list
Name Value Type Location
---- ----- ---- --------
profile s3Full-prjZ-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************LOAQ shared-credentials-file
secret_key ****************I1O1 shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
profileが '' と表示される場合は、以下を実行してください。
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
0.3. ファイル公開用S3バケットの指定
ORG=<組織名>
S3_BUCKET_NAME="${ORG}-handson-`date +%Y%m%d`"
echo ${S3_BUCKET_NAME}
まだファイル公開用S3バケットを作成していない場合は以下の手順を実施します。
- ハイレベルS3コマンドで静的Webホスティング: http://qiita.com/tcsh/items/70694da357c1738c6bf8
また、コンテンツを閲覧できるように、バケットポリシーも設定します。
- コンテンツ用バケットの設定 (バケットポリシ): http://qiita.com/tcsh/items/bcf93244b675faecd6c4#6-コンテンツ用バケットの設定-バケットポリシ
ファイル公開用S3バケットのWebホスティングendpointを取得します。
S3_BUCKET_ENDPOINT="${S3_BUCKET_NAME}.s3-website-`aws s3api get-bucket-location --bucket ${S3_BUCKET_NAME} --output text`.amazonaws.com" \
&& echo ${S3_BUCKET_ENDPOINT}
example-handson-20151008.s3-website-ap-northeast-1.amazonaws.com
HOST_DEF="${S3_BUCKET_ENDPOINT}" \
&& echo ${HOST_DEF}
0.4. Twilioアカウント情報の設定
Twilioの「はじめよう」画面から以下の情報を取得して変数に格納します。
-
ACCOUNT SID
-
AUTH TOKEN
-
電話番号
TWILIO_ACCOUNT_SID='ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
TWILIO_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
TEL_TWILIO_ORIGIN=<Twilioで取得した電話番号>
0.5. コール先電話番号の指定
Twilioからの通知を受信したい電話(携帯など)の番号を指定します。
TEL_DEST_ORIGIN=<宛先の電話番号>
間違い電話をしないように慎重に指定してください。
1. メッセージ送信アプリケーションの作成
1.1. アプリケーションディレクトリの作成
DIR_TWILIO_APP="${HOME}/app/twilio-s3-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. 送信メッセージの作成
DIR_TWILIO_XML="${DIR_TWILIO_APP}/config" \
&& echo ${DIR_TWILIO_XML}
mkdir -p ${DIR_TWILIO_XML} \
&& cd ${DIR_TWILIO_XML}
FILE_TWILIO_XML='say.xml'
MSG_TWILIO='テキストを音声に変換します。'
cat << EOF > ${FILE_TWILIO_XML}
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-jp">${MSG_TWILIO}</Say>
</Response>
EOF
cat ${FILE_TWILIO_XML}
XMLを作成したときは、なるべくxmllintでチェックしましょう。
xmllint ${FILE_TWILIO_XML} --noout
何も表示されなければOKです。
1.5. メッセージファイルのS3への転送
aws s3 sync . s3://${S3_BUCKET_NAME}/xml/ \
&& aws s3 ls ${S3_BUCKET_NAME}/xml/
upload: ./say.xml to s3://example-handson-20151008/xml/say.xml
2015-10-08 21:34:26 136 say.xml
echo "http://${S3_BUCKET_ENDPOINT}/xml/${FILE_TWILIO_XML}"
1.6. 送信スクリプトの作成
cd ${DIR_TWILIO_APP}
FILE_PHP='say.php'
URL_DEF="http://${HOST_DEF}/xml/say.xml"
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}