[ext-callback-to-queue]
exten => _X.,1,Set(__NODEST=${EXTEN})
exten => _X.,n,Goto(ext-did-0001,s,1)
exten => _X.,Hangup
[from-internal-test]
exten => _X.,1,Wait(1)
exten => _X.,n,Set(CALLERID(num)=?)
exten => _X.,n,Set(CALLERID(name)=?)
exten => _X.,n,Playback(/var/lib/asterisk/sounds/ru/demo-thanks,skip)
exten => _X.,n,Goto(from-internal,${EXTEN},1)
exten => _X.,n,Hangup
Через АМИ шлю Originate
Action: Originate
ActionID: 842
Exten: 84951112233
Channel: Local/001@ext-callback-to-queue/n
Context: from-internal-test
Priority: 1
Timeout: 180000
Async: true
Callerid: "MissedCall" <84951112233>
Variable: sipaddheader=call-info:\;answer-after=0
exten => _X.,n,Goto(ext-did-0001,s,1) - кидает в очередь с агентами
как мне в [from-internal-test] поймать callerid ответившего агента?
Вот лог звонка: Сначала отрабатывает Channel: Local/001@ext-callback-to-queue/n
-- Called 001@ext-callback-to-queue/n
-- Executing [001@ext-callback-to-queue:1] Set("Local/001@ext-callback-to-queue-0000047e;2", "__NODEST=001") in new stack
-- Executing [001@ext-callback-to-queue:2] Goto("Local/001@ext-callback-to-queue-0000047e;2", "ext-did-0001,s,1") in new stack
-- Goto (ext-did-0001,s,1)
...
и когда какой-нибудь агент в очереди берет трубку исполняется эта часть
Exten: 84951112233
Context: from-internal-test
-- Local/101@from-queue-0000047f;1 answered Local/001@ext-callback-to-queue-0000047e;2
-- Stopped music on hold on Local/001@ext-callback-to-queue-0000047e;2
-- Local/001@ext-callback-to-queue-0000047e;1 answered
-- Executing [84951112233@from-internal-test:1] Wait("Local/001@ext-callback-to-queue-0000047e;1", "1") in new stack
-- Channel Local/101@from-queue-0000047f;1 joined 'simple_bridge' basic-bridge <a224cca6-3e47-4503-bac3-ce6ffcd9e8b9>
-- Channel Local/001@ext-callback-to-queue-0000047e;2 joined 'simple_bridge' basic-bridge <a224cca6-3e47-4503-bac3-ce6ffcd9e8b9>
-- Channel SIP/101-00000323 joined 'simple_bridge' basic-bridge <46df93a3-7085-4ad1-b825-ef0290698d30>
> 0x7fe148050ac0 -- Strict RTP switching to RTP target address 192.168.9.104:10970 as source
-- Channel Local/101@from-queue-0000047f;2 joined 'simple_bridge' basic-bridge <46df93a3-7085-4ad1-b825-ef0290698d30>
-- Executing [84951112233@from-internal-test:2] Set("Local/001@ext-callback-to-queue-0000047e;1", "CALLERID(num)=101") in new stack
-- Executing [84951112233@from-internal-test:3] Set("Local/001@ext-callback-to-queue-0000047e;1", "CALLERID(name)="101 Agent"") in new stack
-- Executing [84951112233@from-internal-test:4] Playback("Local/001@ext-callback-to-queue-0000047e;1", "/var/lib/asterisk/sounds/ru/demo-thanks,skip") in new stack
-- <Local/001@ext-callback-to-queue-0000047e;1> Playing '/var/lib/asterisk/sounds/ru/demo-thanks.g729' (language 'en')
> 0x7fe148050ac0 -- Strict RTP learning complete - Locking on source address 192.168.9.104:10970
-- Executing [234448@from-internal-test:5] Goto("Local/001@ext-callback-to-queue-0000047e;1", "from-internal,84951112233,1") in new stack
-- Goto (from-internal,84951112233,1)
Вариант 2:
[ext-callback-to-queue]
exten => _X.,1,Set(__NODEST=${EXTEN})
exten => _X.,n,Set(GLOBAL(FOO${CALLERID(num)})=${CHANNEL})
exten => _X.,n,Goto(ext-did-0001,s,1)
exten => _X.,Hangup
[from-internal-test]
exten => _X.,1,Wait(1)
exten => _X.,n,Set(aCALLID=${IMPORT(${FOO${EXTEN}},CHANNEL(callid))})
exten => _X.,n,Set(channels=${CHANNELS()})
exten => _X.,n,While($["${SET(channel=${SHIFT(channels, )})}" != ""])
exten => _X.,n,GotoIf($["${channel:0:5}" != "Local"]?next:none)
exten => _X.,n(next),Set(bCALLID=${IMPORT(${channel},CHANNEL(callid))})
exten => _X.,n,GotoIf($["${aCALLID}" = "${bCALLID}"]?dial)
exten => _X.,n(none),EndWhile
exten => _X.,n,Goto(end)
exten => _X.,n(dial),Set(CALLERID(num)=${IMPORT(${channel},CALLERID(num))})
exten => _X.,n,Set(CALLERID(name)=${IMPORT(${channel},CALLERID(name))})
exten => _X.,n,Playback(/var/lib/asterisk/sounds/ru/demo-thanks,skip)
exten => _X.,n,Goto(from-internal,${EXTEN},1)
exten => _X.,n(end),Hangup
Задан: Mar 29 '19
Просмотрен: 407 раз
Обновлен: Apr 01 '19
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
во from-internal-test у вас нет отдельного канала. Искать в логах.
zzuz (Mar 29 '19)editПеречитать документацию на Originate
meral (Mar 30 '19)editЯ дополнил логами свой вопрос
wellus (Mar 30 '19)editЕстественно я читаю документацию, мне казалось в Originate у меня все в порядке. И мне нужно во from-internal-test вытащить ссылку на канал Channel SIP/101-00000323 и от туда callerid. Просто я не понимаю как это сделать.
wellus (Mar 30 '19)editЯ пытался функцией MASTER_CHANNEL() но она мне выдавала callerid(num) и (name) текущего канала...
wellus (Mar 30 '19)editЕще я пытался функцией CHANNELS() - но она выводит все активные каналы и от этого звонка и ото всех других...
wellus (Mar 30 '19)editвы какойто ерундой занимаетесь. Зачем вам читать чтото из канала, если вы сразу можете это выставить в момент совершения Originate?
meral (Mar 30 '19)editНаписание нормального ядра обзвона занимает месяцы и годы времени даже у людей с опытом. Используйте написанное другими людьми.
meral (Mar 30 '19)editЯ наверное, не вижу чего то очевидного... я отправляю вызов в очередь, и заранее не заню, кто из агентов возьмет трубку... номер агента при совершении исходящего звонка вторым «плечом» мне нужно по двум причинам. 1я для разных внутренних номеров - разные транки. 2я потом из cdr проще получать статистику по каждому агенту.
wellus (Mar 30 '19)editИзвините,я не консультирую людей, пытающихся писать обзвон. у вас косяки в самой архитектуре.
meral (Mar 31 '19)editЭто всего-лишь callback на пропущенный звонок. Ну нет так нет, может кто другой подскажет.
wellus (Mar 31 '19)editЯ кстати, дополнил свой топик, вариантом, который работает... я правильно понял zzuz ?
wellus (Mar 31 '19)editРаботает - прекрасно. Но колхоз адовый. если full лог будет большим , то парсить придется долго. не говоря уже о остальных решениях. Но без практики и не будет результата.
zzuz (Apr 1 '19)editНичего, больше 100Гб лога, наверно, не поместится. 100Гб современный компьютер отпарсит за минутку.
meral (Apr 1 '19)editПолностью согласен по поводу колхоза ))) но пока, за день набегает 50-60М лога, поэтому ОНО работает ))) хотя мне интересно найти менее ресурснозатратное решение. Я не вкурю, как работают эти functions() в диалплане и почему у меня нет доступа ко всем сбриджованным каналам?... ведь в логе видно, что SIP/101, Local/101 и Local/001 присоединены друг к другу. Значит должна быть функция, позволяющая проходить от одного к другому каналу, не зная заранее название сбриджованного канала...
wellus (Apr 1 '19)edit