2016-08-29 3 views
0

Я пытаюсь добавить обработчик зависания в своем плане набора, чтобы поймать неотвеченные вызовы с набора номера с несколькими расширениями. Но, к сожалению, мои обработчики привязки не выполняются вообще. Ниже мой extensions.luaОбработчик Hangup Asterisk с использованием lua

CONSOLE = "Console/dsp" -- Console interface for demo 
IAXINFO = "guest"  -- IAXtel username/password 
TRUNK = "SIP" 

GSMTRUNK = "Dongle/dongle0/" 
PRITRUNK = "DAHDI/g0/" 
TRUNKMSD = 1 
local inspect = require ('inspect') 
--from here onwards our logic is there Rajesh 
function dialtomobind(number) 
     app.Dial(GSMTRUNK..number, 50,'egb(add-hangup-handler^'..number..'^1)') 
     local dialstatus = channel['DIALSTATUS']:get() 
     app.NoOp('DIAL STATUS:'..dialstatus) 
     app.Hangup(16) 
end 

function add_hangup_handler(context, extension) 
     channel['hangup_handler_push']='hangup-handlers,s,1' 
     app.NoOp('pre-dial handler, Adding Hangup Handler'..channel['hangup_handler_push']:get()) 
     app.Return() 
end 

function h_handler(context, extension) 
     app.NoOp('After Hangup:'..extension) 
     --app.DumpChan(3) 
end 

function directdialing(c,e) 
     app.Answer(5) 
     app.Playback('tt-monkeys') 
     dialtomobind(string.sub(e, 4)) 
     app.Hangup(16) 
end 


function hangup_handler_1(c,e) 
     --channel['hangup_handler_push'] 
     app.NoOp('Hangup Handler 1 Executed') 
     app.Return() 
end 

extensions = { 
     ['from-internal-sip']={ 
       ['h']=h_handler; 
       ['_500XXXXXXXXXX']=directdialing; 
     }; 
     ['dongle_incoming']={ 
       ['_.']=gsm_dongle_handler; 
     }; 
     ['add-hangup-handler']={ 
       ['_.']=add_hangup_handler; 
     }; 
     ['hangup-handlers']={ 
       ['_.']=hangup_handler_1; 
     }; 
} 

ASTERISK CLI OUT PUT:

-- Executing [[email protected]:1] Answer("SIP/8884882772-00000047", "5") 
     > 0x7f14c80072a0 -- Probation passed - setting RTP source address to 192.168.2.30:54032 
[Aug 29 18:24:17] NOTICE[26470][C-000000c5]: res_rtp_asterisk.c:4478 ast_rtp_read: Unknown RTP codec 95 received from '192.168.2.30:54032' 
    -- Executing [[email protected]:1] Playback("SIP/8884882772-00000047", "tt-monkeys") 
    -- <SIP/8884882772-00000047> Playing 'tt-monkeys.gsm' (language 'en') 
    -- Executing [[email protected]:1] Dial("SIP/8884882772-00000047", "Dongle/dongle0/8884882772,50,egb(add-hangup-handler^8884882772^1)") 
    -- Dongle/dongle0-010000000e Internal Gosub(add-hangup-handler,8884882772,1) start 
    -- Executing [[email protected]:1] NoOp("Dongle/dongle0-010000000e", "pre-dial handler, Adding Hangup Handlerhangup-handlers,s,1") 
    -- Executing [[email protected]:1] Return("Dongle/dongle0-010000000e", "") 
    == Spawn extension (dongle_incoming, 5008884882772, 1) exited non-zero on 'Dongle/dongle0-010000000e' 
    -- Dongle/dongle0-010000000e Internal Gosub(add-hangup-handler,8884882772,1) complete GOSUB_RETVAL= 
    -- Called Dongle/dongle0/8884882772 
    -- Dongle/dongle0-010000000e is making progress passing it to SIP/8884882772-00000047 
    == Spawn extension (from-internal-sip, 5008884882772, 1) exited non-zero on 'SIP/8884882772-00000047' 
    -- Executing [[email protected]:1] NoOp("SIP/8884882772-00000047", "After Hangup:h") 

ответ

0
  1. hangup_handler_push - это вовсе не переменная канала. Таким образом, невозможно использовать методы ниже.

    channel['hangup_handler_push']='hangup-handlers,s,1' 
    

    или

    channel['hangup_handler_push']='hangup-handlers,s,1' 
    
  2. Для установки зависание обработчика мы должны использовать План набора функций CHANNEL (https://wiki.asterisk.org/wiki/display/AST/Hangup+Handlers). Таким образом, ниже будут работать методы.

    channel.CHANNEL('hangup_handler_push'):set('hangup-handlers,s,1') 
    
  3. Как Звездочки Установить приложение можно использовать для установки канала переменных, а также может вызывать звездочку функции также. Так что ниже код также работает.

    app.Set('CHANNEL(hangup_handler)=hangup-handlers,s,1'); 
    

Ссылка: функция плана нумерации В Lua https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=16548029

1

Hangup обработчик диалплан обработчик.

Итак, если вы хотите использовать его, запустите другой сценарий lua в подчиненном контексте/расширении при зависании.

Удлинители-перехватчики, s, 1 были действительны и существуют.

Вы используете

app.Set('CHANNEL(hangup_handler)=hangup-handlers,s,1'); 

becuase это не переменная, это функция.

+0

У меня есть действительный контекст с броскими всеми расширениями, но до сих пор она не называются звездочками. Является ли мой вышеприведенный код неправильным? Или расширения lua не имеют возможностей обработчика зависания? – rajesh6115

+1

Отладка не является темой для SO (см. Правила. Попробуйте app.Set ('CHANNEL (hangup_handler) = hangup-обработчики, s, 1'); – arheops

+0

Спасибо, метод app.Set работает, но не работает как для переменной канала lua метод. 1) channel.hangup_handler_push = 'hangup-handlers, s, 1' 2) channel ['hangup_handler_push'] = 'hangup-обработчики, s, 1' @arheops меняет ваш ответ на метод app.Set, поэтому что я могу отметить правильный ответ – rajesh6115

Смежные вопросы