Як менеджер міні-АТС з GSM і записами розмов робив

Сьогодні, в еру високих технологій та бездоганного клієнтського сервісу, всім хочеться бути на рівні. Багато компаній в незалежності від рангу і розміру постійно намагаються зробити спілкування з клієнтом зручніше і приємніше. У нашому інтернет-агентстві, керівником, якого я і є, однією з таких «приємностей» стало введення в експлуатацію невеликий міні-АТС на базі Openvox і Asterisk, зібраної своїми руками. Але давайте по-порядку:

Проблема

Телефон — є одним з основних каналів зв'язку з клієнтами в нашій роботі. За день надходить безліч дзвінків, які потрібно обробити. Від використання аналогової лінії ми відмовилися відразу, зважаючи жадібності і ненадійність місцевих провайдерів. Та й нині застаріли аналогові технології. Рішення використовувати GSM-зв'язок було одностайним і непохитним. У перші кілька років роботи за прийом дзвінків відповідав ось такий от не убиваемый апарат:

Nokia C2-00

Спочатку дзвінки брав я і мій партнер по-черзі, перебуваючи в різних кутах одного офісу. Коли клієнт дзвонив і прослухавши кілька сигналів бездушного зумера просив з ким-небудь з'єднати, то з великою ймовірністю він міг почути свист вітру, який створював цей фінський девайс, пролітаючи з одного кута офісу в інший. «Багатоканальність» була реалізована за рахунок наявності в даному телефоні двох слотів для sim-карт. Про записи розмов не було, голосове привітання і меню відсутні, метод трансферу дзвінків від одного фахівця до іншого був описаний вище. Суцільні мінуси, загалом, і найголовніше, що дзвонив до нас людина з перших хвилин міг подумати, що дзвонить чергову шарашкину контору з півтора фрілансерів. Що було досить прикро, адже свою роботу ми робили добре, з гарантіями і душею.

Вдосталь намучившись, одним прекрасним днем було сказано гучне «Досить!» і не менш гучне «Треба щось робити!»

Завдання

Необхідно зробити таку «штуку», яка вирішить всі наші проблеми яка замінить стареньку нокію. Ця «штука» повинна вміти наступне:

  • Як мінімум 3 GSM лінії;
  • Головосое привітання;
  • Музика замість гудків;
  • Утримання виклику;
  • Трансфер виклику;
  • Не менше трьох незалежних трубок, з можливістю розширення;
  • Гнучке налаштування переадресації виклику;
  • Запис розмов;
  • АОН;
  • Список контактів;
  • Мінімум проводів;
  • Компактні розміри обладнання.

Підбір рішення

Для розв'язання задачі був виділений бюджет ні багато ні мало 40 000 рублів Російської Федерації. Першим ділом я вибрав самий тривіальний спосіб, а саме: обдзвонив всі компанії в місті, які могли встановити і налаштувати міні-АТС. Компаній виявилося «безліч», а саме одна (ох вже ці регіони), яка сказала, що якщо я примножу наш бюджет на 4, то вийде сума, якої буде достатньо, що б вони всі наші «хотілки» зробили. На 4 множити мені не хотілося, тому переходимо до плану «Б» — віртуальна АТС. Благо, зараз безліч подібних сервісів з будь-яким функціоналом і на будь-який гаманець. Але бентежить одне — повна залежність від сервісу: немає інтернету — немає зв'язку, на сервісі тех. роботи — немає зв'язку, не вчасно заплатили абон. плату — немає зв'язку. Та й сервіс може в будь-який момент збільшити вартість своїх послуг або не повернути дані (записи розмов, наприклад). Такий варіант, так само мене не влаштував. Залишався третій варіант — «костыльно-велосипедний». Що ж, геморою більше за той цікаво. На ньому і зупинився.

Вибір і купівля обладнання та софта

Оскільки бюджет невеликий, та й я любитель всяких линуксов та опенсорсов. Тому з софтом визначився одразу — Asterisk в якості сервера телефонії. У якості ОС використовував Ubuntu. З апаратурою все не так просто, трохи поміркувавши і перевівши купу паперу, витворив таку схему:

