Уведомлением о режиме CallWaiting+SIP аппараты

FreePBX, TrixBox, AsteriskGUI и др.
Всевозможные надстройки/интерфейсы к Asterisk в виде GUI.
[всё что прямо не относится к Asterisk писать сюда]

Модераторы: Admins, Модераторы

Ответить
Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Уведомлением о режиме CallWaiting+SIP аппараты

Сообщение Alexey_Astashov » 22 май 2013, 18:21

Используется связка Asterisk 11.3.0+FreePBX 2.11+DialPlan Injection

Кто-то в свое время посоветовал для каждого телефона у которого используется CallWaiting применить связку DialPlanInjection
и присвоить вот такое значение для каждого номера в отдельности:

Код: Выделить всё

Macro(checkCW,${EXTEN})
GotoIf($[{GROUP_COUNT(${EXTEN})} > 1]?:Dial)
Playback(abonent-razgovarivaet)
Playback(zhdite-soedineniya)
Set(DIAL_OPTIONS=Ttm)
(Dial),Macro(exten-vm,novm,${EXTEN},${EXTEN},0,0,0)
в extensions_custom прописать:

Код: Выделить всё

[macro-checkCW]
exten => s,1,Set(GROUP(tocall)=${CALLERID(number)})
exten => s,n,Set(GROUP(fromcall)=${ARG1})
конечно-же это работает, работает почти так как надо, НО, это работает только в случае применения однокональных телефонов подключенных к VOIP шлюзам, весело издавая посторонние писки в трубку оповещая о втором звонке ..
и совершенно не подходит в случае использования SIP аппаратов, так как они в режиме разговора уходят в статус InUSE&Ringing. Ну как водится руководство поставило именно такую задачу, чтобы был CallWaiting+Предупреждение.
да и вообще в случае SIP аппаратов и не видать обращения к данному Macro.

Помогите плиз решить задачку.


З.Ы. Вопрос даже не в том, чтобы ждать пока абонент наговорится, а в том, что когда приходит второй вызов по CallWait на экране остается информация о пропущенном вызове с номером звонившего.. это так удобно на самом деле, именно поэтому постановка звока в очередь не годится.

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 18 июн 2013, 16:48

Люююди, помогитеже плииз, оч надо решить задачку :(

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 18 июн 2013, 19:19

Опишите понятнее, чего вы хотите, как это должно выглядеть :)
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 19 июн 2013, 15:47

хммм.

все с виду очень просто, необходимо чтобы в момент разоговора между абонетами A<--->(X) (где X любой состояшийся звонок)
чтобы при попытке позвонить любого другого абонента на номер абоента "A" выдавалось госовое оповещение "Абонент разговаривает по другой линии" в прочем как у мобильных операторов. при этом у абонета "A" должен отрабатывать именно режим CallWaiting - т.е. абонент "А" должен во время разговора видеть на экране и соответсвенно слышать пик в трубке, что кто-то пытается дозвониться


Та схема которую я выложил актуально работает только для аналоговых абонентов подключенных через шлюз и совершенно не работает в случае использования многоканальных SIP аппаратов. надо решить именно для SIP аппаратов.

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 19 июн 2013, 20:39

DEVICE_STATE проверяйте перед звонком, и воспроизводите файл
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 20 июн 2013, 08:45

хмм, а можно по подробнее с этого момента?
да, я естесственно забыл добавить что у меня несколько Asterisk связанные по IAX

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 20 июн 2013, 09:42

Код: Выделить всё

core show function DEVICE_STATE
Посмотрите на статусы пира когда он занят и когда свободен.
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 20 июн 2013, 11:59

как псмотреть понятно, а как обработать этот параметр?

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 20 июн 2013, 14:22

Книжку по Asterisk прочитайте.
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 16 сен 2013, 14:19

и кстати, вот она, далеко ходить не нужно: http://asteriskforum.ru/viewtopic.php?t=3690
примеры там есть.

algerka
Сообщения: 15
Зарегистрирован: 20 дек 2010, 13:45
Контактная информация:

Сообщение algerka » 16 сен 2013, 14:47

Тут тема про Asterisk GUI, зачем же отсылать на книжку в которой про этот GUI практически ничего нету.

Мне кстати, тоже такой функционал интересен.
Если кто знает как такое сделать в FreePBX - напишите пожалуйста.

bayadr
Сообщения: 132
Зарегистрирован: 21 фев 2008, 08:30
Откуда: Хабаровск

Сообщение bayadr » 20 сен 2013, 02:52

