Asterisk: простая очередь вызовов с голосовым меню

Мы приобрели виртуальный номер 8-800. Потребовалось настроить следующую логику работы: звонок поступает на asterisk, проигрывается приветственное сообщение, далее звонок передается операторам. В случае занятости операторов абонент удерживается на линии 60 секунд, после чего, если ему все еще не ответили - предлагаем нажать 1 для того, чтобы оставить голосовое сообщение со своим вопросом и номером для обратного звонка. При звонке в нерабочее время - проигрываем сообщение о времени работы операторов, после этого кладем трубку.

Сначала подготовим файлы, запишем все возможные аудиоприветствия и скопируем полученные mp3 файлы на сервер. Я создал для этого папку /usr/share/asterisk/sounds/ru/8-800-fon.
Конвертировать аудио в формат понятный для астриска будем следующим образом, сначала конвертируем из mp3 в wav:
lame --decode greeting.mp3
и далее полученный wav файл конвертируем в ulaw с нужным битрейтом и в  mono:
sox -V greeting.wav -r 8000 -c 1 -t ul greeting.ulaw
или можно конвертировать в wav файл нужным битрейтом и в  mono, как вам больше нравится:
sox greeting.wav -r 8000 -c 1 greeting.wav
Полученный .ulaw файл подойдет. Все остальные файлы конвертируем подобным образом.

Вторым шагом настроим транк для нового номера. Открываем /etc/asterisk/sip.conf и добавляем секцию для нового транка, примерно так:
[Ваш-ID]
host=IP адрес sip-сервера провайдера
port=5060
username=ваш-ID
secret=ваш-пароль
context=8-800 ;  сюда будет приходить звонок
type=peer
qualify=yes
nat=no
insecure=port,invite
dtmfmode=rfc2833
defaultuser=ваш-ID
canreinvite=no
disallow=all
allow=alaw
allow=ulaw
Теперь перейдем к настройкам диалплана. Открываем /etc/asterisk/extensions.conf и добавляем новый контекст:
[8-800]
;если рабочие часы, прыгаем на метку work
exten => s,1,GotoIfTime(9:00-19:00,mon-fri,*,*?work)
;в противном случае поднимаем трубку
exten => s,n,Answer
;проигрываем сообщение когда можно перезвонить
exten => s,n,Playback(./8-800-fon/non-working-period)
;положить трубку
exten => s,n,Hangup()
;в случае звонка в рабочее время
exten => s(work),1,NoOp(Звонок на номер 8-800-XXX-XXXX)
exten => s,n,NoOp(Входящий номер: +7${CALLERID(num)})
;проигрываем сообщение
exten => s,n,Answer
exten => s,n,Playback(./8-800-fon/greeting)
;задаем класс для музыки в очереди, сам класс опишем в файле /etc/asterisk/musiconhold.conf
exten => s,n,Set(CHANNEL(musicclass)=8-800-hold)
;направляем в очередь на 60 секунд
exten => s,n,Queue(8-800-shop,t,,,60)
;при выходе из очереди по таймауту предлагаем оставить голосовое сообщение
exten => s,n,Background(./8-800-fon/voice-message)
;ждем 10 секунд ввода добавочного номера
;тут нужно уточнить, 10 секунд - это вместе с сообщением,
;т.к. мы используем Background, увеличим время 10+10 секунд
exten => s,n,WaitExten(20)
;если нажали 1 переходим к заказу звонка
exten => 1,1,Voicemail(101,s)
exten => 1,n,Playback(voice-mail-bye)
exten => 1,n,Hangup
;либо прощаемся и вешаем трубку
;по неправильному набору
exten => i,1,Playback(bye)
exten => i,n,Hangup
;по таймауту
exten => t,1,Playback(bye)
exten => t,n,Hangup
Теперь касательно музыки на удержании пока абонент в очереди. Мы задали свой класс для музыки: 8-800-hold. Создадим папку /usr/share/asterisk/sounds/ru/8-800-fon/queues и положим туда файл или несколько. В случае, если файлов несколько они будут проигрываться поочередно. Сам класс мы опишем в файле /etc/asterisk/musiconhold.conf:
[8-800-hold]
mode=files
directory=/usr/share/asterisk/sounds/ru/8-800-fon/queues
Далее добавляем очередь для операторов в файл, тут описываем каким операторам и как будут распределяться звонки /etc/asterisk/queues.conf:
[8-800-shop]
;отключаем анонсы о времени ожидания абонента
announce-holdtime = no
;максимальное количество абонентов в очереди,(0 - без ограничений)
maxlen = 10
;звоним на все номера, либо в порядке приоритета
strategy = ringall
;разрешать входить в очередь даже в том случае, если все операторы не доступны
joinempty = yes
;у нас есть основной оператор и еще один на подстраховке,
;звонок поступает основному и только если он занят, падает второму
;описываем номера и приоритет
member => SIP/101,1
member => SIP/102,2
Последний шаг - настройка голосовой почты. В диалплане мы указали ящик для оператора с номером 101. Для того, чтобы присвоить ему почтовый адрес нужно внести изменения в файл /etc/asterisk/voicemail.conf. Также в этом файле следует задать способ отправки сообщения. Если используется клиент отличный от sendmain, потребуется изменить значения mailcmd в секции genera. Там же можно поменять текст сообщения и указать кодировку utf8:
[general]
charset=UTF-8
mailcmd=/usr/sbin/sendmail -t
emailsubject=[PBX]: Новое сообщение ${VM_MSGNUM} в ящике ${VM_MAILBOX}
emailbody=Уважаемый(ая) ${VM_NAME}:\n\n\ Для вас было оставлено сообщение длиной ${VM_DUR} под номером ${VM_MSGNUM}\n в ящике ${VM_MAILBOX} от номера
+7${VM_CALLERID}, on ${VM_DATE}. \n\n\t\t\t\t--Asterisk\n
[default]
101 => 101, Manager, manager@mail.ru,,attach=yes
В целом этого достаточно. Перезапускаем астериск и проверяем.

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

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