схема телефонії

Основними елементами тут припадають:

  • сервер, на якому встановлений Asterisk;
  • GSM-шлюз;
  • база бездротових телефонних трубок;
  • роутер, як зв'язуючи ланка;
  • телефонні трубки.
Все працює наступним чином: На шлюз надходить дзвінок, він цей дзвінок приймає і віддає на сервер за допомогою витої пари і роутера. Сервер «бере слухавку», грає привітання, кидає дзвінок в режим очікування і зв'язується з базою трубок. База вибирає потрібну трубку і змушує її дзвонити. Коли менеджер приймає дзвінок, сервер з'єднує клієнта та менеджера.

Іду в найближчий інтернет-магазин і кладу в кошик наступні товари:

  • GSM Шлюз OpenVox VoxStack VS-GW1202-4G — 16 932 рублів;
  • База і 1 трубка Yealink W52P 4 828 рублів;
  • Дві додаткові трубки Yealink W52H 3 175 рублів.
Викреслюю три пункти зі списку обладнання, залишилися два спокійно можна дістати в будь-якому комп'ютерному магазині нашого містечка. Та й гарний привід трохи прогулятися:

  • В якості сервера: Неттоп DNS Porto 0166749 [Intel i5-3337U, 2x1800 МГц, 4096 Мб, HDD 500 Гб] — 11 500 рублів;
  • Побутової роутер Zyxel Keenetic 4G II 1 500 рублів.
Разом: 37921 рубль
Що ж, дуже навіть добре, ще й на морозиво залишилося.
Прим. авт.: Справа була восени 2014, тому ціни трохи нижче, ніж зараз.

Отримання і складання устаткування

Пройшли два тижні болісного очікування і замилений кур'єр вручив мені довгоочікувану посилку. Вміст:

OpenVox VoxStack VS-GW1202-4G
Шлюз являє собою невеликий блок (розміром із стандартний DVD-привід) і плату, яка поміщається всередину. Дана модель шлюзу підтримує 4 сім-карти, але може бути розширена до восьми шляхом купівлі ще однієї плати, яка вставляється поруч. Шлюз підключається в локальну мережу звичайної кручений парою і в електричну за допомогою адаптера живлення.

GSM-шлюз OpenVox VoxStack VS-GW1202-4G

База і трубки Yealink W52P
Компактна бездротова база і три трубки. Кожна трубка обладнана зарядної станцією, має кольоровий дисплей і кріплення на пояс. Виглядає все досить акуратно. База розрахована максимум на 5 телефонів. У разі подальшого розширення просто докуповується ще одна база. Потужний Сигнал, хороший прийом через цегляну стіну. На якість зв'язку, так само скаржитися не доводиться.

База і трубки Yealink W52P

Неттоп DNS Porto 0166749
Компактний комп'ютер виступає в якості сервера. Девайс розміром порівнянний з вищезазначеним OpenVox. Характеристики достатні для безперебійної роботи телефонії та зберігання записів розмов на кілька місяців. І звуть його, до речі, Артем.

Неттоп DNS Porto 0166749

Збираємо все воєдино відповідно затвердженою схемою і встановлюємо ОС Ubuntu:

Сбока міні-АТС

Тепер все готово для переходу до найцікавішого кроці: налаштування нашого сервера.

Установка і настройка



Спочатку встановимо сам Asterisk і GUI до нього. Покроковий мануал, як цього досягти: http://wiki.enchtex.info/howto/asterisk/asterisk-ubuntu-10.04. Чому не freePBX? На смак і колір всі фломастери різні, стаття орієнтована на новачків, а мені здалося, що GUI від Digium простіше в установці і експлуатації, в іншому, це суто моя думка.

Тепер потрібно «подружити» OpenVox і Asterisk. Зробити це досить просто. Спочатку увійдемо в веб-GUI Asterisk (по-замовчуванню: localhost:8088), введемо логін і пароль вказаний при установці. Не довго думаючи йдемо по шляху: Trunks -> VOIP Trunks -> New SIP/IAX Trunk і вказуємо наступні налаштування:

