artem
16.12.2014
34261

3-х (и более) сторонний вызов в Asterisk с использованием ConfBridge

В данной статье описана настройка n-стороннего вызова в Asterisk с использованием ConfBridge.
Статья является адаптацией решения с voip-info.org  для работы с ConfBridge (более новое, чем MeetMe, приложение Asterisk для конференц-связи, к тому же, не зависящее от DAHDI).

Для работы данной схемы у Asterisk должны быть собраны модули app_confbridge.so и chan_bridge.so. Инструкция написана для CentOS 6 и Asterisk 11

Описание

К сервисным кодам Asterisk добавляется код *0 (его нужно описать в файле features.conf и добавить в переменную DYNAMIC_FEATURES). Сервисный код *0 вызывает выполнение макроса nway-start, который создает конференцию с именем как UNIQUEID у текущего вызова и перенаправляет в созданную конференцию абонента, не являющегося инициатором конференции. После этого абонент, начавший конференцию, получает возможность добавить в конференцию 3-го участника.

Абоненту, добавляющему к конференции нового участника, доступны следующие сервисные коды:

** - прекратить вызов, не добавлять вызываемого абонента к конференции
# - добавить вызываемого абонента к конференции

После выполнения любого из этих сервисных кодов, абонент, добавлявший нового участника, сам возвращается в конференцию.
Всем абонентам, находящимся в конференции, доступен сервисный код *0. После выполнения этого кода, абонент покидает конференцию, получает возможность добавить участника к конференции, после чего, возвращается обратно в конференцию.
Количество одновременных n-сторонних вызовов и их участников ограничено только производительностью сервера.

Настройка

1) Настройки ConfBridge:

confbridge.conf

[default_user]
type = user
  [default_user]
type = user
  [nway_menu]
type = menu
*0 = leave_conference

2) Диалплан:

extensions.conf

[macro-nway-ok]
exten => s,1,ChannelRedirect(${BRIDGEPEER},nway-conf,${CONFNO},1)
  [nway-invite]
exten => s,1,Read(NEW_CALLEE,dial,20,i)
; Add dynamic features for n-way invite
same => n,Set(DYNAMIC_FEATURES=${DYNAMIC_FEATURES_NWAYINV})
; Determine dialing context and dial
same => n,ExecIf($[${REGEX("H" ${DIAL_OPTIONS})} = 0]?Set(_DIAL_OPTIONS=${DIAL_OPTIONS}H))
same => n,Set(CALLER=${CALLERID(num)})
same => n,Set(DIALOUT_CONTEXT=${SIPPEER(${CALLER},context)})
same => n,ExecIf($["${DIALOUT_CONTEXT}" = ""]?Set(DIALOUT_CONTEXT=from-internal))
same => n,Dial(Local/${NEW_CALLEE}@from-internal,,gH)
same => n,Set(DYNAMIC_FEATURES=${DYNAMIC_FEATURES_NWAY})
same => n,ChannelRedirect(${CHANNEL(name)},nway-conf,${CONFNO},1)
  [nway-conf]
exten => _X.,1,Answer
same => n,Set(__CONFNO=${EXTEN})
same => n,Set(DYNAMIC_FEATURES=${DYNAMIC_FEATURES_NWAY})
same => n,Set(CONFBRIDGE(bridge,language)=${CHANNEL(language)})
same => n,Set(CONFBRIDGE(user,announce_user_count)=no)
same => n,Set(CONFBRIDGE(user,announce_join_leave)=no)
same => n,Set(CONFBRIDGE(user,announce_only_user)=no)
same => n,Set(CONFBRIDGE(user,music_on_hold_when_empty)=yes)
same => n,ConfBridge(${CONFNO},,,nway_menu)
same => n,Goto(nway-invite,s,1)  
[macro-nway-start]
exten => s,1,Set(__CONFNO=${UNIQUEID})
same => n,ChannelRedirect(${BRIDGEPEER},nway-conf,${CONFNO},1)
same => n,Read(NEW_CALLEE,dial,20,i)
; Add dynamic features for n-way invite
same => n,Set(DYNAMIC_FEATURES=${DYNAMIC_FEATURES_NWAYINV})
; Determine dialing context and dial
same => n,ExecIf($[${REGEX("H" ${DIAL_OPTIONS})} = 0]?Set(_DIAL_OPTIONS=${DIAL_OPTIONS}H))
same => n,Set(CALLER=${CALLERID(num)})
same => n,Set(DIALOUT_CONTEXT=${SIPPEER(${CALLER},context)})
same => n,ExecIf($["${DIALOUT_CONTEXT}" = ""]?Set(DIALOUT_CONTEXT=from-internal))
same => n,Dial(Local/${NEW_CALLEE}@${DIALOUT_CONTEXT},,gH)
same => n,Set(DYNAMIC_FEATURES=${DYNAMIC_FEATURES_NWAY})<
same => n,ChannelRedirect(${CHANNEL(name)},nway-conf,${CONFNO},1)

