Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2013-07-16 02:21:03 +0400

godlike Gravatar godlike flag of Ukraine

AGI не устанавливает переменную

Помогите разобраться с такой проблемой:

Пытаюсь из питон скрипта засетить перменную. В 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

AGI не устанавливает переменную

Помогите разобраться с такой проблемой:

Пытаюсь из питон скрипта засетить перменную. В 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 что нужно сначала вычитать все что пришлет астериск, но у меня что то все равно не сработало. Подскажите какой нибудь пример аги скрипта на питоне с "правильной" установкой переменной

AGI не устанавливает переменную

Помогите разобраться с такой проблемой:

Пытаюсь из питон скрипта засетить перменную. В 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: ''

AGI не устанавливает переменную

Помогите разобраться с такой проблемой:

Пытаюсь из питон скрипта засетить перменную. В 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: ''

AGI не устанавливает переменную

Помогите разобраться с такой проблемой:

Пытаюсь из питон скрипта засетить перменную. В 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)

все равно нифига не сетится, куда дальше копать не пойму

AGI не устанавливает переменную

Помогите разобраться с такой проблемой:

Пытаюсь из питон скрипта засетить перменную. В 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.