Type: sip
Context Naming: Based on Username
Provider Name: openvox
Hostname: адреса openvox (по-замовчуванню: 172.16.99.1)
Username: придумуємо ім'я користувача
Password: придумуємо пароль

Trunks -> VOIP Trunks -> New SIP/IAX Trunkmage

Далі слідуємо за адресою openvox (по-замовчуванню: 172.16.99.1, дефолтний логін та пароль admin:admin) і бачимо панель управління. Клікаємо SIP -> SIP endpoints -> Add New SIp Endpoint:

Name — придумаємо ім'я
User Name ім'я користувача, яке придумали раніше
Password пароль, який придумали раніше
Registration — This gateway registers with the endpoint

SIP -> SIP endpoints -> Add New SIp Endpoint

Йдемо в ADVANCED -> Asterisk CLI і пишемо sip show registry, при вдалому збігу обставин побачимо «1 SIP registrations», що означає, що все працює.

Тепер налаштуємо правила для вхідних і вихідних дзвінків в ROUTING -> Call Routing Rules -> New Call Routing Rule.

Вихідні:

Routing Name — ім'я роута (нехай буде «out-route»)
Call Comes in From — вибираємо транк
Send Call Through — вибираємо порт openvox'a

Для вхідних викликів все налаштовується аналогічно, єдиний пункт, який може викликати труднощі — це параметр «Forward Number» для правил, тут потрібно написати Extension на стороні asterisk на який буде йти дзвінок.

Продовжимо налаштування Asterisk GUI, створимо користувачів і правила для дзвінків, ось невеликий мануал, як це зробити: http://invoip.net/2011/11/vvedenie-v-asterisk-gui/

Після того, як проведена початкова настройка Asterisk і Openvox потрібно налаштувати базу трубок, вона так само має веб-інтерфейс, а налаштування зводиться до зіставленню користувачів Asterisk і телефонних апаратів. Тепер можна здійснювати і приймати дзвінки. Настав час зробити щось цікавіше.

Прикручуємо різного роду «прикраси»

Один з найбільш цікавих файлів Asterisk — це «extensions.conf», в ньому виробляється основна маса налаштувань. Через GUI створимо голосове меню і зробимо переклад всіх вхідних викликів на нього, назвемо його «voicemenu-custom-1». Після цього можна задавати різні параметри того меню або використовуючи вбудований редактор GUI, або відкривши файл «extensions.conf» в будь-якому текстовому редакторі.

Голосове вітання
Спочатку замислювалося, що клієнт, зателефонувавши до нас чує голосове привітання, в якому повідомляється куди він потрапив. Саму запис привітання можна здійснити, як самостійно, так і звернувшись в спеціалізовану компанію, де професійний диктор запише його своїм голосом, накладе музику та інші звукові ефекти. Вбиваємо в гугл «запис голосового привітання» і вибираємо, те що сподобалося. В середньому одна запис коштує від 1000 до 5000 рублів. Запис ви отримаєте в форматі mp3, який не дуже охоче працює з Asterisk без танців з бубном. Перетворимо файл в зручний для Asterisk формат:

sudo apt-get install sox lame
lame --decode musicfile.mp3 musicfile.wav
sox-V musicfile.wav-r 8000-c 1-t ul hello.ulaw


Отриманий файл, покладемо в папку «asterisk/sounds» і повернемося до редагування меню. Спочатку нам потрібно взяти трубку і програти привітання, після цього з'єднати з потрібним користувачем:

розширеннями=s,1,Answer()
розширеннями=s,2,Background(/var/lib/asterisk/sounds/hello)
розширеннями=s,3,Dial(SIP/500,30,tm)


