Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

FreePBX как получить Callerid из связанного канала

0
[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

wellus Gravatar wellus
67 34 2 14

обновил 2019-04-01 23:55:43 +0400

Comments

во 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 )редактировать

Будьте первым, кто ответит на этот вопрос!

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2019-03-29 16:34:09 +0400

Просмотрен: 405 раз

Обновлен: Apr 01 '19

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.