Задача: сделать чтобы люди могли звонить по многоканальному городскому номеру, выбирать район своего проживания, выбирать службу к которой относится данное обращение и потом записать сообщение о, скажем разбитых фонарях на улице, или о протекшем водопроводе во дворе и тому подобных проблемах. Данное сообщение передается в нужные органы которые будут заниматься устранением данной проблемы.
При решении данной задачи был максимально использован функционал системы FreePBX, чтобы было удобнее менять что либо при изменении структуры меню и т.п.
Интересующихся как это работает прошу под кат.
У меня использовалась сборка Elastix, FreePBX был обновлен через веб интерфейс до версии FreePBX 2.10.1.4.
Итак нам понадобится транк чтобы добыть номер и линии. У нас был маленький провайдер Farline. Поэтому опишу настройки для него. В меню FreePBX заходим Connectivity>Trunks>Add SIP trunk и начинаем заполнять:
Trunk Name: имя транка
Outbound CallerID: номер телефона который требует провайдер (тут он всего 1) XXXXXX
В Outgoing Settings>Trunk Name: Имя транка
PEER Details:
host=sip.farline.net
username=логин даёт провайдер
secret=пароль тоже даёт провайдер
type=peer
qualify=no
disallow=all
allow=ulaw
canreinvite=no
nat=yes
fromuser=тут тоже логин
fromdomain=тут белый айпишник с которого выходит в интернет ваш Астериск
insecure=invite
Incoming Settings:
USER Context: Имя транка
USER Details:
host=sip.farline.net
username=логин провайдера
secret=пароль даёт провайдер
type=user
В поле регистрации вписываем:
логин:пароль@sip.farline.net/логин
Всё, транк у нас настроен и линии работают.
Создаём один телефончик для тестов и проверок. Applications>Extensions>Submit
Вводим User Extension — допустим 100, Display Name — Имя, secret — пароль и нажимаем Submit. Далее устанавливаем любой SIP клиент на свой вкус, и в его настройках указываем ip адреса Астериска, 100 — как логин и пароль который указали ранее. Теперь можно приступать к записи.
Для голосового меню нам понадобятся записи, причем в большом количество, советую набросать схему как это будет работать и продумать сколько записей будет нужно. Для создания записей удобно воспользоваться Admin>System Recordings, там после надписи «If you wish to make and verify recordings from your phone, please enter your extension number here:» вводим номер своего программного телефона 100 и жмём Go. Теперь позвонив на номер *77 с телефона и следуя голосовым подсказкам можно записать сообщение. Потом вписать в поле Name this Recording — название записи и сохранить. Дальше в том же духе.
Кстати если ваши голосовые данные не отличаюся мелодичностью и в итоге записи будет делать девушка — профессионал, то стоит также обезопасить себя от долгого и нудного процесса по их переделке. Сделать это можно зайдя в запись справа в списке и поставив галочку Optional Feature Code, после недолгого раздумья Астериск выдаст номер типа *295 и потом можно сохранять. Позвонив на этот номер система даст возможность прослушать данную запись, перезаписать и сохранить её на горячую. В последствии вы можете составить список записей и табличку какая из них к какому пункту относится, потом посадить девушку — профессионала за компьютер, дать ей микрофон с наушниками и настроить SIP клиент. Теперь она может вооружившись этими вещами и «хотелками» начальства сама менять все записи согласно табличке соответствия номера телефона для смены записи и её местанахождения в структуре. Это сильно облегчит работу. По поводу качества записи хочу сказать одно — если микрофон нормальный, то качество записи будет тоже вполне сносным. Студийные записи особого смысла не имеют т.к. через простой телефон вы этого все равно не сможете оценить.
Теперь надо бы создать приветствие, которое будет произноситься когда люди звонят на данный телефон.
Заходим Applications> Announcement и вписываем:
Description: имя приветствия, Recording: выбор записи из списка, ну и Destination after playback: куда пойдёт звонок после приветствия, у нас это будет IVR который мы с вами ещё не создали.
Создаём IVR, заходим Applications>IVR>Add new IVR и заполняем нужные вам поля, в подсказках вполне понятно написано что есть что. Либо можно почитать про это в моей статье. Снизу выбираем какую кнопку нажать (Ext), и куда будет попадать абонент после нажатия данной кнопки.
Схему меню можно делать сколько угодно разветвлённой, дальше опишу нюансы использования данной системы у меня. Если читатель помнит задачу, то нам надо организовать запись сообщения которую потом будут прослушивать ответственные лица, да и желательно чтобы данным лицам пришел email с напоминанием что запись поступила и её можно прослушать по «такому то» адресу. Пойдя по простому пути с использованием готового функционала, будем пользоваться не совсем стандартными подходами.
Заходим в Extensions и создаём их количество — равное количеству служб, в которые будет приходить сообщение, у меня вышло 11 штук. Пароли можно указывать любые т.к. мы в них даже заходить не будем. Но обязательно в разделе каждого Voicemail ставим статус Enabled и задаём пароль ящика почты, и конечно Email address на который будет высылаться сообщение(причем оно может высылать файлы самих записей, но данный функционал мы не использовали, чтобы не перегружать почту, галочка есть в настройках самого почтового ящика Voicemail).
Теперь повесив в конце IVR этот Extension, он, естественно, будет выключен и звонок попадёт на голосовую почту. Теперь будем заниматься решением проблем.
Проблема номер 1. У заказчика был сервер Microsoft Exchange и его решили использовать в качестве шлюза, чтобы письма шли не напрямую от Астериска. Чтобы этого добиться нам нужно прописать в конфиге /etc/postfix/main.cf (У меня стоит сборка Elastix и тут установлен именно postfix) параметр relayhost = ip адрес: порт. Данная проблема решена.
Проблема номер 2. В сообщении которое приходит на почту вам может не понравиться английский текст, либо же нужно будет сменить ссылку по которой надо заходить в кабинет Voicemail-а, если вы его опубликуете. Поэтому заходим в шаблон /etc/asterisk/vm_email.inc и редактируем себе на здоровье то — что нужно присылать.
Либо вы можете зайти в Settings> Voicemail admin>Settings и там подредактировать тоже самое через веб интерфейс FreePBX. Кстати тут же выставляется в поле format через разделитель "|" форматы в которых будет храниться голосовая почта, этим я пользовался чтобы подменять записи, тоесть можно туда прописать wav49|wav|ulaw|gsm, и каждое сообщение принятое на голосовую почту будет храниться сразу во всех этих форматах. Нужно для решения проблемы номер 3.
Проблема номер 3 и сразу же 4. Одно исходило из другого поэтому опишу все сразу. Заказчик поставил задачу — чтобы в некотрых пунктах меню сообщения дублировались на несколько организаций, к примеру районное ЖЭО и Водоканал. Данную проблему можно решить используя группы Voicemail Blasting. Там можно сгруппировать несколько ящиков в одну группу, и на неё будут приходить записи, причем физически они будут храниться в одном экземпляре, а во втором ящике будет просто ссылка на файл. Плюс тут можно выбрать пункт Beep Only — No confirmation, тоесть после истечения времени ожидания в 3 секунды(установлено в IVR), после сообщения в голосовом меню IVR, попадает на группу Voicemail Blasting. При оригинальном Voicemail у меня не получилось, чтобы после проговаривания приветствия на пункте IVR, через 3 секунды звучал сигнал и сразу шла запись. Поэтому я переделал всё на группы, даже одиночные ящики(задав в группе Voicemail Blasting всего 1 ящик).
Потом проявляется проблемка, правда в небольшом объёме, после записи Астериск начинает по английски разговаривать с клиентом предлагая прослушать запись, сохранить или перезаписать, если положить трубку то запись всё равно создается и отправляется писмо на почту, но функционал решено было оставить. Накатывание на сервак русских голосовых файлов помогло мало, из за того, что голос в файлах отличался от всего остального меню. Решили перезаписать эти файлы. Но тут нюанс — некотрые храняться только в формате gsm, некотрые в формате ulaw, и где то в конфигах прописаны именно такие форматы файлов, следовательно менять формат так просто не получится, и я решил что легче подменить звуковые файлы, чем править конфиги FreePBX. Тут то нам и поможет решение с форматами записи в конфиге Voicemail-а. Выставляем там все форматы сразу, как я писал в предыдущем пункте. Потом делаем сделующее. Звоним в эту почту и во время звонка смотрим в консоль Астериска, там будет видно какие файлы он запускает. Выписываем эти файлы и запоминаем текст который в них говориться, их там всего около 5 штук. Потом запустив поиск смотрим где они лежат. Сразу даю подсказку это будет скорее всего /var/lib/asterisk/sounds/ и там уже могут лежать в папках типа en или ru, в зависимости от того какой язык задан.
Вобщем звоним в голосовую почту, заставляем девушку — профессионала произнести нужную фразу, смотрим в консоли какой номер файла в записи и в какой почтовый ящик упало(у меня записи в почтовых ящиках хранятся в /var/spool/asterisk/voicemail/default/номер extensions/INBOX/), и подменяем данным файлом нужного формата — тот файл что вы нашли. Всё. Теперь у вас будут свои файлы с нужным вам голосом. Операция на самом деле занимает минут 15, писать дольше чем делать.
Проблема номер 5. Места на серваке маловато, а файлов с обращениями много. Значит надо их хранить где то ещё. У заказчика оказался сервер с Windows server 2008 и винтами в Raid — решили хранить там. На Windows расшариваем папку, создаём юзера под которым будем с ней работать и даём этому юзеру по сети полный доступ на эту папку. Теперь надо примонтировать её в Астериск.
Чтобы она монтировалась сразу при загрузке я прописал монтирование в /etc/fstab. Выглядит строчка так:
//ip-сервера_с_Windows/Папка_в_которую_кладём /куда_монтировать_в_Астериске/Папка_с_записями cifs username=домен_если_надо/Имя_пользователя,password=пароль 0 0
Теперь при загрузке у нас шара из Windows монтируется на Астериск, надо перенести туда записи разговоров. Менять конфиги Астериска не будем, и просто пропишем симлинк:
ln -s /куда_монтировали_в_Астериске/Папка_с_записями /var/spool/asterisk/voicemail/default
Собственно теперь всё готово. Записи можно просматривать с Windows Server, и физически они лежат там.
Вход в интерфейс с записями находиться по адресу https://ip-адрес-Asterisk/recordings/
. Вход туда происходит используя номер extension и пароль для Voicemail, который задаётся в настройках extension.
Резюмируя все наши действия — что мы получили: Люди звонят на номер, слушают приветствие с предупреждением о записи разговора, выбирают свой район и нужную службу, диктуют сообщение (даже если посередине бросить трубку — оно все равно запишется), после этого на почту организации исполнителя приходит письмо, используя шлюз Microsoft Exchange, в котором сообщается что поступило новое обращение, с какого номера, его длительность и ссылка по которой нужно зайти чтобы его прослушать. Оттуда же его можно сохранить к себе на компьютер, если есть такая необходимость.
Автор: MotjaX