Отложенный вызов на Астериск

в 10:20, , рубрики: asterisk, метки:

Проблема стара как АТС Панасоник в вашем офисе. Если она, конечно, еще есть.
При внедрении Астериска работники с опытом всегда хотят оставить прежний набор функционала АТС, которым они привыкли пользоваться. И одной из киллер-фич Панасоника была «6-ка» — отложенный вызов.

«Я ему звоню, а у него 'занято'! Дык, я тогда хоп '6' жму и трубку ложу, а как он освободится так и АТСка мне перезвонит» — с удовольствием рассказывает Михалыч, наш завсклада. «А твоя чудо-машина может?»

Оу, а неужели Астериск умеет делать «6»-ку из коробки? Далее будет развернутый положительный ответ на данный вопрос с еще небольшим количеством баек.

Так вот недавно попалась книга Asterisk CookBook. Поделился ею с коллегой. Вместе с ним мы хмыкнули, что многие рецепты мы уже давно освоили самостоятельно, да и книжка небольшая, что в ней может быть нового и полезного?

Но после выходных коллега загадочно улыбнулся и сказал: «CCSS!»

В Астериске 1.8 разработчики реализовали Call Completion Supplementary Service. Когда я листал книгу, то не обратил внимания, т.к. подумал, что за этим возможно скрыта реализация каких-то фишек для ISDN.

Однако за этим громким названием стоит аккуратная архитектура, которую желающие могут глянуть в этом PDF (и там вправду есть про ISDN: ).

А я перейду к применению на примере из официальной документации

Настройки пиров
sip.conf
[Mark]
context=phone_calls
cc_agent_policy=generic
cc_monitor_policy=generic 
 
[Richard]
context=phone_calls
cc_agent_policy=generic
cc_monitor_policy=generic

Настройка dialplan'а
[phone_calls]
exten => 1000,1,Dial(SIP/Mark,20)
exten => 1000,n,Hangup
exten => 2000,1,Dial(SIP/Richard,20)
exten => 2000,n,Hangup
exten => 30,1,CallCompletionRequest
exten => 30,n,Hangup
exten => 31,1,CallCompletionCancel
exten => 31,n,Hangup

И все! Почти: ) Гораздо меньше изобретаемых велосипедов на форумах (линк)

Но, есть один нюанс. На АТС Панасоник мы нажимали «6» после того как услышали гудки «занято», но до того как повесили трубку, затем повешали трубку и стали дожидаться отложенного вызова от АТС.

В случае с Астериском ситуация выглядит так: позвонили, услышали «занято», повесили трубку, подняли трубку, набрали код заказа звонка на занятого абонента (в примере «30»), положили трубку, дождались вызова от Астериска. В примере диалплана не хватает сообщения типа «Звонок на занятого абонента заказан».

Полагаю кодом отмены (в примере «31») особо никто напрягаться не будет. Но можно отменить заказ на вызов занятого абонента.

Дополнительно из полезных опций может быть для пира:
cc_max_agents — максимальное количество следящих за ваши пиром
cc_max_monitors — максимально количество за кем вы можете следить
cc_recall_timer — время звонка при перезвоне со стороны Астериска вам при заказе услуги

Для использующих realtime вообще все аккуратно решается добавлением полей в БД.

Для мониторинга текущего состояния по использованию CCSS в CLI: cc report status

В конфигурационном файле ccss.conf можно указать дополнительную настройку: максимальное количество следящих товарищей max_cc_agents. Там же есть описание всех параметров и их возможных значений.

Также стоит отметить, что занятым телефон не будет (а нам это надо по условиям задачи), если у него есть возможность принять второй вызов. Для ограничения каналов на пир можно воспользоваться call-limit и/или отключить Call Waiting на аппарате.

В общем, Михалыч остался крайне доволен включением 6-ки на Астериске, подобрел и рассказывал, как он электрокаре по оборонному заводу в свое время рассекал.

P.S. В комментариях прошу поделиться опытом эксплуатации данного функционала, мнением о стабильности работы, найденных особенностях поведения.

Автор: antirek

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js