1 | изначальная версия редактировать | |
Помогите разобраться с такой проблемой:
Пытаюсь из питон скрипта засетить перменную. В 1.8 такое прокатывало, в 11 не работает
вот дебаг
-- Executing [s@incoming-logic:7] AGI("SIP/out-00000000", "ami_libs.py, 'getSetterSip', 380937777777") in new stack
-- Launched AGI Script /etc/asterisk/agi/ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_request: ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_channel: SIP/out-00000000
<SIP/out-00000000>AGI Tx >> agi_language: en
<SIP/out-00000000>AGI Tx >> agi_type: SIP
<SIP/out-00000000>AGI Tx >> agi_uniqueid: 1373925375.0
<SIP/out-00000000>AGI Tx >> agi_version: 11.4.0
<SIP/out-00000000>AGI Tx >> agi_callerid: 380937777777
<SIP/out-00000000>AGI Tx >> agi_calleridname: 380937777777
<SIP/out-00000000>AGI Tx >> agi_callingpres: 0
<SIP/out-00000000>AGI Tx >> agi_callingani2: 0
<SIP/out-00000000>AGI Tx >> agi_callington: 0
<SIP/out-00000000>AGI Tx >> agi_callingtns: 0
<SIP/out-00000000>AGI Tx >> agi_dnid: unknown
<SIP/out-00000000>AGI Tx >> agi_rdnis: +380947777777
<SIP/out-00000000>AGI Tx >> agi_context: incoming-logic
<SIP/out-00000000>AGI Tx >> agi_extension: s
<SIP/out-00000000>AGI Tx >> agi_priority: 7
<SIP/out-00000000>AGI Tx >> agi_enhanced: 0.0
<SIP/out-00000000>AGI Tx >> agi_accountcode:
<SIP/out-00000000>AGI Tx >> agi_threadid: 140689864525568
<SIP/out-00000000>AGI Tx >> agi_arg_1: 'getSetterSip'
<SIP/out-00000000>AGI Tx >> agi_arg_2: 380937777777
<SIP/out-00000000>AGI Tx >>
-- <SIP/out-00000000>AGI Script ami_libs.py completed, returning 0
-- Executing [s@incoming-logic:8] NoOp("SIP/out-00000000", "") in new stack
-- Executing [s@incoming-logic:9] Dial("SIP/out-00000000", "SIP/,20,tTM(incoming_answer^^s)") in new stack
[Jul 16 00:56:16] WARNING[17886][C-00000000]: app_dial.c:2330 dial_exec_full: Dial argument takes format (technology/resource)
в диалплане вывожу значение переменной но она пуста
exten => s,n,Noop(${setter_sip})
это видно из дебага. Кусок кода который сетит переменную выглядит так
def send(data):
sys.stdout.write("%s \n" % data)
sys.stdout.flush()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
send("SET VARIABLE setter_sip %s" % setter_sip)
то есть по сути делаю вывод в стандартный поток вывода команды
SET VARIABLE setter_sip VALUE
Скрипт рабочий, если выполнить руками то выдает
asterisk11dev ~ # /etc/asterisk/agi/ami_libs.py "getSetterSip" 111111
SET VARIABLE setter_sip 101
2 | No.2 Revision редактировать |
Помогите разобраться с такой проблемой:
Пытаюсь из питон скрипта засетить перменную. В 1.8 такое прокатывало, в 11 не работает
вот дебаг
-- Executing [s@incoming-logic:7] AGI("SIP/out-00000000", "ami_libs.py, 'getSetterSip', 380937777777") in new stack
-- Launched AGI Script /etc/asterisk/agi/ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_request: ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_channel: SIP/out-00000000
<SIP/out-00000000>AGI Tx >> agi_language: en
<SIP/out-00000000>AGI Tx >> agi_type: SIP
<SIP/out-00000000>AGI Tx >> agi_uniqueid: 1373925375.0
<SIP/out-00000000>AGI Tx >> agi_version: 11.4.0
<SIP/out-00000000>AGI Tx >> agi_callerid: 380937777777
<SIP/out-00000000>AGI Tx >> agi_calleridname: 380937777777
<SIP/out-00000000>AGI Tx >> agi_callingpres: 0
<SIP/out-00000000>AGI Tx >> agi_callingani2: 0
<SIP/out-00000000>AGI Tx >> agi_callington: 0
<SIP/out-00000000>AGI Tx >> agi_callingtns: 0
<SIP/out-00000000>AGI Tx >> agi_dnid: unknown
<SIP/out-00000000>AGI Tx >> agi_rdnis: +380947777777
<SIP/out-00000000>AGI Tx >> agi_context: incoming-logic
<SIP/out-00000000>AGI Tx >> agi_extension: s
<SIP/out-00000000>AGI Tx >> agi_priority: 7
<SIP/out-00000000>AGI Tx >> agi_enhanced: 0.0
<SIP/out-00000000>AGI Tx >> agi_accountcode:
<SIP/out-00000000>AGI Tx >> agi_threadid: 140689864525568
<SIP/out-00000000>AGI Tx >> agi_arg_1: 'getSetterSip'
<SIP/out-00000000>AGI Tx >> agi_arg_2: 380937777777
<SIP/out-00000000>AGI Tx >>
-- <SIP/out-00000000>AGI Script ami_libs.py completed, returning 0
-- Executing [s@incoming-logic:8] NoOp("SIP/out-00000000", "") in new stack
-- Executing [s@incoming-logic:9] Dial("SIP/out-00000000", "SIP/,20,tTM(incoming_answer^^s)") in new stack
[Jul 16 00:56:16] WARNING[17886][C-00000000]: app_dial.c:2330 dial_exec_full: Dial argument takes format (technology/resource)
в диалплане вывожу значение переменной но она пуста
exten => s,n,Noop(${setter_sip})
это видно из дебага. Кусок кода который сетит переменную выглядит так
def send(data):
sys.stdout.write("%s \n" % data)
sys.stdout.flush()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
send("SET VARIABLE setter_sip %s" % setter_sip)
то есть по сути делаю вывод в стандартный поток вывода команды
SET VARIABLE setter_sip VALUE
Скрипт рабочий, если выполнить руками то выдает
asterisk11dev ~ # /etc/asterisk/agi/ami_libs.py "getSetterSip" 111111
SET VARIABLE setter_sip 101
UPDATE: Начал копать pyst встраенная документация ничего не прояснила
>>> print asterisk.__doc__
pyst - A set of interfaces and libraries to allow programming of asterisk from python.
The pyst project includes several python modules to assist in programming
asterisk with python:
agi - python wrapper for agi
agitb - a module to assist in agi debugging, like cgitb
config - a module for parsing asterisk config files
manager - a module for interacting with the asterisk manager interface
>>> print asterisk.agi.__doc__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'agi'
>>> from asterisk import agi
>>> print agi.__doc__
agi
This module contains functions and classes to implment AGI scripts in python.
pyvr
{'agi_callerid' : 'mars.putland.int',
'agi_channel' : 'IAX[kputland@kputland]/119',
'agi_context' : 'default',
'agi_dnid' : '666',
'agi_enhanced' : '0.0',
'agi_extension': '666',
'agi_language' : 'en',
'agi_priority' : '1',
'agi_rdnis' : '',
'agi_request' : 'pyst',
'agi_type' : 'IAX'}
Как с помощью этой либы сказать астериску установить переменную такую то в значение такое то.
Тут прочитал http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-9-SECT-4.html что нужно сначала вычитать все что пришлет астериск, но у меня что то все равно не сработало. Подскажите какой нибудь пример аги скрипта на питоне с "правильной" установкой переменной
3 | No.3 Revision редактировать |
Помогите разобраться с такой проблемой:
Пытаюсь из питон скрипта засетить перменную. В 1.8 такое прокатывало, в 11 не работает
вот дебаг
-- Executing [s@incoming-logic:7] AGI("SIP/out-00000000", "ami_libs.py, 'getSetterSip', 380937777777") in new stack
-- Launched AGI Script /etc/asterisk/agi/ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_request: ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_channel: SIP/out-00000000
<SIP/out-00000000>AGI Tx >> agi_language: en
<SIP/out-00000000>AGI Tx >> agi_type: SIP
<SIP/out-00000000>AGI Tx >> agi_uniqueid: 1373925375.0
<SIP/out-00000000>AGI Tx >> agi_version: 11.4.0
<SIP/out-00000000>AGI Tx >> agi_callerid: 380937777777
<SIP/out-00000000>AGI Tx >> agi_calleridname: 380937777777
<SIP/out-00000000>AGI Tx >> agi_callingpres: 0
<SIP/out-00000000>AGI Tx >> agi_callingani2: 0
<SIP/out-00000000>AGI Tx >> agi_callington: 0
<SIP/out-00000000>AGI Tx >> agi_callingtns: 0
<SIP/out-00000000>AGI Tx >> agi_dnid: unknown
<SIP/out-00000000>AGI Tx >> agi_rdnis: +380947777777
<SIP/out-00000000>AGI Tx >> agi_context: incoming-logic
<SIP/out-00000000>AGI Tx >> agi_extension: s
<SIP/out-00000000>AGI Tx >> agi_priority: 7
<SIP/out-00000000>AGI Tx >> agi_enhanced: 0.0
<SIP/out-00000000>AGI Tx >> agi_accountcode:
<SIP/out-00000000>AGI Tx >> agi_threadid: 140689864525568
<SIP/out-00000000>AGI Tx >> agi_arg_1: 'getSetterSip'
<SIP/out-00000000>AGI Tx >> agi_arg_2: 380937777777
<SIP/out-00000000>AGI Tx >>
-- <SIP/out-00000000>AGI Script ami_libs.py completed, returning 0
-- Executing [s@incoming-logic:8] NoOp("SIP/out-00000000", "") in new stack
-- Executing [s@incoming-logic:9] Dial("SIP/out-00000000", "SIP/,20,tTM(incoming_answer^^s)") in new stack
[Jul 16 00:56:16] WARNING[17886][C-00000000]: app_dial.c:2330 dial_exec_full: Dial argument takes format (technology/resource)
в диалплане вывожу значение переменной но она пуста
exten => s,n,Noop(${setter_sip})
это видно из дебага. Кусок кода который сетит переменную выглядит так
def send(data):
sys.stdout.write("%s \n" % data)
sys.stdout.flush()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
send("SET VARIABLE setter_sip %s" % setter_sip)
то есть по сути делаю вывод в стандартный поток вывода команды
SET VARIABLE setter_sip VALUE
Скрипт рабочий, если выполнить руками то выдает
asterisk11dev ~ # /etc/asterisk/agi/ami_libs.py "getSetterSip" 111111
SET VARIABLE setter_sip 101
UPDATE: Начал копать pyst встраенная документация ничего не прояснила
>>> print asterisk.__doc__
pyst - A set of interfaces and libraries to allow programming of asterisk from python.
The pyst project includes several python modules to assist in programming
asterisk with python:
agi - python wrapper for agi
agitb - a module to assist in agi debugging, like cgitb
config - a module for parsing asterisk config files
manager - a module for interacting with the asterisk manager interface
>>> print asterisk.agi.__doc__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'agi'
>>> from asterisk import agi
>>> print agi.__doc__
agi
This module contains functions and classes to implment AGI scripts in python.
pyvr
{'agi_callerid' : 'mars.putland.int',
'agi_channel' : 'IAX[kputland@kputland]/119',
'agi_context' : 'default',
'agi_dnid' : '666',
'agi_enhanced' : '0.0',
'agi_extension': '666',
'agi_language' : 'en',
'agi_priority' : '1',
'agi_rdnis' : '',
'agi_request' : 'pyst',
'agi_type' : 'IAX'}
Как с помощью этой либы сказать астериску установить переменную такую то в значение такое то.
Тут прочитал http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-9-SECT-4.html что нужно сначала вычитать все что пришлет астериск, но у меня что то все равно не сработало. Подскажите какой нибудь пример аги скрипта на питоне с "правильной" установкой переменной
Вообщем написал такое
from asterisk.agi import AGI
agi = AGI()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
agi.set_variable("setter_sip", setter_sip)
Если запустить вывод такой
asterisk11dev agi # ./ami_libs.py "getSetterSip" 123
ARGS: ['./ami_libs.py', 'getSetterSip', '123']
ENV LINE:
class AGI: self.env = {}
COMMAND: SET VARIABLE "setter_sip" "101"
SET VARIABLE "setter_sip" "101"
RESULT_LINE:
Traceback (most recent call last):
File "./ami_libs.py", line 114, in <module>
agi.set_variable("setter_sip", setter_sip)
File "/usr/local/lib/python2.7/dist-packages/asterisk/agi.py", line 527, in set_variable
self.execute('SET VARIABLE', self._quote(name), self._quote(value))
File "/usr/local/lib/python2.7/dist-packages/asterisk/agi.py", line 105, in execute
return self.get_result()
File "/usr/local/lib/python2.7/dist-packages/asterisk/agi.py", line 133, in get_result
code = int(code)
ValueError: invalid literal for int() with base 10: ''
4 | No.4 Revision редактировать |
Помогите разобраться с такой проблемой:
Пытаюсь из питон скрипта засетить перменную. В 1.8 такое прокатывало, в 11 не работает
вот дебаг
-- Executing [s@incoming-logic:7] AGI("SIP/out-00000000", "ami_libs.py, 'getSetterSip', 380937777777") in new stack
-- Launched AGI Script /etc/asterisk/agi/ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_request: ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_channel: SIP/out-00000000
<SIP/out-00000000>AGI Tx >> agi_language: en
<SIP/out-00000000>AGI Tx >> agi_type: SIP
<SIP/out-00000000>AGI Tx >> agi_uniqueid: 1373925375.0
<SIP/out-00000000>AGI Tx >> agi_version: 11.4.0
<SIP/out-00000000>AGI Tx >> agi_callerid: 380937777777
<SIP/out-00000000>AGI Tx >> agi_calleridname: 380937777777
<SIP/out-00000000>AGI Tx >> agi_callingpres: 0
<SIP/out-00000000>AGI Tx >> agi_callingani2: 0
<SIP/out-00000000>AGI Tx >> agi_callington: 0
<SIP/out-00000000>AGI Tx >> agi_callingtns: 0
<SIP/out-00000000>AGI Tx >> agi_dnid: unknown
<SIP/out-00000000>AGI Tx >> agi_rdnis: +380947777777
<SIP/out-00000000>AGI Tx >> agi_context: incoming-logic
<SIP/out-00000000>AGI Tx >> agi_extension: s
<SIP/out-00000000>AGI Tx >> agi_priority: 7
<SIP/out-00000000>AGI Tx >> agi_enhanced: 0.0
<SIP/out-00000000>AGI Tx >> agi_accountcode:
<SIP/out-00000000>AGI Tx >> agi_threadid: 140689864525568
<SIP/out-00000000>AGI Tx >> agi_arg_1: 'getSetterSip'
<SIP/out-00000000>AGI Tx >> agi_arg_2: 380937777777
<SIP/out-00000000>AGI Tx >>
-- <SIP/out-00000000>AGI Script ami_libs.py completed, returning 0
-- Executing [s@incoming-logic:8] NoOp("SIP/out-00000000", "") in new stack
-- Executing [s@incoming-logic:9] Dial("SIP/out-00000000", "SIP/,20,tTM(incoming_answer^^s)") in new stack
[Jul 16 00:56:16] WARNING[17886][C-00000000]: app_dial.c:2330 dial_exec_full: Dial argument takes format (technology/resource)
в диалплане вывожу значение переменной но она пуста
exten => s,n,Noop(${setter_sip})
это видно из дебага. Кусок кода который сетит переменную выглядит так
def send(data):
sys.stdout.write("%s \n" % data)
sys.stdout.flush()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
send("SET VARIABLE setter_sip %s" % setter_sip)
то есть по сути делаю вывод в стандартный поток вывода команды
SET VARIABLE setter_sip VALUE
Скрипт рабочий, если выполнить руками то выдает
asterisk11dev ~ # /etc/asterisk/agi/ami_libs.py "getSetterSip" 111111
SET VARIABLE setter_sip 101
UPDATE: Начал копать pyst встраенная документация ничего не прояснила
>>> print asterisk.__doc__
pyst - A set of interfaces and libraries to allow programming of asterisk from python.
The pyst project includes several python modules to assist in programming
asterisk with python:
agi - python wrapper for agi
agitb - a module to assist in agi debugging, like cgitb
config - a module for parsing asterisk config files
manager - a module for interacting with the asterisk manager interface
>>> print asterisk.agi.__doc__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'agi'
>>> from asterisk import agi
>>> print agi.__doc__
agi
This module contains functions and classes to implment AGI scripts in python.
pyvr
{'agi_callerid' : 'mars.putland.int',
'agi_channel' : 'IAX[kputland@kputland]/119',
'agi_context' : 'default',
'agi_dnid' : '666',
'agi_enhanced' : '0.0',
'agi_extension': '666',
'agi_language' : 'en',
'agi_priority' : '1',
'agi_rdnis' : '',
'agi_request' : 'pyst',
'agi_type' : 'IAX'}
Как с помощью этой либы сказать астериску установить переменную такую то в значение такое то.
Тут прочитал http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-9-SECT-4.html что нужно сначала вычитать все что пришлет астериск, но у меня что то все равно не сработало. Подскажите какой нибудь пример аги скрипта на питоне с "правильной" установкой переменной
Вообщем написал такое
from asterisk.agi import AGI
agi = AGI()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
agi.set_variable("setter_sip", setter_sip)
Если запустить вывод такой
asterisk11dev agi # ./ami_libs.py "getSetterSip" 123
ARGS: ['./ami_libs.py', 'getSetterSip', '123']
ENV LINE:
class AGI: self.env = {}
COMMAND: SET VARIABLE "setter_sip" "101"
SET VARIABLE "setter_sip" "101"
RESULT_LINE:
Traceback (most recent call last):
File "./ami_libs.py", line 114, in <module>
agi.set_variable("setter_sip", setter_sip)
File "/usr/local/lib/python2.7/dist-packages/asterisk/agi.py", line 527, in set_variable
self.execute('SET VARIABLE', self._quote(name), self._quote(value))
File "/usr/local/lib/python2.7/dist-packages/asterisk/agi.py", line 105, in execute
return self.get_result()
File "/usr/local/lib/python2.7/dist-packages/asterisk/agi.py", line 133, in get_result
code = int(code)
ValueError: invalid literal for int() with base 10: ''
5 | No.5 Revision редактировать |
Помогите разобраться с такой проблемой:
Пытаюсь из питон скрипта засетить перменную. В 1.8 такое прокатывало, в 11 не работает
вот дебаг
-- Executing [s@incoming-logic:7] AGI("SIP/out-00000000", "ami_libs.py, 'getSetterSip', 380937777777") in new stack
-- Launched AGI Script /etc/asterisk/agi/ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_request: ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_channel: SIP/out-00000000
<SIP/out-00000000>AGI Tx >> agi_language: en
<SIP/out-00000000>AGI Tx >> agi_type: SIP
<SIP/out-00000000>AGI Tx >> agi_uniqueid: 1373925375.0
<SIP/out-00000000>AGI Tx >> agi_version: 11.4.0
<SIP/out-00000000>AGI Tx >> agi_callerid: 380937777777
<SIP/out-00000000>AGI Tx >> agi_calleridname: 380937777777
<SIP/out-00000000>AGI Tx >> agi_callingpres: 0
<SIP/out-00000000>AGI Tx >> agi_callingani2: 0
<SIP/out-00000000>AGI Tx >> agi_callington: 0
<SIP/out-00000000>AGI Tx >> agi_callingtns: 0
<SIP/out-00000000>AGI Tx >> agi_dnid: unknown
<SIP/out-00000000>AGI Tx >> agi_rdnis: +380947777777
<SIP/out-00000000>AGI Tx >> agi_context: incoming-logic
<SIP/out-00000000>AGI Tx >> agi_extension: s
<SIP/out-00000000>AGI Tx >> agi_priority: 7
<SIP/out-00000000>AGI Tx >> agi_enhanced: 0.0
<SIP/out-00000000>AGI Tx >> agi_accountcode:
<SIP/out-00000000>AGI Tx >> agi_threadid: 140689864525568
<SIP/out-00000000>AGI Tx >> agi_arg_1: 'getSetterSip'
<SIP/out-00000000>AGI Tx >> agi_arg_2: 380937777777
<SIP/out-00000000>AGI Tx >>
-- <SIP/out-00000000>AGI Script ami_libs.py completed, returning 0
-- Executing [s@incoming-logic:8] NoOp("SIP/out-00000000", "") in new stack
-- Executing [s@incoming-logic:9] Dial("SIP/out-00000000", "SIP/,20,tTM(incoming_answer^^s)") in new stack
[Jul 16 00:56:16] WARNING[17886][C-00000000]: app_dial.c:2330 dial_exec_full: Dial argument takes format (technology/resource)
в диалплане вывожу значение переменной но она пуста
exten => s,n,Noop(${setter_sip})
это видно из дебага. Кусок кода который сетит переменную выглядит так
def send(data):
sys.stdout.write("%s \n" % data)
sys.stdout.flush()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
send("SET VARIABLE setter_sip %s" % setter_sip)
то есть по сути делаю вывод в стандартный поток вывода команды
SET VARIABLE setter_sip VALUE
Скрипт рабочий, если выполнить руками то выдает
asterisk11dev ~ # /etc/asterisk/agi/ami_libs.py "getSetterSip" 111111
SET VARIABLE setter_sip 101
UPDATE: Начал копать pyst встраенная документация ничего не прояснила
>>> print asterisk.__doc__
pyst - A set of interfaces and libraries to allow programming of asterisk from python.
The pyst project includes several python modules to assist in programming
asterisk with python:
agi - python wrapper for agi
agitb - a module to assist in agi debugging, like cgitb
config - a module for parsing asterisk config files
manager - a module for interacting with the asterisk manager interface
>>> print asterisk.agi.__doc__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'agi'
>>> from asterisk import agi
>>> print agi.__doc__
agi
This module contains functions and classes to implment AGI scripts in python.
pyvr
{'agi_callerid' : 'mars.putland.int',
'agi_channel' : 'IAX[kputland@kputland]/119',
'agi_context' : 'default',
'agi_dnid' : '666',
'agi_enhanced' : '0.0',
'agi_extension': '666',
'agi_language' : 'en',
'agi_priority' : '1',
'agi_rdnis' : '',
'agi_request' : 'pyst',
'agi_type' : 'IAX'}
Как с помощью этой либы сказать астериску установить переменную такую то в значение такое то.
Тут прочитал http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-9-SECT-4.html что нужно сначала вычитать все что пришлет астериск, но у меня что то все равно не сработало. Подскажите какой нибудь пример аги скрипта на питоне с "правильной" установкой переменной
Написал такое
from asterisk.agi import AGI
agi = AGI()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
agi.set_variable("setter_sip", setter_sip)
все равно нифига не сетится, куда дальше копать не пойму
6 | No.6 Revision редактировать |
Помогите разобраться с такой проблемой:
Пытаюсь из питон скрипта засетить перменную. В 1.8 такое прокатывало, в 11 не работает
вот дебаг
-- Executing [s@incoming-logic:7] AGI("SIP/out-00000000", "ami_libs.py, 'getSetterSip', 380937777777") in new stack
-- Launched AGI Script /etc/asterisk/agi/ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_request: ami_libs.py
<SIP/out-00000000>AGI Tx >> agi_channel: SIP/out-00000000
<SIP/out-00000000>AGI Tx >> agi_language: en
<SIP/out-00000000>AGI Tx >> agi_type: SIP
<SIP/out-00000000>AGI Tx >> agi_uniqueid: 1373925375.0
<SIP/out-00000000>AGI Tx >> agi_version: 11.4.0
<SIP/out-00000000>AGI Tx >> agi_callerid: 380937777777
<SIP/out-00000000>AGI Tx >> agi_calleridname: 380937777777
<SIP/out-00000000>AGI Tx >> agi_callingpres: 0
<SIP/out-00000000>AGI Tx >> agi_callingani2: 0
<SIP/out-00000000>AGI Tx >> agi_callington: 0
<SIP/out-00000000>AGI Tx >> agi_callingtns: 0
<SIP/out-00000000>AGI Tx >> agi_dnid: unknown
<SIP/out-00000000>AGI Tx >> agi_rdnis: +380947777777
<SIP/out-00000000>AGI Tx >> agi_context: incoming-logic
<SIP/out-00000000>AGI Tx >> agi_extension: s
<SIP/out-00000000>AGI Tx >> agi_priority: 7
<SIP/out-00000000>AGI Tx >> agi_enhanced: 0.0
<SIP/out-00000000>AGI Tx >> agi_accountcode:
<SIP/out-00000000>AGI Tx >> agi_threadid: 140689864525568
<SIP/out-00000000>AGI Tx >> agi_arg_1: 'getSetterSip'
<SIP/out-00000000>AGI Tx >> agi_arg_2: 380937777777
<SIP/out-00000000>AGI Tx >>
-- <SIP/out-00000000>AGI Script ami_libs.py completed, returning 0
-- Executing [s@incoming-logic:8] NoOp("SIP/out-00000000", "") in new stack
-- Executing [s@incoming-logic:9] Dial("SIP/out-00000000", "SIP/,20,tTM(incoming_answer^^s)") in new stack
[Jul 16 00:56:16] WARNING[17886][C-00000000]: app_dial.c:2330 dial_exec_full: Dial argument takes format (technology/resource)
в диалплане вывожу значение переменной но она пуста
exten => s,n,Noop(${setter_sip})
это видно из дебага. Кусок кода который сетит переменную выглядит так
def send(data):
sys.stdout.write("%s \n" % data)
sys.stdout.flush()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
send("SET VARIABLE setter_sip %s" % setter_sip)
то есть по сути делаю вывод в стандартный поток вывода команды
SET VARIABLE setter_sip VALUE
Скрипт рабочий, если выполнить руками то выдает
asterisk11dev ~ # /etc/asterisk/agi/ami_libs.py "getSetterSip" 111111
SET VARIABLE setter_sip 101
UPDATE: Начал копать pyst встраенная документация ничего не прояснила
>>> print asterisk.__doc__
pyst - A set of interfaces and libraries to allow programming of asterisk from python.
The pyst project includes several python modules to assist in programming
asterisk with python:
agi - python wrapper for agi
agitb - a module to assist in agi debugging, like cgitb
config - a module for parsing asterisk config files
manager - a module for interacting with the asterisk manager interface
>>> print asterisk.agi.__doc__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'agi'
>>> from asterisk import agi
>>> print agi.__doc__
agi
This module contains functions and classes to implment AGI scripts in python.
pyvr
{'agi_callerid' : 'mars.putland.int',
'agi_channel' : 'IAX[kputland@kputland]/119',
'agi_context' : 'default',
'agi_dnid' : '666',
'agi_enhanced' : '0.0',
'agi_extension': '666',
'agi_language' : 'en',
'agi_priority' : '1',
'agi_rdnis' : '',
'agi_request' : 'pyst',
'agi_type' : 'IAX'}
Как с помощью этой либы сказать астериску установить переменную такую то в значение такое то.
Тут прочитал http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-9-SECT-4.html что нужно сначала вычитать все что пришлет астериск, но у меня что то все равно не сработало. Подскажите какой нибудь пример аги скрипта на питоне с "правильной" установкой переменной
Написал такое
from asterisk.agi import AGI
agi = AGI()
if funcName == "getSetterSip":
setter_sip = getSetterSip(callerid)
agi.set_variable("setter_sip", setter_sip)
все равно нифига не сетится, куда дальше копать не пойму
РЕШЕНИЕ:
Кароче вроде разрулил, если передаешь параметром строку аги скрипту не надо после запятой пробел ставить, даже если в кавычках все равно его хавает, ну и от этого посыпалась остальная логика. Зато хоть научился аги либой пользоваться :)
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.