в /var/www/admin/modules/core/functions.inc.php
меняем строку в контексте $mcontext = 'macro-dial-one';

Код: Выделить всё

$ext->add&#40;$mcontext,$exten,'godial', new ext_dial&#40;'$&#123;DSTRING&#125;', '$&#123;ARG1&#125;,$&#123;D_OPTIONS&#125;'&#41;&#41;;
на

Код: Выделить всё

        $ext->add&#40;$mcontext,$exten,'godial', new ext_execif&#40;'$&#91;"$&#123;QAGENT&#125;"=""&#93;', 'Macro', 'CHECK_DEVICE_STATE,'&#41;&#41;;
        $ext->add&#40;$mcontext,$exten,'', new ext_dial&#40;'$&#123;DSTRING&#125;', '$&#123;ARG1&#125;,$&#123;D_OPTIONS&#125;'&#41;&#41;;

в extensions_custom.conf

Код: Выделить всё

&#91;macro-CHECK_DEVICE_STATE&#93;
exten => s,1,Noop&#40;DEVICE STATE - $&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Playback&#40;abonent-govorit-po-drugoi-linii&#41;&#41;

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 19 ноя 2013, 16:58

Походу заработало, спасибо.

Для решения проигрывания музыки необходимо забить в переменную D_OPTIONS=Ttm

Код: Выделить всё

&#91;macro-CHECK_DEVICE_STATE&#93;
exten => s,1,Noop&#40;DEVICE STATE - $&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Playback&#40;abonent-razgovarivaet&zhdite-soedineniya&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Set&#40;D_OPTIONS=Ttm&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "RINGINUSE"&#93;?Playback&#40;abonent-razgovarivaet&zhdite-soedineniya&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "RINGINUSE"&#93;?Set&#40;D_OPTIONS=Ttm&#41;&#41;
СЛАВА и ХВАЛА: bayadr

ЗЫ. Конечно всплыла маленькая засада, а может и фича, iPECS-MG (1.7Di). Засада с Mobile Extension, если iPECS получил Playback от Asterisk, iPECS тутже включает DN Busy и начинает гнать трафик через себя, вместо того, чтобы продолжить спокойно звонить по аппарату.

Вообще конечно прикрепить бы решение, потому что дейстительно многие спрашивают как это сделать.

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 20 ноя 2013, 12:40

Всплыла еще одна засада, с этой функцией теперь если
CW включен, а также имеется включенный Follow Me, то проверка статуса не происходит просто звонок уходит на FollowMe

есть мнение, что это сваязано с

Код: Выделить всё

    -- Executing &#91;332@from-trunk&#58;18&#93; GotoIf&#40;"IAX2/05020-2042", "1 ?skipsimple"&#41; in new stack
т.е. необходиомо использовать проверку в модуле findmefollow в блоке group dial

Код: Выделить всё

// group dial
                                        $ext->add&#40;$contextname, $grpnum, 'skipsimple', new ext_setvar&#40;'RingGroupMethod',$strategy&#41;&#41;;
                                        $ext->add&#40;$contextname, $grpnum, '', new ext_setvar&#40;'_FMGRP',$grpnum&#41;&#41;;

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 15 дек 2014, 16:53

Помогите плиз научиться брать состояние PJSIP абонентов (Asterisk 13 + FreePBX 12)
[off]и теперь явно стало сложнее изменять сами файлы php, теперь FreePBX во всю орет что у него нарушение Security, ну как бы это правильно на самом деле, но надо как-то подумать теперь как обойти изменение именно PHP.[/off]

В общем теперь изменять PHP не требуется, теперь разработчики FreePBX предусмотрели и этот вариант, воткнув обращение к недостающему от базы контексту "dialout-one-predial-hook"
т.е. в 12 FreePBX достаточно сразу воткнуть в файл extensions_custom.conf (актуально для SIP абонентов)

Код: Выделить всё

&#91;macro-dialout-one-predial-hook&#93;
exten => s,1,Noop&#40;DEVICE STATE - $&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Playback&#40;abonent-razgovarivaet&zhdite-soedineniya&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Set&#40;D_OPTIONS=Ttm&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "RINGINUSE"&#93;?Playback&#40;abonent-razgovarivaet&zhdite-soedineniya&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "RINGINUSE"&#93;?Set&#40;D_OPTIONS=Ttm&#41;&#41;
Неожиданно порадовали!

Осталось теперь научиться выяснять состояние PJSIP абонентов, ибо теперь для PJSIP абонентов идет ответ:

Код: Выделить всё

