2014年7月28日月曜日

Twilioで着呼

先日Twilioから発呼したので、 今回はTwilioで着呼したときの処理を書いてみます。

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

form = cgi.FieldStorage()
if form.has_key("Digits"):
 d=1
 digits=form["Digits"].value
else:
 d=0

print "Content-Type: text/xml; charset=utf-8\n"
print '<?xml version="1.0" encoding="UTF-8"?>'
print "<Response>"
if d==0:
 print '<Gather timeout="10" numDigits="1">'
 print '<Say language="ja-jp" voice="woman">営業課につなぎます。課の番号1から3を押してください。</Say>'
 print '</Gather>'
else:
 if digits=="1":
  print '<Say language="ja-jp" voice="woman">営業1課につなぎます。</Say>'
 elif digits=="2":
  print '<Say language="ja-jp" voice="woman">営業2課につなぎます。</Say>'
        elif digits=="3":
  print '<Say language="ja-jp" voice="woman">営業3課につなぎます。</Say>'
        else:
  print '<Gather timeout="10" numDigits="1">'
  print '<Say language="ja-jp" voice="woman">営業課につなぎます。課の番号1から3を押してください。</Say>'
  print '</Gather>'
print "</Response>"

次いでTwilioにログインし、
メニューの[電話番号]から着信時の動作を設定したい電話番号をクリックし、
その[音声通話]の[Request URL]に
"http://<サーバのFQDN>/cgi-bin/recv.py"を設定して[保存]をクリックします。

実際に電話をかけてみるとメッセージが流れ、
押すダイヤルボタンによって処理が分岐されるのが体験できます。
これを応用して呼び出すスクリプトファイルを変えたり、XMLファイルを適宜生成することで
複雑な処理をさせることができます。
このXMLはTwiMLと呼ばれているらしく、
リファレンスを見ながら試行錯誤すればいろいろできそうです。
通話料の無駄ですが、電話によるミュージックストリーミングだって可能です。

ところで前述の[Request URL]のデフォルト値は
http://twimlets.com/echo?Twiml=%3CResponse%3E%3CSay+language%3D%22ja-jp%22+voice%3D%22woman%22%3E%E3%82%82%E3%81%97%E3%82%82%E3%81%97%E3%81%AA%E3%82%93%E3%81%A8%E3%81%8B%E3%81%95%E3%82%93%E3%81%A7%E3%81%99%E3%81%8B%E3%80%82%3C%2FSay%3E%3C%2FResponse%3E
のようになっています。
つまり、外部ウェブサーバを持っていなくても
http://twimlets.com/echo?Twiml=<XML文字列>
としておけば固定動作はさせられます。
自分のウェブサーバの負担軽減のために飛ばし先として使うのもありですね。

0 件のコメント:

コメントを投稿