2014年7月21日月曜日

Twilioで発呼

先日予告したように
ウェブアプリケーションからTwilioを使って自分の電話に向かって発呼してみます。

最初に"http://<サーバのFQDN>/mc1.xml"の内容が以下のようになるよう
ウェブサーバとコンテンツを調整します。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say language="ja-jp" voice="woman">おはようございます</Say>
</Response>
また"http://<サーバのFQDN>/mc2.xml"の内容が以下のようになるようにします。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say language="ja-jp" voice="woman">おやすみなさい</Say>
</Response>

次に"http://<サーバのFQDN>/cgi-bin/mc1.py"にあたるファイルの
スクリプトの内容が以下のようになるようにします。
なお1行目のpythonへのフルパスは環境に合わせて変更してください。
#!/usr/local/bin/python
# coding:utf-8
print "Content-Type: text/html; charset=utf-8\n\n"

from twilio.rest import TwilioRestClient

ACCOUNT_SID = "<ACCOUNT SID>"
AUTH_TOKEN = "<AUTH TOKEN>"

client = TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN)

call = client.calls.create(
        from_="<発呼元の電話番号>",
        to="<発呼先の電話番号>",
        url="http://<サーバのFQDN>/mc1.xml",
        method="GET",
        fallback_method="GET",
        status_callback_method="GET",
        record="false"
)

print "<html>"
print "<head>"
print "<title>make call</title>"
print "</head>"
print "<body>"
print "call sid is"
print call.sid
print "</body>"
print "</html>"
また"http://<サーバのFQDN>/cgi-bin/mc2.py"にあたるファイルの
スクリプトの内容は上記の"mc1.py"と同じにしますが、
            url="http://<サーバのFQDN>/mc1.xml",
の行だけは
            url="http://<サーバのFQDN>/mc2.xml",
に変更します。
参考にしたのはダッシュボードから見られるAPI EXPLORERのです。
ここで<ACCOUNT SID>と<AUTH TOKEN>は
Twilioのサイトにログインしたときにダッシュボードに表示されている文字列で、
洩れて悪用されると金銭的被害を受ける可能性があるので注意しましょう。
<AUTH TOKEN>については鍵アイコンを押したときにだけ表示されます。
"**************"ではありませんので。
<発呼元の電話番号>、<発呼先の電話番号>の形式は
国際電話をかけるときのものにせなばならず、
日本の電話番号なら"+81"に続けて市外局番から指定します。
ただし、市外局番の最初の"0"は省く必要があります。
携帯電話(090/080/070)やIP電話(050)の電話番号についても
最初の"0"を除いて書く必要があります。
ちなみに<発呼元の電話番号>はTwilioからもらった電話番号になります。

それからサーバのセキュリティに関しては気を使いましょう。
上記は単なるテストのための一時的なコンテンツなのでその辺り無頓着ですが、
ファイルのパーミッションを適切にしたり、httpsで通信経路を暗号化したり、
誰かに勝手に発信されて課金されないようにウェブページに認証をかけたりすべきでしょう。

さて、前置きが長かったですがとにかく発呼してみます。
適当なウェブブラウザ(PCでもスマートフォンでもなんでも)から
"http://<サーバのFQDN>/cgi-bin/mc1.py"にアクセスすると、
<発呼先の電話番号>で指定した電話に着信が起こります。
通話状態にするとトモダチコレクションっぽい声で"おはようございます"と聞こえます。
同様に"http://<サーバのFQDN>/cgi-bin/mc2.py"にアクセスすると、
"おやすみなさい"と聞こえます。
これらの言葉は先に作成したXMLファイルに指定したものです。

つまり、Pythonのスクリプトをいろいろ変えるのはもちろん、呼ぶタイミングを変えたり、
XMLファイルを動的に生成することでいろいろと便利なサービスが実現できます。
必要なのは自由に使えるインターネット上のウェブサーバとその上で動くアプリケーション、
それにTwilioへ支払う料金だけです。
上記を単純に応用すればモーニングコールや
カレンダーに連動したイベント通知なんかに利用できそうです。
料金が基本従量制で携帯電話宛の音声発信は結構高いので、
個人用途で高頻度に使う気は起きませんが、
こんなに簡単に電話関係のサービスが使えるのはとってもうれしいですね。

今後Twilioをヘビーに使うかどうかはわかりませんが、
トライアルの無料期間中にいろいろ遊んでみたいと思います。

0 件のコメント:

コメントを投稿