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-сторонний вызов

Остались вопросы?
Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.
Сделал все четко по статье, перезагрузил 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… Подробнее »
Сервисные коды feature1 и feature2 приведены в статье просто для примера, — чтобы продемонстрировать, что на разных этапах 3-х стороннего вызова можно делать доступными разные сервисные коды.
feature1 и feature2 можно просто убрать или указать вместо них любое количество других сервисных кодов, которые есть непосредственно на Asterisk, на котором выполняется настройка (с сохранением синтаксиса DYNAMIC_FEATURES).
Не работает на asterisk 13 и выше. Имеется много жалоб на форумах, но решения нет.