Yado_tech

旅館+ITとはなんぞ

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は起動する。次こそはモーニングコールを作ろう・・