1 | изначальная версия редактировать | |
Здравствуйте
В 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} не предлагать, переменная устанавливается только при отвеченном вызове.
2 | No.2 Revision редактировать |
Здравствуйте
В 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.