Не так давно, мы отказались от использования Skype, как средства корпоративной связи, в пользу Telegram. Однако, Skype имел на борту одну очень полезную штуку — аудио/видео конференции. Как уже упоминалось в предыдущих статьях, за связь у нас отвечает Asterisk, но пока он работал в минимальной конфигурации (не считая создания задач в redmine о пропущенных вызовах) и мы решили прикрутить возможность конференц связи.
Началось все с того, что срочно потребовалось собрать конференцию с клиентом и в тот раз пришлось воспользоваться услугами сторонних компаний. А ведь хотелось бы иметь свое, как говорится с блэк джеком и прочими прелестями!
И так, собрать конференцию в Asterisk — проще простого! Достаточно вызвать AppConfBridge:
context conference {
100 => ConfBridge(sb);
}
Описывать confbridge.conf и все возможные параметры мы не будем, все это можно посмотреть, например тут voip.rus.net/tiki-index.php?page=Asterisk+ConfBridge
Для того, чтобы просто пообщаться голосом с коллегами, этого вполне достаточно.
А теперь добавим в конференцию админа, и возможность приглашать клиентов.
1) Перманентные админы (Руководство всегда хочет быть во главе)
Используем для этого базу данных AstDB.
database put conference 51 1
Где 51 — внутренний номер одного из сотрудников.
И теперь вызов нашей конференции будет выглядеть так
context conference {
100 => {
Set(STATUS_ADMIN=${DB(conference/${CALLERID(num)})});
switch (${STATUS_ADMIN}) {
case 1:
Set(CONFBRIDGE(bridge,template)=sb_profile)
Set(CONFBRIDGE(user,template)=sb_admin)
Set(CONFBRIDGE(menu,template)=admin_menu)
break;
default:
Set(CONFBRIDGE(bridge,template)=sb_profile)
Set(CONFBRIDGE(user,template)=sb_user)
Set(CONFBRIDGE(menu,template)=user_menu)
break;
};
Confbridge(sb);
};
}
Что мы получили: если номер конференции набирает абонент с clid 51, то для него устанавливатеся темплейт и меню администратора конференции, всем остальным не даем привилегий.
Но как быть, если конференцию собирает кто то из младших админов? Повышаем первого вошедшего в комнату:
...
100 => {
Answer;
Set(STATUS_ADMIN=${DB(conference/${CALLERID(num)})});
if ("${CONFBRIDGE_INFO(parties,sb)}"="0"){
Set(STATUS_ADMIN=1);
};
switch (${STATUS_ADMIN}) {
case 1:
...
${CONFBRIDGE_INFO(parties,sb)} — отдает количество участников. Если в конференции их 0, то первый участник становится админом.
Но не всегда удобно говорить по телефону, особенно, если речь идет о конференции с разработчиками, где нужны обе руки. Заводить SIP учетки для разработчиков наших клиентов было бы не правильным, потому будем использовать webrtc.
Много было статей по настройке, с предложениями пропатчить asterisk, но в 13 версии все работает из коробки. Нужно лишь сгенерировать сертификаты и в включить поддержку сокетов.
Скрипт для генерации сертификатов можно найти в исходниках или скачать отдельно: raw.github.com/rillian/asterisk-opus/master/contrib/scripts/ast_tls_cert
mkdir /etc/asterisk/keys
/usr/src/asterisk-13/contrib/scripts/ast_tls_cert -C asterisk.southbridge.ru -O "centos admin" -d /etc/asterisk/keys
http.conf:
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
RTP
Так как все мы частенько сидим за натом, включаем поддержку ice и stun, иначе голос нас не найдет
rtp.conf:
[general]
rtpstart=10000
rtpend=20000
icesupport=yes
stunaddr=stun.l.google.com:19302
SIP. Настройка пиров
Активируем websocket и создаем пир
sip.conf:
[general]
udpbindaddr=0.0.0.0:5060
realm=pbx.domain.ru ; заменить на свой ИП или на доменное имя сервера с астериском.
transport=udp,ws
[webrtc](!)
host=dynamic
context=from-internal
type=friend
encryption=yes
avpf=yes
force_avp=yes
icesupport=yes
nat=force_rport,comedia
directmedia=no
disallow=all
qualify=yes
videosupport=yes
allow=ulaw,alaw,vp8,h264,h263p,mpeg4
dtlsenable=yes
dtlsverify=no
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlscafile=/etc/asterisk/keys/ca.crt
dtlssetup=actpass ; Пароль сертификата
[101](webrtc)
defaultusername=101
secret=101Passw0rd
На github можно найти множество sip клиентов, например этот github.com/onsip/sipjs-examples
Все, теперь собираем конференцию, даем ссылку клиенту на софтфон с одной кнопкой «Присоединиться к конференции» и все счастливы.
Можно еще попробовать прикрутить сервисы гугла, для распознавания речи и стенографии разговора в архив тикета, но это уже другая история.
Автор: системный администратор компании Centos-admin.ru artzcom.
vetash
Интересно, спасибо!
>Можно еще попробовать прикрутить сервисы гугла, для распознавания речи и стенографии разговора в архив тикета, но…
Можете рассказать поподробнее? Думаю многим бы пригодилось.
akhaustov
Хорошо. Ждите в следующий статьях.
arheops
… но распознавание 8khz звука сервисами гугла — отвратительное.