artem
16.12.2014
16663

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

avatar
  Подписаться  
Уведомление о

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

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

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

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

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices