Данная статья является продолжением статьи по установке системы.
Наконец тем или иным образом у нас появился установленный Asterisk и FreePBX.
Опишу ситуацию немного подробнее для сравнения подойдет ли Вам наша схема работы. Мы небольшой интернет провайдер, нам нужна запись разговоров, очереди звонков на городские и мобильные телефоны, голосовое меню рассказывающее про акции с выбором в какой отдел попасть, и возможность быстро поставить перед всем этим сообщение об авариях на определенных улицах города, чтобы люди не перенапрягали тех поддержку, причем желательно бесплатно. Чтобы не покупать дорогие шлюзы мы решили сменить городские телефонные номера и купить пару номеров + десяток каналов у провайдера ip-телефонии. Кто то скажет что это ненадёжно и т.д. Только скажите- какая разница интернет провайдеру на городские телефоны, если у него упал весь интернет? Зато это дешево. Подключение нам обошлось всего то в 38 $, каждый телефонный номер в 2$ и линия в 1,2$ в месяц. После чего мы получили настройки даже без авторизации и к нашему ip адресу привязали аккаунт. Сразу хотелось бы оговорить как будет построена эта статья, чтобы не перегружать её тоннами скринов я опишу создание каждого элемента по одному разу(что советую проделать т.к. они понадобятся для ваших же последующих экспериментов), а потом уже распишу схему что на что ссылается в нашей схеме работы. Наверняка схема у вас будет другая, но зато сможете понять смысл. Описывать буду только те элементы, которые непосредственно понадобились при настройке.
Теперь самое время завести транк:
Для наглядности я буду писать на английском т.к. интерфейс переведен кусками и достаточно загадочно. Заходим в Connectivity> Trunks > Add SIP Trunk.
В правом углу будет список уже созданных вами транков. Открыв новый я заполнил произвольно название — Trunk Name, назвав его Vega(Vegatelecom наш провайдер). Outbound CallerID вписав номер в формате 380652ХХХХХХ как его и выдает наш оператор, это номер с которого будут исходящие вызовы, если его не задать то позвонить с использованием этого транка не получалось, говорил все линии заняты. В Outgoing Settings заполнил ещё одно поле Trunk Name и ввёл настройки которые дал провайдер:
host=93.178.205.29
type=peer
disallow=all
allow=alaw&ulaw&g729
nat=no
canreinvite=nonat
insecure=invite
dtmfmode=rfc2833
Внизу нажал кнопочку Submit Changes и получил созданный транк.
Теперь нужно выбрать куда же мы будем принимать звонки. Заходим Applications > Extension> Generic SIP Device > Submit
User Extension — внутренний номер данного телефона, софтфона или чего вы там будете подключать. Мы использовали 100,101 и т.д.
Display Name — отображаемое имя
Обязательно в секции This device uses sip technology. заполните поле secret — это пароль.
Поля Recording Options включают запись этого телефона:
Inbound External Calls Always = Входящие внешние звонки
Outbound External Calls? Always = Исходящие внешние звонки
Inbound Internal Calls? Always = Входящие внутренние звонки
Outbound Internal Calls? Always = Исходящие внутренние звонки
On Demand Recording? Disable Запись по запросу
Внизу жмём Submit.
Далее немного отвлечемся и настроим софтфон, тоесть программу для совершения звонков с компьютера. Их достаточно много (EyeBeam, SJ-phone, Zoiper). Я покажу на примере EyeBeam.
После установки программы под Windows запускаем, заходим в настройках в Sip Accounts и редактируем первый из них.
Чтобы он заработал нам нужно ввести Display Name = User 1, User Name = 100, Password = ******, Domain = ip-вашего сервера. Остальные настройки можно не трогать. Вы можете создать несколько абонентов с номерами 101-102 или любыми другими, запустить на нескольких компьютерах несколько телефонов и уже попробовать позвонить с одного клиента на другой, соответственно по номерам 100-101-102 и т.д.
Но мы же хотим позвонить на наши свеже-купленные номера.
Заходим Connectivity>Inbound Routes
Description — Описание маршрута(Имя)
DID Number — Очень полезное поле, задав его вы можете отфильтровать звонки с какого то конкретного номера. Остановимся на нём подробнее. В нашем случае по 1 транку заходит 2 номера телефона, допустим нам нужно чтобы звонок по первому номеру уходил к первому оператору а звонок со второго номера уходил на второго оператора. Заходим на сервер телефонии через SSH, ну или физически если там есть монитор, логинимся под рутом и запускаем Asterisk CLI командой asterisk -r. Звоним на один из номеров которые мы подключили в транке. Смотрим одну из первых появляющихся строк вида: Executing [380652******@from-trunk-sip-vega:2] Goto(«SIP/vega-000000e4″, «from-trunk,380652******,1″) in new stack. после фразы from-trunk, мы видим какой DID у данного номера, наш провайдер отдает номер в таком формате, если это будет GSM шлюз в виде модема huawei, то там будет написан его IMEI, в любом случае если мы создадим маршрут с указанием этого номера, он будет отвечать за звонки именно на него. В данном примере предлагаю оставить поле пустым для универсальности. Т.е. система будет передавать все звонки со всех транков на указанное дальше Destination.
CallerID Number — работает похоже но уже с номерами звонящих. В подсказках видно что можно указывать например Blocked, следовательно звонки с заблокированных телефонных номеров будут передаваться в нужное нам Destination. По традиции оставляем пустым.
Set Destination — главное поле в котором мы наконец то укажем куда же пойдут звонки, можно выбрать очередь или допустим конкретный extension, выберем extension 100 который мы создали ранее и подключили в софтфон.
Теперь если вы позвоните на номер который заведен в транке, то у вас зазвонит софтфон. Поздравляю! Вы совершили первый успешный звонок.
Пора бы задуматься над тем чтобы мы могли позвонить кому нибудь.
Заходим Connectivity>Outbound Routes>
Route Name — имя маршрута
Dial Patterns that will use this Route — тут можно задать маршрут на определенные номера, опять же наш провайдер поддерживает набор в любом виде, можно набирать с кодом города, можно без него, все эти маршруты прописаны у него, тогда ничего прописывать не будем и поставим в поле match pattern — . Да, просто точку. Это будет означать — посылать все набранные номера как есть.
Наконец в Trunk Sequence for Matched Routes указываем транки через которые будет выходить звонок, в нашем случае vega.
Если теперь позвонить на какой нибудь номер телефона с софтфона звонок пойдет через транк, с указанного в транке номера.
Пора подумать о голосовом меню и очередях звонков.
Тут то и начинается самое интересное. Нам для голосового меню нужно много записей. Забегая вперед опишу принцип. У меня лично возникла проблема по их надиктовке, но я нашел замечательный выход. Сначала создаем много много записей (ниже расскажу как), надиктовываем их противным шепелявым голосом, потом включаем замечательную функцию изменения записи по звонку на номер, далее заходите в Admin >Feature codes, снизу Recordings там будут присутствовать все коды на которые можно позвонить с условными названиями записей которые вы им дадите. Таким образом, распечатав этот кусок на бумаге его можно выдать особе женского пола чтобы она звонила туда, слушала что вы там надиктовали и перезаписывала мелодичным голосом до тех пор пока ей не начнет нравиться. Ещё огромный плюс сего мероприятия в том, что эти записи уже могут использоваться в готовом голосовом меню, то есть менять можно на горячую, не останавливая работы телефонии и звонящих абонентов. Таким же образом можно реализовать функцию оповещения об авариях для неквалифицированного персонала. Например создав запись с названием авария, длительностью 1 секунда и тишиной внутри, можно повесить его в самое начало вашего меню. Если случается авария то оператор тех поддержки может позвонить на номер данного файла — надиктовать улицы на которых ведется ремонт, а по окончании ремонта позвонить туда и помолчать в трубку 1 секунду.
Итак надиктовка! Заходим Admin > System Recordings —
Тут можно залить файл с записью, а можно ввести номер своего Extension, нажать кнопочку Go, позвонить на номер *77 с софтфона или чего то подключенного к серваку в виде телефона и надиктовать то что нужно, после этого ввести имя Name this Recording:, и нажать кнопочку Save, запись появиться в правом углу.
Зайдя в запись можно выбрать обалденную функцию о применении которой я писал выше — Link to Feature Code поставить галочку. Теперь позвонив на этот код её можно перезаписать.
Где хранится полный список этих кодов которые вы включили — Admin> Feature Code:
Впереди по курсу очереди звонков Aplication > Queues:
Queue Number — номер очереди на который будет идти звонок.
Queue Name — имя очереди.
Static Agents: Тут можно выбрать extensions(или другие функции типа MiscDestinations, ходят легенды что если написать туда номер мобильного и в конце поставить значек #, оно будет переключать туда, но у меня почему то не получилось) которые постоянно находятся в этой очереди, соответственно на них всегда будут идти звонки.
Dynamic Members: Уже интереснее… Я буду использовать это для начальника службы СТП т.к. он на телефоне сидит, но не всегда имеет время отвечать абонентам, чтобы лишний раз его не дергали можно обеспечить вход и выход из очереди, также это может понадобится если допустим оператор работает на 2 отдела и периодически переключается из очереди отдела продаж, в очередь поддержки или что то в этом роде. Добавив сюда extension мы мало что получим — чтобы подключиться к очереди надо набрать на телефоне №очереди* (у нас 1000) и потом набрать свой extension и #, после чего будет сообщено что вы подключены к очереди и будете принимать звонки из неё. Для выхода из неё я набираю 1000** потом свой номер 100# — после чего слышу, что от очереди меня отключили.
Ring Strategy: стратегия дозвона, позволю себе облениться и прикреплю скриншот с русским переводом.
Join Announcement: Тут можете выбрать одну из записей, достаточно удобно если у вас звонок попадает с какого то номера на очередь звонков в которой надо всего лишь поприветствовать клиента и назвать имя компании в которую он звонит, далее клиент ожидает соединения с оператором.
Call Recording: формат записи звонков в очереди, у меня wav.
Max Wait Time: время максимального нахождения в очереди, после которого абоненту посоветуют позвонить позднее.
Agent Timeout: Время в течении которого будет звонить телефон оператора. Если стоит линейная стратегия дозвона, то после данного промежутка времени будет переключение на следующего оператора.
Retry: Через сколько секунд пробовать позвонить оператору снова. Важная галка если делать очереди со звонком на мобильный, когда надо чтобы телефон позвонил один раз в течении скольких то секунд и чтобы оператор мог сбросить вызов, после чего звонок пойдёт на назначение при не ответе — там нужно выбрать без повтора.
Agent Announcement: Тут можно выбрать сообщение которое будет сообщаться оператору в трубку, перед тем как его соединит с абонентом, например если оператор сидит в 2-3 очередях одновременно — ему может говорить с какой именно очереди на него пришел звонок.
Frequency: Насколько часто сообщать абоненту его номер в очереди.
Announce Position: Сообщать позицию в очереди или нет.
Для создание приветствия заходим Applications-Announcements:
Тут всё очень просто.
Description: Название.
Recording: Выбор записи которая будет произнесена.
Repeat: Количество повторов.
Allow Skip: Разрешать пользователю сбрасывать приветствие нажатием клавиш.
Destination after playback: Куда переводить звонок после окончания приветствия.
Интересная функция Applications-Follow Me:
Создается на основе какого либо Extension и даёт возможность переадресовывать звонок куда либо ещё. Используется когда к примеру вас нет на месте, на ваш телефон переключили какого то абонента, а вы ушли на обед, эта менюшка может переключить звонок на ваш личный мобильный телефон и заодно решить проблему когда согласно политике дозвона через транк который будет звонить вам передается как имя звонящего номер абонента который собственно и звонит. Тогда транк ругается что недопустимый CID, тоесть номер звонящего. Внизу есть настройка Change External CID Configuration, тут можно выбрать нужный режим чтобы ваш транк заработал. Очень распространённая проблема кстати на многих форумах. Детально останавливаться на настройках не буду т.к. они дублируют многие настройки очереди описанные выше.
Создаём голосовое меню Applications-IVR:
IVR Name — Имя
IVR Description — Описание
Announcement — Приветствие которое будет произноситься.
Direct Dial — Прямой набор номера Extension, если он известен звонящему.
Timeout — Время в секундах после окончания приветствия, по истечении которого будет переключено на Destination по таймауту.
Invalid Retries — Количество попыток неправильного набора цифр.
Invalid Retry Recording — Запись воспроизводимая при неправильном наборе.
Append Original Annoucement — Воспроизводить главное приветствие после сообщения о неправильном наборе цифр.
Invalid Recording — Сообщение которое воспроизведется после исчерпания попыток неправильного ввода, но до переключения на назначения при неправильных попытках ввода.
Invalid Destination — Куда закинуть абонента который нажимал много неправильных кнопок.
Timeout Retries — Количество повторов меню после истечения таймаута.
Timeout Retry Recording — Сообщение после истечения таймаута и до сообщения попробовать снова.
Append Original Annoucement — Добавлять оригинальное сообщение меню после сообщения о таймауте.
Timeout Recording — Сообщение после сообщения о таймауте и до отправления абонента по назначению по таймауту.
Timeout Destination — Куда переключать по таймауту.
IVR Entries — Тут задаются по каким номерам куда перенаправлять.
Заходим Applications — Misc Destination:
Description: Название
Feature Code: Код по которому будет вызываться. У меня монтажники с личными мобильными забиты на 30Х номера.
Feature Status: ВклВыкл.
Destination: назначение. Тут у меня выбраны Misc Destination с телефонами монтажников, и потом на каждого созданы очереди в статических агентах которых, указаны как раз номера Misc Application. Сделано это для того, чтобы если монтажник не взял трубку, можно было переключить на кого нибудь ещё.
Applications — Time Group даже описывать нечего, только упомяну что вначале создается одна запись допустим время работы офиса в будние с 8.00 до 17.00, потом сохраняется, открывается ещё раз справа и тогда появляется кнопка — чтобы добавить дополнительный временной промежуток, например ещё и в субботу с 10.00 до 15.00.
После создания Time Group можно создать Applications — Time Condition:
Time Condition name: Имя.
Time Group: выбирается группа из прошлого меню.
Ну и 2 направления — если совпадает и если не совпадает.
Чтобы наглядно показать как это всё работает у меня покажу схему:
Я не претендую на правильность того что сделал. Ещё 2 месяца назад я ничего не знал о телефонии. Когда искал в рунете статьи, не смог найти чего то масштабного, что помогло бы мне настроить телефонию до состояния — оно работает. Так что возможно тут много ошибок и работает оно не оптимально, но во всяком случае надеюсь поможет новичку настроить сервер до рабочего состояния.
Автор: MotjaX
Огромное вам спасибо за такую статью!
Огромное спасибо. мне как новичку это то что надо.