PHPでも勉強するか!その11 Twilioで電話をかけよう 2


Twilio。
国内だとKDDIが代理店になっているWEBサービス。
本国はロサンゼルスのベンチャー企業のようです。

クラウド型電話API。
簡単に言うとプログラムから電話をかけることが可能になります。
どんな会社がサービスを展開しているか、まとめサイトがありました。

クラウド電話APIサービス
http://summary.fc2.com/summary.php?summary_cd=76209

その中でもおそらく最大手がTwilio。
Free Trialですぐに無料で電話をかけることができます。

プログラムから電話をかけるところまでを説明したいとおもいます。

注意:
いたずら厳禁です!

——————————–

■■1 Twilioのユーザ登録

https://jp.twilio.com
適当に登録して、ログインするとウィザードみたいなのが表示され
電話番号を1つ取得できます。
このTwilioの管理画面、クソわかりづらいですが我慢して使いましょう。

スクリーンショット 2016-06-05 16.29.01
電話番号、というメニューから取得した電話番号を確認できます。

■■2 APIキーの確認

スクリーンショット 2016-06-05 16.15.25
Twitterみたくアプリを作らなくてもいいみたいです。
ログインすると、ACCOUNT SID、AUTH TOKENがトップに表示されています。
この2つをPHPプログラムに記載します。
AUTH TOKENは伏せ字になっているので、鍵アイコンをクリックしてで表示させます。

■■3 PHPライブラリのダウンロードと設置

今回はPHPを使うので公式サイトからPHPのライブラリを落としてきます。

https://jp.twilio.com/docs/libraries/php

Composerとかよくわからないので、ZIPでソースでDLしました。
配置場所は/user/lib/zabbix/alertscriptsの中です。
マニュアルだとフォルダ名がtwilio-phpになってるけど、実際はtwilio-php-masterになってて
twilio-php-masterをそのまま使うことにしました。

[root@wiki-web-2 alertscripts]# ls -Rl


-rwxrwxrwx 1 zabbix zabbix  567  6ŒŽ  3 08:23 2016 alert-twilio_prisan.php
drwxrwxrwx 5 zabbix zabbix 4096  2ŒŽ 27 02:29 2016 twilio-php-master

./twilio-php-master:

-rwxrwxrwx 1 zabbix zabbix   641  2ŒŽ 27 02:29 2016 AUTHORS.md
-rwxrwxrwx 1 zabbix zabbix 10662  2ŒŽ 27 02:29 2016 CHANGES.md
-rwxrwxrwx 1 zabbix zabbix  1154  2ŒŽ 27 02:29 2016 LICENSE
-rwxrwxrwx 1 zabbix zabbix  1855  2ŒŽ 27 02:29 2016 Makefile
-rwxrwxrwx 1 zabbix zabbix  3775  2ŒŽ 27 02:29 2016 README.md
drwxrwxrwx 3 zabbix zabbix  4096  2ŒŽ 27 02:29 2016 Services
-rwxrwxrwx 1 zabbix zabbix   659  2ŒŽ 27 02:29 2016 composer.json
-rwxrwxrwx 1 zabbix zabbix 36130  2ŒŽ 27 02:29 2016 composer.lock
drwxrwxrwx 5 zabbix zabbix  4096  2ŒŽ 27 02:29 2016 docs
-rwxrwxrwx 1 zabbix zabbix   515  2ŒŽ 27 02:29 2016 issue_template.md
-rwxrwxrwx 1 zabbix zabbix  3275  2ŒŽ 27 02:29 2016 package.php
drwxrwxrwx 3 zabbix zabbix  4096  2ŒŽ 27 02:29 2016 tests

./twilio-php-master/Services:
‡Œv 32
drwxrwxrwx 5 zabbix zabbix  4096  2ŒŽ 27 02:29 2016 Twilio
-rwxrwxrwx 1 zabbix zabbix 27616  2ŒŽ 27 02:29 2016 Twilio.php

■■4 PHPプログラムとXMLの設置

