- проблема
- завдання
- Підбір рішення
- Вибір і покупка обладнання і софта
- Отримання і складання устаткування
- OpenVox VoxStack VS-GW1202-4G
- База і трубки Yealink W52P
- Неттоп DNS Porto 0166749
- Встановлення та налаштування
- Прикручуємо різного роду «свистілки»
- голосове привітання
- запис розмови
- Багатоканальність і переадресація
- Трансфер, АОН, список контактів
- завершення робіт
- висновки
Наша взаимовыгодная связь https://banwar.org/
Сьогодні, в еру високих технологій та бездоганного клієнтського сервісу, всім хочеться бути на рівні. Багато компаній в незалежності від рангу і розміру постійно намагаються зробити спілкування з клієнтом зручніше і приємніше. У нашому интерне-агентстві, керівником, якого я і є, однією з таких «приємностей» стало введення в експлуатацію невеликий міні-АТС на базі Openvox і Asterisk, зібраної своїми руками. Але давайте по-порядку:
проблема
Телефон - є одним з основних каналів зв'язку з клієнтами в нашій роботі. За день надходить безліч дзвінків, які потрібно обробити. Від використання аналогової лінії ми відмовилися відразу, з огляду на жадібності і ненадійність місцевих провайдерів. Та й застаріли нині аналогові технології. Рішення використовувати GSM-зв'язок було одноголосним і непохитним. У перші кілька років роботи за прийом дзвінків відповідав вот такой вот не вбиваємо апарат:
Спочатку дзвінки приймав я і мій партнер по-черзі, перебуваючи в різних кутах одного офісу. Коли клієнт дзвонив і прослухавши кілька сигналів бездушного зумера просив з ким-небудь з'єднати, то з великою ймовірністю він міг почути свист вітру, який створював цей фінський девайс, пролітаючи з одного кута офісу в інший. «Багатоканальність» була реалізована за рахунок наявності в даному телефоні двох слотів для сім-карт. Про записи розмов не йшлося, голосове привітання і меню були відсутні, метод трансферу дзвінків від одного фахівця до іншого був описаний вище. Суцільні мінуси, в загальному, і найголовніше, що той, що дзвонив до нас людина з перших хвилин міг подумати, що дзвонить чергову шарашкину контору з півтора фрілансерів. Що було досить прикро, адже свою роботу ми робили добре, з гарантіями і душею.
Вдосталь намучившись, одного прекрасного дня я сказав гучне «Досить!» І не менш гучне «Треба щось зробити!»
завдання
Необхідно зробити таку «штуку», яка вирішить всі наші проблеми яка замінить стару нокию. Ця «штука» повинна вміти наступне:
- Як мінімум 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 сім-карти, але може бути розширена до восьми шляхом покупки ще однієї плати, яка вставляється поруч. Шлюз підключається в локальну мережу звичайної кручений парою і в електричну за допомогою адаптера харчування.
База і трубки Yealink W52P
Компактна бездротова база і три трубки. Кожна трубка обладнана зарядної станцією, має кольоровий дисплей і кріплення на пояс. Виглядає все досить акуратно. База розрахована максимум на 5 телефонів. У разі подальшого розширення просто докуповується ще одна база. Сигнал потужний, хороший прийом через цегляну стіну. На якість зв'язку так само скаржитися не доводиться.
Неттоп DNS Porto 0166749
Компактний комп'ютер виступає в якості сервера. Розміром девайс можна порівняти з вищезазначеним OpenVox. Характеристики достатні для безперебійної роботи телефонії та зберігання записів розмов на кілька місяців. І звуть його, до речі, Артем.
Збираємо все воєдино відповідно затвердженої схеми і встановлюємо ОС 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: придумуємо пароль
Далі прямуємо за адресою 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
Йдемо в 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 формат:
- - -. . -. - - -.
Отриманий файл, покладемо в папку «asterisk / sounds» і повернемося до редагування меню. Спочатку нам потрібно взяти трубку і програти вітання, після цього з'єднати з потрібним користувачем:
exten = s, 1, Answer () exten = s, 2, Background (/ var / lib / asterisk / sounds / hello) exten = s, 3, Dial (SIP / 500, 30, tm)
У «Background» переїдати шлях до файлу вітання (тільки ім'я файлу, без розширення). У «Dial» передаємо ідентифікатор користувача Asterisk, час у секундах, яке потрібно для того, що б програти вітання і два параметра «t» (дозволяє ответившему користувачеві перевести дзвінок) і «m» (програвати музику очікування). Про інших параметрах «Dial» можна дізнатися тут .
запис розмови
Після того, як запрацювало голосове привітання і редагування «extensions.conf» не викликає ускладнень, прикрутимо запис розмов. Нехай всі записи складаються в директорії розбиті по роках, місяцях і днях, а в назві файлу записи присутній дата, час і номер того, хто телефонував. Звучить складно? А робиться просто:
... exten = s, n, Set (fname = $ {STRFTIME ($ {EPOCH} ,,% Y -% m -% d_% H -% M -% S)} _ $ {CALLERID (number)} _ in) exten = s, n, MixMonitor (шлях до директорії з записами / $ {STRFTIME ($ {EPOCH} ,,% Y)} / $ {STRFTIME ($ {EPOCH} ,,% m)} ....
Багатоканальність і переадресація
У ovenvox я вставив три сім-карти, до двох з них прив'язані номера, на які можна зробити дзвінок, третя картка - резервна. На рівні оператора налаштував переадресацію з першої на другу, з другої на третю з третьої назад на першу. Таким чином вийшло три повноцінних лінії для дзвінка. Хочу зробити акцент на тому, що потік дзвінків в моїй компанії великий, але не настільки, щоб зателефонувало одночасно три людини, тому така схема для мене прийнятна. Якщо потік стане більше, можна збільшити кількість сім-карт до 8 і налаштувати чергу дзвінків.
Тепер вибудуємо логіку таким чином: дзвонить перший клієнт, менеджер бере телефон №1, тут же відбувається другий вхідний дзвінок, повинен задзвонити телефон №2, яким скористається другий менеджер. Третій клієнт буде з'єднаний з третім менеджером. Що б це реалізувати можна використовувати умова «GotoIf»:
... exten = s, n, Dial (SIP / 500, 30, tm) exten = s, n, GotoIf ($ [$ {DIALSTATUS} = BUSY]? ZANAT, 1) exten = ZANAT, 1, Dial (SIP / 501, 30, tm) exten = ZANAT, 2, GotoIf ($ [$ {DIALSTATUS} = BUSY]? ZANAT1, 1) exten = ZANAT1, 1, Dial (SIP / 502, 30, tm) exten = ZANAT1, 2 , GotoIf ($ [$ {DIALSTATUS} = BUSY]? ZANAT2, 1) exten = ZANAT2, 1, Dial (SIP / 500, 30, tm) ...
Але що буде, якщо трубку ніхто не візьме? Припустимо, всі пішли на обід або дзвінок надійшов у вихідний день. Вихід банальний: вибираємо найвідповідальнішого менеджера і записуємо номер його мобільного телефону. Правимо «extensions.conf» таким чином:
... exten = s, n, Dial (SIP / 500, 30, tm) exten = s, n, GotoIf ($ [$ {DIALSTATUS} = BUSY]? ZANAT, 1) exten = s, n, Dial (SIP / 8914XXXXXXX @ openvox, 20, tm) ...
Тепер, якщо трубку ніхто не взяв на протязі 20 секунд, дзвінок буде поставлено на вказаний мобільний телефон. З боку клієнта це буде виглядати, як незначно збільшений час очікування відповіді. Можна піти далі і зробити переадресацію в неробочий час без очікування, але цей випадок я розглядати не буду.
Трансфер, АОН, список контактів
Всі ці функції підтримуються за замовчуванням і працюють досить добре, що б задовольнити потреби моєї компанії, але якщо є бажання, їх завжди можна поліпшити. Наприклад, список контактів можна довантажувати в xml-файлі з CRM-системи.
завершення робіт
Все зібравши, налаштувавши і перевіривши, я вдосталь насолодився виконаною роботою. Залишилося всі ці коробки і дроти, акуратно прибрати куди-небудь з очей геть, наприклад в великий залізний ящик:
Пізніше з'ясувалося, що засовувати базу бездротових трубок в бляшану коробку - не найкраща ідея, тому через пару днів винесли її назовні і приліпили збоку.
висновки
З моменту описаних подій пройшло близько 4 місяців. За цей час незначні недоробки були усунуті і все працює чітко і без збоїв. Без урахування часу доставки залозок на все роботу пішло близько 5 днів часу. В результаті клієнти і менеджери задоволені, дзвінки пишуться, голосові вітання програються, музика в трубках звучить, рівень сервісу зростає. Дякую всім за увагу, сподіваюся, що моє оповідання було корисним і цікавим.
Звучить складно?
DIALSTATUS} = BUSY]?
DIALSTATUS} = BUSY]?
DIALSTATUS} = BUSY]?
Але що буде, якщо трубку ніхто не візьме?
DIALSTATUS} = BUSY]?