3) Сервисные коды Asterisk:

features.conf

[featuremap]
disconnect=**
  [applicationmap]
nway-start => *0,self,Macro,nway-start
nway-ok => #,self/caller,Macro,nway-ok>

extensions.conf

[globals]
DYNAMIC_FEATURES = feature1#feature2#nway-start
DYNAMIC_FEATURES_NWAY = feature1
DYNAMIC_FEATURES_NWAYINV = feature2#nway-ok

Здесь:

disconnect — стандартный сервисный код Asterisk, вызывающий завершение текущего вызова.
feature1, feature2 — другие пользовательские сервисные коды, настроенные на Asterisk (на разных этапах конференции можно делать доступными разные сервисные коды)
DYNAMIC_FEATURES_NWAY — сервисные коды, доступные во время n-стороннего вызова
DYNAMIC_FEATURES_NWAYINV — сервисные коды, доступные во время приглашения в n-сторонний вызов

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Александр
Александр
08.04.2020 10:24

Сделал все четко по статье, перезагрузил asterisk — не работает. Звонок с 102 на 101, ответ, *0 — перевод в конференцию. Звонок с 102 на 103, перевод через # не работает. В логах: [Apr 8 10:11:46] WARNING[6175][C-00000012]: features_config.c:1366 ast_get_chan_applicationmap: Unknown DYNAMIC_FEATURES item ‘feature1’ on channel SIP/102-0000001e. [Apr 8 10:11:46] WARNING[6175][C-00000012]: features_config.c:1366 ast_get_chan_applicationmap: Unknown DYNAMIC_FEATURES item ‘feature2’ on channel SIP/102-0000001e. [Apr 8 10:11:46] WARNING[6176][C-00000012]: features_config.c:1366 ast_get_chan_applicationmap: Unknown DYNAMIC_FEATURES item ‘feature1’ on channel SIP/101-0000001f. [Apr 8 10:11:46] WARNING[6176][C-00000012]: features_config.c:1366 ast_get_chan_applicationmap: Unknown DYNAMIC_FEATURES item ‘feature2’ on channel SIP/101-0000001f. — Channel SIP/101-0000001f joined ‘simple_bridge’ basic-bridge [Apr 8 10:11:46] WARNING[6175][C-00000012]: features_config.c:1366 ast_get_chan_applicationmap: Unknown DYNAMIC_FEATURES item… Подробнее »

Сергей Грушко
Администратор
08.04.2020 11:24
Ответить на  Александр

Сервисные коды feature1 и feature2 приведены в статье просто для примера, — чтобы продемонстрировать, что на разных этапах 3-х стороннего вызова можно делать доступными разные сервисные коды.
feature1 и feature2 можно просто убрать или указать вместо них любое количество других сервисных кодов, которые есть непосредственно на Asterisk, на котором выполняется настройка (с сохранением синтаксиса DYNAMIC_FEATURES).

Василий
Василий
15.12.2020 18:04

Не работает на asterisk 13 и выше. Имеется много жалоб на форумах, но решения нет.

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

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

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.