-- Executing &#91;s@macro-dialout-one-predial-hook&#58;1&#93; NoOp&#40;"SIP/011002-000000a4", "DEVICE STATE - INVALID"&#41; in new stack
хотя собственно core show hints показывает:

Код: Выделить всё

1704@ext-local      &#58; PJSIP/1704&Custom&#58;DN  State&#58;Ringing         Presence&#58;                Watchers  0
P.S. эдак теперь можно много чего в predial обработать... :)

yur4ik
Сообщения: 17
Зарегистрирован: 28 фев 2013, 16:26
Откуда: Israel

Сообщение yur4ik » 28 июл 2015, 10:25

Всем добрый день .
Подыму данную тему , все отлично работает как описано в решении Alexey_Astashov , но вот только до тех пор пока не включен Follow Me , как и писал ТС . Вопрос , как собственно заставить это работать и с включенным Follow Me .
Система FreePBX 2.11 .

baf
Сообщения: 21
Зарегистрирован: 29 июл 2013, 19:29

Сообщение baf » 20 янв 2016, 05:37

Alexey_Astashov, написал как сделать, но у меня не работает. куда копать?

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 16 фев 2016, 10:42

Для правильной работы, данной опции при включенной FollowMe - необходимо использовать тип стратегии вызова ringallv2, просто ringall (v1) - не подходит, совсем, инъекция отрабатывать не будет, так как "v1" пользуется другим набором макро.
если стоит ringallv2-prim - то Asterisk получит ошибку и не обработает макрос.

Для удобства можно выставить
Default Follow Me Ring Strategy - ringallv2

Но в целом можно поиграться с данными параметрами, так как у меня есть еще одна проблема, которую я никак решить не могу - это циклический вызов через FMC.

Сорре, что не мог написать раньше.

Added after 23 minutes:


> Alexey_Astashov, написал как сделать, но у меня не работает. куда копать?

Что у вас не работает?
какая версия FBPX?
Только вместе мы сможем сделать этот мир лучше! :)

baf
Сообщения: 21
Зарегистрирован: 29 июл 2013, 19:29

Сообщение baf » 27 июн 2016, 05:58

спасибо вам добрые люди, проверил на 12 freepbx работает. есть вопросы

Код: Выделить всё

&#91;macro-dialout-one-predial-hook&#93;
exten => s,1,Noop&#40;DEVICE STATE - $&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Playback&#40;abonent-razgovarivaet&zhdite-soedineniya&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "INUSE"&#93;?Set&#40;D_OPTIONS=Ttm&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "RINGINUSE"&#93;?Playback&#40;abonent-razgovarivaet&zhdite-soedineniya&#41;&#41;
exten => s,n,ExecIf&#40;$&#91;"$&#123;DEVICE_STATE&#40;$&#123;DSTRING&#125;&#41;&#125;" = "RINGINUSE"&#93;?Set&#40;D_OPTIONS=Ttm&#41;&#41;
INUSE и RINGINUSE чем отличаются? я так понял что возможно на них делать разные кголосовые сообщения, но чем они отличаются не понятно.
Предположу что INUSE это уже поднятая трубка, а RINGINUSE это еще кто-то звонит. Так?

И почему-то после проигрывания приветствия идет музыка, но в этом коде я не вижу где эта музыка, видимо moh, прописана. Хотя из вербоса видно, что вызывается followme ringallv2 и без разницы включен он или нет. странно. можете пояснить по подробнее?

Alexey_Astashov
Сообщения: 134
Зарегистрирован: 22 окт 2009, 16:02

Сообщение Alexey_Astashov » 27 июн 2016, 10:21

INUSE - когда разговаривает абонент, RINGINUSE - когда мало того, что абонент разговаривает, так к нему еще кто-то стучится, кроме вас всмысле, т.е. когда вы придёте третьим, четвертым итд, так как это на самом деле совсем другой статус.
В этом случае не требуется как правило делать другое оповещение, но конечно это возможно.

Музыка потому что стоит Ttm (где "T" - dtmf в один конец, "t" - dtmf в другой конец, "m" - moh, а "r" соответственно будет - ring), можно также прописать источник музыки или звуковых файлов с рекламой.
Только вместе мы сможем сделать этот мир лучше! :)

Серж
Сообщения: 1
Зарегистрирован: 02 май 2017, 08:50

Сообщение Серж » 02 май 2017, 08:54

Большое спасибо. Всё работает. Не могли бы вы подсказать, как сделать, что бы этот макро (инклюд) не выполнялся для определённых экстеншенов.

Ответить