[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
Задан: 2019-03-29 16:34:09 +0400
Просмотрен: 405 раз
Обновлен: Apr 01 '19
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
во from-internal-test у вас нет отдельного канала. Искать в логах.
zzuz ( 2019-03-30 00:17:37 +0400 )редактироватьПеречитать документацию на Originate
meral ( 2019-03-30 05:04:26 +0400 )редактироватьЯ дополнил логами свой вопрос
wellus ( 2019-03-30 16:21:06 +0400 )редактироватьЕстественно я читаю документацию, мне казалось в Originate у меня все в порядке. И мне нужно во from-internal-test вытащить ссылку на канал Channel SIP/101-00000323 и от туда callerid. Просто я не понимаю как это сделать.
wellus ( 2019-03-30 16:23:36 +0400 )редактироватьЯ пытался функцией MASTER_CHANNEL() но она мне выдавала callerid(num) и (name) текущего канала...
wellus ( 2019-03-30 16:24:37 +0400 )редактироватьЕще я пытался функцией CHANNELS() - но она выводит все активные каналы и от этого звонка и ото всех других...
wellus ( 2019-03-30 16:25:50 +0400 )редактироватьвы какойто ерундой занимаетесь. Зачем вам читать чтото из канала, если вы сразу можете это выставить в момент совершения Originate?
meral ( 2019-03-30 17:56:09 +0400 )редактироватьНаписание нормального ядра обзвона занимает месяцы и годы времени даже у людей с опытом. Используйте написанное другими людьми.
meral ( 2019-03-30 17:58:04 +0400 )редактироватьЯ наверное, не вижу чего то очевидного... я отправляю вызов в очередь, и заранее не заню, кто из агентов возьмет трубку... номер агента при совершении исходящего звонка вторым «плечом» мне нужно по двум причинам. 1я для разных внутренних номеров - разные транки. 2я потом из cdr проще получать статистику по каждому агенту.
wellus ( 2019-03-30 21:11:22 +0400 )редактироватьИзвините,я не консультирую людей, пытающихся писать обзвон. у вас косяки в самой архитектуре.
meral ( 2019-03-31 17:52:03 +0400 )редактироватьЭто всего-лишь callback на пропущенный звонок. Ну нет так нет, может кто другой подскажет.
wellus ( 2019-03-31 21:10:14 +0400 )редактироватьЯ кстати, дополнил свой топик, вариантом, который работает... я правильно понял zzuz ?
wellus ( 2019-04-01 00:01:21 +0400 )редактироватьРаботает - прекрасно. Но колхоз адовый. если full лог будет большим , то парсить придется долго. не говоря уже о остальных решениях. Но без практики и не будет результата.
zzuz ( 2019-04-01 11:12:03 +0400 )редактироватьНичего, больше 100Гб лога, наверно, не поместится. 100Гб современный компьютер отпарсит за минутку.
meral ( 2019-04-01 12:02:53 +0400 )редактироватьПолностью согласен по поводу колхоза ))) но пока, за день набегает 50-60М лога, поэтому ОНО работает ))) хотя мне интересно найти менее ресурснозатратное решение. Я не вкурю, как работают эти functions() в диалплане и почему у меня нет доступа ко всем сбриджованным каналам?... ведь в логе видно, что SIP/101, Local/101 и Local/001 присоединены друг к другу. Значит должна быть функция, позволяющая проходить от одного к другому каналу, не зная заранее название сбриджованного канала...
wellus ( 2019-04-01 21:52:13 +0400 )редактировать