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”を設定して%5B保存%5Dをクリックします。

実際に電話をかけてみるとメッセージが流れ、
押すダイヤルボタンによって処理が分岐されるのが体験できます。
これを応用して呼び出すスクリプトファイルを変えたり、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文字列>

としておけば固定動作はさせられます。
自分のウェブサーバの負担軽減のために飛ばし先として使うのもありですね。

広告