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

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

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

спросил 2015-12-20 17:54:43 +0400

beginner Gravatar beginner

Вычисление значения переменных в Asterisk

Здравствуйте

В func_odbc.conf есть вот такая фукнция (выясняем, сколько времени человек прождал в очереди перед тем, как положить трубку):

[QUEUE_WAIT]
readsql=SELECT data3 FROM queue_log WHERE callid='${ARG1}' AND (event='CONNECT' or event='ABANDON');

В диалплане есть примерно такая строка:

exten => h,1, ExecIf($[ ${CALLERID(num)} = 11111111 ]?Set(waittime=${ODBC_QUEUE_WAIT(${UNIQUEID})}))

Если верить логам, астериск ВСЕГДА вызывает функцию ODBCQUEUEWAIT, даже если не выполняется условие в ExecIf.

Кусок лога:

 == Spawn extension (from-city, 74951234567, 1) exited non-zero on 'SIP/TRUNK-00009792'
           > Found no rows [SELECT data3 from queue_log WHERE callid='1450619097.43569' AND (event='CONNECT' or event='ABANDON')]
        -- Executing [h@from-city:1] ExecIf("SIP/TRUNK-00009792", "0?Set(waittime=)") in new stack

Нагуглил, что это нормальное поведение. Существуют способы убедить астериск не вычислять значение функции или переменных заранее, до выполнения условия, и не плодить (в данном случае) ненужные запросы к mysql?

Упреждая вопросы - ${QEHOLDTIME} не предлагать, переменная устанавливается только при отвеченном вызове.

Вычисление значения переменных в Asterisk

Здравствуйте

В func_odbc.conf есть вот такая фукнция функция (выясняем, сколько времени человек прождал в очереди перед тем, как положить трубку):

[QUEUE_WAIT]
readsql=SELECT data3 FROM queue_log WHERE callid='${ARG1}' AND (event='CONNECT' or event='ABANDON');

В диалплане есть примерно такая строка:

exten => h,1, ExecIf($[ ${CALLERID(num)} = 11111111 ]?Set(waittime=${ODBC_QUEUE_WAIT(${UNIQUEID})}))

Если верить логам, астериск ВСЕГДА вызывает функцию ODBCQUEUEWAIT, даже если не выполняется условие в ExecIf.

Кусок лога:

 == Spawn extension (from-city, 74951234567, 1) exited non-zero on 'SIP/TRUNK-00009792'
           > Found no rows [SELECT data3 from queue_log WHERE callid='1450619097.43569' AND (event='CONNECT' or event='ABANDON')]
        -- Executing [h@from-city:1] ExecIf("SIP/TRUNK-00009792", "0?Set(waittime=)") in new stack

Нагуглил, что это нормальное поведение. Существуют способы убедить астериск не вычислять значение функции или переменных заранее, до выполнения условия, и не плодить (в данном случае) ненужные запросы к mysql?

Упреждая вопросы - ${QEHOLDTIME} не предлагать, переменная устанавливается только при отвеченном вызове.

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.