10 июля 2015 г.

Астериск (FreePBX): Делаем селекторную связь.

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

Первый пришедший в голову вариант использования встроенного функционала Conference сотрудников данного предприятия не устроил по причине того, что для присоединения к конференции необходимо ж таки набрать ее номер, а это для них тяжело\бла-бла\все такое ...
Так же, директор хотел лично контролировать, кто и когда присоединился к конференции.

В результате был решено использовать слегка допиленный встроенный вариант.

В первую очередь был поставлен модуль FreePBX - Custom Context. С его помощью был сделан кастомный контекст: открываем
Custom Context, жмем Add Custom Context. В верхнее поле Context вписываем название контекста, в данном случае Selector. Опции ниже заполняем по своему усмотрению. Опции, выделенные красным, желательно оставить в Deny. Сохраняем все это дело. Так как данный контекст сделан из веб-морды FreePBX , то напрямую его редактировать в файле нельзя, так как конфигурационные файлы FreePBX генерируются из базы и все изменения потеряются. Что бы такого не произошло, открываем специальный файл extensions_custom.conf, как раз предназначенный для ручного изменения диалплана.
В нем создаем следующий контекст:

--------------------------------------------------------------------------
[Selector-custom]
exten => _999,1,Answer()
exten => _999,n,System(/var/lib/asterisk/bin/selector.sh < /var/spool/asterisk/director.list)
exten => _999,n,MeetMe(998,,Ir)

--------------------------------------------------------------------------


Обратите внимание на слово
Selector в начала данного контекста. Это должно быть то же самое название, что и в созданном ранее Custom Context.
Что происходит в данном контексте ?  При наборе номера 999 вызывается шелл скрипт, после чего создается конференция с номером 998.

Для того, что бы этот самый номер 999 был рабочим, необходимо сделать следующее:
Создаем Misc Application с именем Selector. В поле Feature Code вписываем номер селектора 999. В качестве Destination выбираем "Custom Context"- "Selector".

Создаем Conference с номером 998.
Из  опций ставим User join/leave: и Record Conference: если необходимо.

Далее заходим по ссш на сервер телефонии и создаем два файла: 

/var/lib/asterisk/bin/selector.sh

--------------------------------------------------------------------------
 #!/bin/sh

while read number; do

cat <<EOF  >  /var/spool/asterisk/tmp/$number
Channel: Local/$number@from-internal
Callerid: "SELECTOR" <998>
MaxRetries: 1
RetryTime: 20
WaitTime: 30
Context: Selector
Extension: 998
Priority: 1
Set: CDR(userfield)=\${REASON}
EOF

    chown asterisk:asterisk /var/spool/asterisk/tmp/$number
    mv /var/spool/asterisk/tmp/$number /var/spool/asterisk/outgoing

    echo "$number"
    number=`expr $number + 1`

done

exit 0

--------------------------------------------------------------------------

/var/spool/asterisk/director.list
 в нем просто перечисляем все номера, которые будут автоматически прозваниваться для подключению к селектору.
--------------------------------------------------------------------------
100
130
212
220

-------------------------------------------------------------------------- 

Итак, как это все работает:
Директор приходит на свое рабочее место, набирает 999 и включает громкую связь на своем телефоне. В этот момент скрипт создает call-файлы для всех номеров, перечисленных в файле  director.list и перемещает их в исходящую очередь астериска. Астериск добросовестно начинает звонить по всем номерам. САМ. Как того и требовали сотрудники вышеупомянутого предприятия. Сотрудник, к кому пришел звонок, просто поднимает трубку, называет свою фамилию и присоединяется к конференции. Все уже подключившиеся и директор в том числе, слышат, кто вошел в конферецию.



Комментариев нет:

Отправить комментарий