Всем добрый день.
Имеется два сервера asterisk(Elastix), соединенные между собой IAX транком. Если звоним внутри одного сервера, то при вызове проверяем статус extansion с помощью DEVICE_STATE:
[macro-check-number]
exten => s,1,NoOp(check status on-line for number ${ARG1})
exten => s,n,Set(devst=${DEVICE_STATE(SIP/${ARG1})})
exten => s,n,ExecIf($["${devst}" = "INUSE"]?Playback(custom/1))
exten => s,n,NoOp(Exit from macro-check-number)
Если абонент занят (INUSE), то говорим что абонент занят и дальше идет гудок. Сделано специально т.к. у абонентов на аппаратах несолько линий (включен Call Waiting).
Но если я звоню на соседний asterisk, то почему то в поле DEVICE_STATE всегда прилетает INVALID:
-- Executing [133@from-internal:1] Macro("SIP/299-00000062", "check-number,133") in new stack
-- Executing [s@macro-check-number:1] NoOp("SIP/299-00000062", "check status on-line for number 133") in new stack
-- Executing [s@macro-check-number:2] Set("SIP/299-00000062", "devst=INVALID") in new stack
-- Executing [s@macro-check-number:3] ExecIf("SIP/299-00000062", "0?Playback(custom/SP)") in new stack
-- Executing [s@macro-check-number:4] NoOp("SIP/299-00000062", "Exit from macro-check-number") in new stack
Как мне сделать, что бы прилетал реальный статус?
В качестве простого костыля можно с одного астера на другой передавать инфу в Sip header, например в виде доп звонка :)
самый простой вариант - позвонить.
также можно написать свой dev_state или использовать джабер и его стейт.
Задан: Aug 22 '15
Просмотрен: 364 раз
Обновлен: Aug 24 '15
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
Идея с передачей инфы в Sip header звучит заманчиво. Может кто-нибудь порадует парочкой примеров?
Chelovechegggggg (Aug 25 '15)edit