[root@wiki-web-2 alertscripts]# cat alert-twilio_prisan.php
<?php
    require("/usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio.php"); // ライブラリの場所

    $sid = "AC6b90aed2c176bad2466a62ba5ee3XXXXX"; // Account Sid
    $token = "266d2b356bf61e88fbef15bc66bXXXXX"; // Auth Token
    $tel_to = "+8190612950XX";   //宛先電話番号
    $tel_from = "+8150318730XX"; //Twilioで取得した電話番号
    $twiml = "https://dl.dropboxusercontent.com/u/42879370/calling.xml"; // TwiML URL

    $client = new Services_Twilio($sid, $token);
    $call = $client->account->calls->create($tel_from, $tel_to, $twiml);
?>
[root@wiki-web-2 alertscripts]# 

alertscriptsの中にalert-twilio_prisan.phpを作成、
中身が↑になります。ライブラリはフルパスで僕は書いてます。
calling.xmlを必ず指定します。
電話を受けた時にどんな音声を流すのかをXMLファイルで書きます。
音声合成で喋らすこともできますし、音声ファイルを再生させることもできます。
インターネット上に公開する必要がありますので、dropboxのpublixフォルダに置くのが
一番簡単かとおもいます。

XMLの中身はこんな感じにしてみました。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    
    <Say language="ja-jp">
    	おいらはもーもー太郎
    </Say>
    
    <Play>
	    htts://dl.dropboxusercontent.com/u/42879370/testvoice.wav
    </Play>
  
</Response>

編集が終わったらこのXMLの公開URLをさっきのPHPプログラムの中に書きます。
testvoice.wavをpubilicフォルダ内に置いています。
Sayで囲った文字は音声合成して読み上げてくれます。

■■5 実行してみる。ログを見てみる

実行してみましょう。

[root@wiki-web-2 alertscripts]# php alert-twilio_prisan.php

これで指定した電話番号に電話がかかってくるはずです。
とても簡単ですね。
ZABBIXでアクションの登録をすれば、トリガー検知した時に電話をかけることができます。

■■6 ログについて

WEB画面上から電話した時のログを見てみます。

ログ
スクリーンショット 2016-06-05 16.15.59

使用状況
スクリーンショット 2016-06-05 16.16.17

プログラマブルVOICE
スクリーンショット 2016-06-05 16.17.12

■■はまったこと


当初XMLは自宅サーバに置いていたのですが、オレオレ証明書だったので
Twilioから突くことができず、
「11237 – Certificate Invalid – Could not find path to certificate」
になってました。


FreeTrialで使えることがわかりづらいです。
一応ここに書いてあるんだけど、もっとわかりやすく書いてほしいです。
https://www.twilio.com/help/faq/twilio-basics/how-does-twilios-free-trial-work
24分で450円くらいの課金状況が表示されている状態でPHPを叩いたら
こんなエラーが突然出ました。

[root@wiki-web-2 zabbix]# nl /usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio.phpphp /usr/lib/zabbix/alertscripts/alert-twilio_prisan.php
PHP Fatal error:  Uncaught exception 'Services_Twilio_RestException' with message 'Authenticate' in /usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio.php:297
Stack trace:
#0 /usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio.php(180): Base_Services_Twilio->_processResponse(Array)
#1 /usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio/ListResource.php(92): Base_Services_Twilio->createData('/2010-04-01/Acc...', Array)
#2 /usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio/Rest/Calls.php(32): Services_Twilio_ListResource->_create(Array)
#3 /usr/lib/zabbix/alertscripts/alert-twilio_prisan.php(11): Services_Twilio_Rest_Calls->create('+815031873036', '+819061295054', 'https://dl.drop...')
#4 {main}
  thrown in /usr/lib/zabbix/alertscripts/twilio-php-master/Services/Twilio.php on line 297
[root@wiki-web-2 zabbix]# 

課金することで解消。とほほ。


最初アカウント登録したら、登録直後にsuspendedになってしまいました。
意味がわかりません。仕方なくもう1アカウント作って今回はそれで試しています。


Leave a comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

2 thoughts on “PHPでも勉強するか!その11 Twilioで電話をかけよう