У «Background» переїдаємо шлях до файлу привітання (тільки ім'я файлу без розширення). У «Dial» передаємо ідентифікатор користувача Asterisk, час у секундах, що потрібно для того, що б програти привітання і два параметра t (дозволяє відповів користувачеві перевести дзвінок) і «m» (програвати музику очікування). Про інших параметрах «Dial» можна дізнатися тут.

Запис розмови
Після того, як запрацювало голосове привітання та редагування «extensions.conf» не викликає труднощів, прикрутимо запис розмов. Нехай всі записи складаються в директорії розбиті по роках, місяцях і днях, а в назві файлу запису є дата, час та номер абонента. Звучить складно? А робиться просто:

...
розширеннями=s,n,Set(fname=${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}_${CALLERID(number)}_in)
розширеннями=s,n,MixMonitor(шлях до директорії з записами/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}
....


Багатоканальність та переадресація
У ovenvox я вставив три сім-карти, до двох з них прив'язані номери, на які можна зробити дзвінок, третя картка — резервна. На рівні оператора налаштував переадресацію з першої на другу, з другої на третю, з третьої назад на першу. Таким чином вийшло три повноцінних лінії для дзвінка. Хочу зробити акцент на тому, що потік дзвінків в моїй компанії великий, але не настільки, що б подзвонила одночасно три людини, тому така схема для мене прийнятна. Якщо потік стане більше, можна збільшити кількість сім-карт до 8 і налаштувати чергу дзвінків.

Тепер складемо логіку таким чином: дзвонить перший клієнт, менеджер бере телефон №1, тут же відбувається другий вхідний дзвінок, має задзвонити телефон №2, яким скористається другий менеджер. Третій клієнт буде з'єднаний з третім менеджером. Що б це реалізувати можна використовувати умову «GotoIf»:

...
розширеннями=s,n,Dial(SIP/500,30,tm)
розширеннями=s,n,GotoIf($[${DIALSTATUS}=BUSY]?ZANAT,1)
розширеннями=ZANAT,1,Dial(SIP/501,30,tm)
розширеннями=ZANAT,2,GotoIf($[${DIALSTATUS}=BUSY]?ZANAT1,1)
розширеннями=ZANAT1,1,Dial(SIP/502,30,tm)
розширеннями=ZANAT1,2,GotoIf($[${DIALSTATUS}=BUSY]?ZANAT2,1)
розширеннями=ZANAT2,1,Dial(SIP/500,30,tm)
...

Але що буде, якщо трубку ніхто не візьме? Припустимо, всі пішли на обід або дзвінок надійшов у вихідний день. Вихід банальний: вибираємо самого відповідального менеджера і записуємо номер його мобільного телефону. Правимо «extensions.conf» таким чином:

...
розширеннями=s,n,Dial(SIP/500,30,tm)
розширеннями=s,n,GotoIf($[${DIALSTATUS}=BUSY]?ZANAT,1)
розширеннями=s,n,Dial(SIP/8914XXXXXXX@openvox,20,tm)
...

Тепер, якщо трубку ніхто не взяв на протязі 20 секунд, виклик буде переведений на вказаний мобільний телефон. З боку клієнта це буде виглядати, як незначно збільшений час очікування відповіді. Можна піти далі і зробити переадресацію в неробочий час без очікування, але цей випадок я розглядати не буду.

Трансфер, АВН, список контактів
Всі ці функції підтримуються за замовчуванням і працюють досить добре, щоб задовольнити потреби моєї компанії, але якщо є бажання, їх завжди можна поліпшити. Наприклад, список контактів можна довантажувати в xml-файлі з CRM-системи.

Завершення робіт

Всі зібравши, задавши та перевіривши, я вдосталь насолодився виконаною роботою. Залишилося всі ці коробки і дроти, акуратно прибрати куди-небудь з очей геть, наприклад у великий залізний ящик:

Монтаж міні-АТС

Пізніше з'ясувалося, що засовувати базу бездротових трубок в бляшану коробку — не найкраща ідея, тому через пару днів винесли її назовні і приліпили збоку.

Висновки

З моменту описаних подій пройшло близько 4 місяців. За цей час незначні недоробки були усунені і все працює чітко і без збоїв. Без урахування часу доставки залозок на всі роботу пішло близько 5 днів часу. У результаті клієнти і менеджери задоволені, дзвінки пишуться, голосові привітання програються, музика в трубках звучить, рівень сервісу зростає. Усім спасибі за увагу, сподіваюся, що моє оповідання було корисним і цікавим.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.