AGIのお勉強②
なんどIPアドレスを制限してもAsteriskに不正侵入してくるのでさくらVPSを初期化しました。
ということでAsteriskは基本的に登録されたIPアドレスだけ受け入れるようにしました。
5060ポートは開けちゃあかんw
てことでAsteriskを入れ直したら色々と変わってしまっていたのでもう一度書きます。
【AGIを利用する前提条件】
・Ubuntu 16.04LTS(さくらVPS with スタートアップスクリプト『ufw』)
・Asterisk 13.1.0
【Pythonバージョン】
・多分2.7。というのもasteriskで利用するのはどうやらsu
したあとpython
にてログインしたPythonのインタプリタ上で実行されるみたい。
pyenvとか入れててもなぜかこうなった。
①Asteriskのインストール
sudo apt-get install asterisk
②Portを開ける
sudo ufw allow from 【IPアドレス】
←登録したIPアドレスからのみアクセス可能にする
③confファイルの場所
/etc/asterisk/
④AGIの場所
/usr/share/asterisk/agi-bin
←変わった
⑤AGIの実行ユーザー
root
←以前はAsteriskだった
⑥pyst2のインストール
sudo su apt-get install python-pip pip install pyst2
⑦sip.conf
[general] context=default port=5060 bindaddr=0.0.0.0 language=ja nat = yes srvlookup=yes udpenable=yes tcpenable=yes preferred_codec_only=yes disallow=all allow=ulaw [201] type=friend defaultuser=201 secret=pass host=dynamic canreinvite=no [202] type=friend defaultuser=202 secret=pass host=dynamic canreinvite=no
⑧extensions.conf
[general] writeprotect = no [default] exten => _20X,1,Dial(SIP/${EXTEN},60,tT) exten => _20X,n,Congestion exten => 8,1,Answer() exten => 8,n,AGI(agi_test.py)
⑨agi_test.py
#!/usr/bin/python """ Example to get and set variables via AGI. You can call directly this script with AGI() in Asterisk dialplan. """ from asterisk.agi import * agi = AGI() agi.verbose("python agi started") agi.verbose("this is test") callerId = agi.env['agi_callerid'] agi.verbose("call from %s" % callerId) while True: agi.stream_file('vm-extension') result = agi.wait_for_digit(-1) agi.verbose("got digit %s" % result) if result.isdigit(): agi.say_number(result) else: agi.verbose("bye!") agi.hangup() sys.exit()
⑩agi_test.pyの実行権限を変更
sudo chmod 755 /usr/share/asterisk/agi-bin/agi_test.py
⑪クライアントのソフトのボタン音(DTMFの種類)をrfc2833に
以上でAGIは起動する。次こそはモーニングコールを作ろう・・