Звездочка с новыми функциями - PullRequest
1 голос
/ 15 апреля 2010

Я создал файл записи списка функций odbc в таблице sql:

[R]

dsn=connector

write=INSERT INTO ast_records (filename,caller,callee,dtime) VALUES
('${ARG1}','${ARG2}','${ARG3}','${ARG4}')

prefix=M

и установите его в диалплане:

exten => _0X.,n,Set(
M_R(${MIXMONITOR_FILENAME}\,${CUSER}\,${EXTEN}\,${DTIME})= )

при извинении я получаю сообщение об ошибке: ast_func_write: M_R Функция не зарегистрирована:

обратите внимание, что: звездочка с windows

Ответы [ 3 ]

4 голосов
/ 29 апреля 2011
  1. Первое, что я увидел, было то, что вы неправильно выполняли вызов функции ... вам нужно присваивать значения, а не аргументы .... попробуйте это:

    func_odbc.conf:

    [R]
    dsn=connector
    prefix=M
    writesql=INSERT INTO ast_records (filename,caller,callee,dtime) VALUES('${VAL1}','${VAL2}','${VAL3}','${VAL4}');
    

    диалплан:

    exten => _0X.,1,Set(M_R()=${MIXMONITOR_FILENAME}\,${CUSER}\,${EXTEN}\,${DTIME})
    

    Если это не поможет, продолжайте в моем списке:)

  2. Убедитесь, что func_odbc.so загружается Asterisk. (из звездочки CLI: модуль показывается как func_odbc) ... Если он не загружен, он не может "построить" вашу пользовательскую функцию запроса odbc.

  3. Убедитесь, что ваш DSN настроен в /etc/odbc.ini
  4. Убедитесь, что /etc/asterisk/res_odbc.conf правильно настроен
  5. Убедитесь, что вы называете DSN по правильному имени (я вижу, что это происходит постоянно)
  6. включить многословное и отладочное ведение журнала Asterisk, перезагрузить регистратор, развернуть базовый набор 5, отладочный набор 5, а затем повторить вызов. когда вызов завершится, просмотрите журнал, и вы увидите гораздо больше информации о том, что произошло ...

Что касается ответа от recluze ... Не звонить вам сюда, но использование PHP AGI - это серьезное излишество. Функция func_odbc работает просто отлично, зачем создавать дополнительные издержки и потенциальные проблемы с безопасностью, вызывая внешний скрипт (который должен использовать программу-интерпретатор в самом TOP)?

2 голосов
/ 17 февраля 2011

Вы должны вызывать функцию func odbc как «ODBC_connector». Соединитель следует использовать в файле func_odbc.conf [соединитель]. В диалплане он должен называться так.

exten=> _0x.,n,ODBC_connector(${arg1},${arg2})
0 голосов
/ 10 января 2011

Я не совсем понимаю синтаксис, который вы пытаетесь использовать, но как насчет использования AGI (с php) для этого. Просто определите свою логику в php-скрипте и вызовите ее из своего плана набора как:

exten => _0X.,n,AGI(script-filename.php,${CUSER},${EXTEN},${DTIME})
...