Возможно использовать Asterisk для задержки вызова перез ПО КЦ для минимизации соединений с операторами и учёта корректной статистики. Для это необходимо внедрить оповещение для звонящего и обработать факт отклонения вызоваответа iqAntibot.
В примере ниже будет проиграно сообщение announce
, а сервер отправивший вызов получит ответ SIP 501. Описание SIP кода в iqAntibot должно начинаться с IQANTIBOT
; Исходящий контекст для использования в endpoint
[termination]
exten => _XXXXXX.,1,Dial(PJSIP/${EXTEN}@termination,,b(initchan,s,1(${CHANNEL(name)}))A(announce))
same => n,Hangup()
[termination-end]
exten => _X!,1,NoOp()
same => n,GotoIf($[("${DIALSTATUS}" = "ANSWER") & ("${EXTEN}" != "16")]?antibot)
same => n,Set(HANGUPCAUSE_STRING=${HANGUPCAUSE_KEYS()})
same => n,Set(ARRAY(item)=${HANGUPCAUSE_STRING})
same => n,GotoIf($["${HANGUPCAUSE(${item},tech):8:9}" = "IQANTIBOT"]?antibot)
same => n,Hangup()
same => n(antibot),Hangup(29) # SIP - 501
[initchan]
exten => s,1,Set(CHANNEL(hangup_handler_push)=hangchan,s,1)
same => n,Set(INITCHAN=${ARG1})
same => n,Return()
[hangchan]
exten => s,1,NoOp()
same => n,ChannelRedirect(${INITCHAN},termination-end,${HANGUPCAUSE},1)
same => n,Return()
Иногда бывает необходимо в лог вызовов, отображаемых в Grafana перадать собственную информацию. Это возможно передачей заголовка X-IQANTIBOT-Info
Для chan_sip:
same => n,SIPAddHeader(X-IQANTIBOT-Info:${UNIQUEID})