Навіщо потрібна інтеграція власної CRM/ERP/Desk з АТС
У більшості систем автоматизації бізнесу (CRM/ERP/Desk і т.д.) автоматизується спілкування з клієнтами та/або партнерами. Поки значна частина спілкування відбувається за телефоном, систему просто необхідно інтегрувати з IP-телефонією.
Спеціально для розробників CRM/Desk і інших систем автоматизації, ми пропонуємо інструкцію з інтеграції вашої системи з IP-телефонією Zadarma.
Переваги інтеграції з Zadarma:
- велика клієнтська база Zadarma (більш 1.6 млн) отримає доступ до ваших сервісів;
- ваші клієнти зможуть інтегрувати телефонію без витрат (АТС, API, інтеграції - безкоштовні);
- світове покриття послуг, ваші клієнти можуть бути де завгодно (підтримка 5 мов, дата-центри на трьох континентах, віртуальні номери в 100 країнах світу).
Також після інтеграції, якщо відвідуваність вашого сайту перевищує 30 тисяч користувачів в місяць, ми готові протестувати вашу інтеграцію і розмістити інструкцію на нашому сайті (що дасть вам безкоштовний трафік від одного з найпопулярніших VoIP операторів в Європі та світу).
В особистому кабінеті за цим посиланням доступні прямі інтеграції (розроблені нами) з різними системами, також в розділі Допомога - Інструкції з налаштування ви можете знайти приклади налаштування інтеграції зі сторонніми системами, які були розроблені без нашої участі. Відкритий API дозволяє самостійно реалізувати повноцінну інтеграцію з віртуальною АТС Zadarma, з цим завданням впорається будь-який розробник через невисокий ступінь складності. Для зручності будемо розглядати інтеграцію віртуальної АТС Zadarma і сторонньої CRM
Основні функції:
- Дзвінки в один клік з інтерфейсу CRM.
- Спливаючі повідомлення про вхідні/вихідні дзвінки з інформацією про абонента, посиланням на картку клієнта.
- Статистика дзвінків, аудіозаписи дзвінків в картці клієнта.
- Автоматичне створення контактів/лідів/угод при дзвінку від нового клієнта.
- Автоматичне направлення вхідного дзвінка від існуючого клієнта на відповідального менеджера.
- Відображення імені клієнта на вашому IP-телефоні при вхідному дзвінку.
- Нагадування про пропущені дзвінки.
- Використання власного чорного списку для вхідних дзвінків.
- Додавання інтеграції в особистий кабінет Zadarma.
Взаємодію з API можна умовно розділити на дві частини:
1. Запити (POST, GET) з боку CRM до API Zadarma
2. Система повідомлень про дзвінки (webhook), POST-запити з інформацією про дзвінки відправляються нашим API в бік CRM
Повна документація по API знаходиться тут
1. Налаштування інтеграції з боку Zadarma.
Умови необхідні для початку налаштування інтеграції:
В особистому кабінеті Zadarma:
1. Згенеровані ключі авторизації API (Key та Secret)
2. Створена віртуальна АТС і пройдено Майстер налаштування (внутрішні номери АТС із записом розмов за кількістю користувачів CRM, сценарій вхідних дзвінків)
У нас є аккаунт Zadarma і якась CRM у якій повинен бути URL адреса на модуль телефонії, наприклад:
https://mybestcrm.com/zadarma
або
https://id12345678.mybestcrm.com/zadarma
Далі в якості прикладу візьмемо посилання https://mybestcrm.com/zadarma (У вас повинно бути посилання, що вказує на вашу CRM)
В особистому кабінеті Zadarma в розділі Налаштування - API в стовпці "Події, за якими необхідно відправляти дані:" повинні бути включені всі типи повідомлень. У секції "Повідомлення про дзвінки в АТС" в полі "Посилання вашого ресурсу" введіть URL вашої CRM, на цю адресу будуть відправлятися повідомлення про дзвінки.
Для того, щоб система прийняла посилання, необхідно додати код перевірки на початку скрипта.
Приклад на PHP:
<?php if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']); ?>
Валідація посилання відбувається після натискання кнопки "Додати", на посилання відправляється довільний набір символів, наприклад 1234567, відповідно до вищевказаного коду посилання повинно повернути значення, що було відправлено, без додаткових символів, пробілів, BOM-послідовностей і т.і. Якщо валідація посилання не проходить, перевірте яке значення повертає посилання, надішліть curl запит на ваше посилання додавши до нього ?zd_echo=1234567
curl https://mybestcrm.com/zadarma?zd_echo=1234567
У відповідь посилання повинно повернути значення, що було відправлено, 1234567
Якщо там порожньо або інше значення відмінне від 1234567 - валідація не пройде.
Для збільшення безпеки, рекомендуємо дозволити доступ до вашого посилання тільки з IP 185.45.152.42 У кожному запиті на ваше посилання буде приходити додатковий заголовок "Signature", за яким також зможете звіряти цілісність і справжність даних. Детальніше тут
2. Налаштування інтеграції з боку CRM.
В особистому кабінеті Zadarma вже підтверджене посилання, що вказує на CRM, на яке будуть надсилатися повідомлення про дзвінки; створені ключі авторизації, які необхідно зберегти в CRM. На стороні CRM потрібна сторінка для налаштування інтеграції, назвемо її "Налаштування телефонії", на цій сторінці обов'язково повинні бути такі основні параметри:
- Поля для введення ключів авторизації (Key и Secret).
- Посилання на модуль телефонії в CRM, яке ми підтверджували раніше https://mybestcrm.com/zadarma.
- Список користувачів з можливістю призначити кожному свій власний, унікальний внутрішній номер атс.
Список внутрішніх номерів можна отримати методом GET /v1/pbx/internal/
З отриманого списку внутрішніх номерів формуємо контекстне меню для призначення внутрішнього номера кожному користувачу CRM Якщо внутрішній номер вже призначений одному користувачеві, цей внутрішній номер більше не повинен бути доступний для вибору і призначення іншому користувачеві.
Рекомендуємо одного з користувачів призначати відповідальним за замовчуванням, створивши відповідний чекбокс на сторінці налаштувань телефонії. Відповідальний за замовчуванням - це співробітник, який буде призначатися відповідальним щодо подій у яких немає явного відповідального. Наприклад: Вхідний дзвінок від нового клієнта спрямований одночасно на 5 внутрішніх номерів (5 користувачів CRM) і ніхто з них не зняв трубку. Потенційного клієнта не хотілося б втрачати і для цього в CRM можна створити подію, завдання або лід "Пропущений дзвінок з номера". Але на кого з користувачів його призначити? Якщо призначити на всіх п'ятьох користувачів, то клієнтові можуть передзвонити 5 разів, що не дуже добре. В цьому випадку можна призначати подію на співробітника відповідального за замовчуванням (Наприклад керівник відділу продажів). Якщо у вас в CRM є пул нерозібраних лідів і користувачі самі беруть звідти ліди або вони призначаються користувачам автоматично, відповідно до внутрішнього алгоритму, опцію відповідального за замовчуванням можна не використовувати.
Налаштування телефонії в CRM зазвичай доступні тільки користувачу з правами адміністратора/керівника. Для call-центрів може бути корисним відображення балансу з особистого кабінету Zadarma на сторінці налаштувань телефонії в CRM. Отримати баланс можна методом GET /v1/info/balance/
3. Вихідні дзвінки з інтерфейсу CRM ▾
3.1 Віджет на WebRTC для дзвінків з браузера.
Якщо ваша CRM використовує https ви можете вбудувати наш віджет. Увага: Не розміщуйте віджет у відкритому доступі в мережі, інакше через ваш аккаунт зможе зателефонувати будь-хто. При кожному завантаженні сторінки з боку серверного коду вам необхідно генерувати ключ для webrtc, отриманий за допомогою методу GET /v1/webrtc/get_key нашого API (Час життя ключа - 72 години).
В особистому кабінеті на сторінці Настройки - Інтеграції та API в секції "Інтеграція WebRTC віджета" необхідно ввести домен вашої CRM і вибрати налаштування зовнішнього вигляду і розташування віджета. Далі використовуйте отриманий код для інтеграції в вашу CRM. Замість YOUR_KEY підставте згенерований через API ключ; замість YOUR_SIP підставте ваш SIP-номер або повний логін внутрішнього номеру АТС, з якого будуть відбуватися дзвінки.
Приклад коду:
<script src="https://my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-lib.js?v=17"></script>
<script src="https://my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-fn.js?v=17"></script>
<script>
if (window.addEventListener) {
window.addEventListener('load', function() {
zadarmaWidgetFn('YOUR_KEY', 'YOUR_SIP', 'square' /*square|rounded*/, 'en' /*ru, en, es, fr, de, pl, ua*/, true, "{right:'10px',bottom:'5px'}");
}, false);
} else if (window.attachEvent) {
window.attachEvent('onload', function(){
zadarmaWidgetFn('YOUR_KEY', 'YOUR_SIP', 'square' /*square|rounded*/, 'en' /*ru, en, es, fr, de, pl, ua*/, true, "{right:'10px',bottom:'5px'}");
});
}
</script>
Віджет в прихованому стані:
Віджет в розгорнутому положенні:
3.2 Дзвінки за допомогою зворотнього дзвінка (Callback)
В інтерфейсі CRM біля кожного номеру телефону додаємо іконку/кнопку для ініціації дзвінка на цей номер телефону, також рекомендуємо реалізувати веб-телефон з номеронабирачем для дзвінка на новий номер, що раніше не був збережений в CRM. Вихідні дзвінки здійснюються за принципом Callback. На внутрішньому номері віртуальної АТС повинен бути налаштований IP телефон або софтфон для прийому і здійснення дзвінків. Користувач в CRM клікає на іконку поруч з номером телефону або на кнопку дзвінка в веб-телефоні, з боку CRM відправляється Callback.
Метод GET /v1/request/callback/
Параметри:
- from – тризначний внутрішній номер АТС, який призначений користувачеві.
- to – номер телефону, на який хоче зателефонувати користувач.
Користувач отримує вхідний дзвінок на свій софтфон, знімає трубку і очікує з'єднання з номером, на який він хоче подзвонити.
Приклад реалізації:
4. Спливаючі повідомлення про дзвінки в інтерфейсі CRM ▾
Коли внутрішній номер АТС отримує або здійснює дзвінок, необхідно щоб в CRM відображалося відповідне повідомлення. Повідомлення має бути показано тільки у того користувача, внутрішній номер якого бере участь в дзвінку. У повідомленні про дзвінок може відображатися наступна інформація:
- Номер телефону
- Ім'я контакту/компанії/ліда, якщо номер телефону раніше збережений в CRM, ім'я є посиланням для переходу безпосередньо до суті (контакт/компанія/лід)
- Якщо дзвінок від нового клієнта - кнопка створення контакту/компанії/ліда
- Ім'я відповідального співробітника, якщо дзвінок від існуючого клієнта
- Віртуальний номер, на який надійшов вхідний дзвінок (Номер підключений в Zadarma)
Тригером для появи спливаючого повідомлення є подія NOTIFY_INTERNAL (початок вхідного дзвінка на внутрішній номер АТС) або подія NOTIFY_OUT_START (початок вихідного дзвінка з АТС)
Коли знімуть трубку і почнеться розмова, в CRM буде надіслано повідомлення NOTIFY_ANSWER (відповідь при дзвінку на внутрішній або зовнішній номер), яке в свою чергу є тригером для спливаючого повідомлення, при отриманні NOTIFY_ANSWER в повідомленні може запуститися відлік часу, що показує тривалість дзвінка в реальному часі, також, наприклад, заголовок повідомлення "Дзвінок від 442037691880" може бути замінений на "Розмова з 442037691880”
Коли дзвінок завершено, буде надіслано повідомлення NOTIFY_END (кінець вхідного дзвінка на внутрішній номер АТС) або NOTIFY_OUT_END (кінець вихідного дзвінка з АТС)
Післе отримання NOTIFY_END або NOTIFY_OUT_END спливаюче повідомлення повинно закритися.
Приклад реалізації:
5. Аудіозаписи і статистика дзвінків ▾
Для завантаження аудіозаписів з Zadarma в CRM необхідно аби в налаштуваннях внутрішнього номера АТС був увімкнений запис дзвінків у хмару. Після завершення дзвінка, коли аудіозапис буде готовим для завантаження, в CRM буде надіслано повідомлення NOTIFY_RECORD (запис дзвінка готовий для завантаження)
У параметрі call_id_with_rec міститься ідентифікатор, використовуючи який можна отримати запис дзвінка, для цього використовуємо метод GET /v1/pbx/record/request/. У відповіді буде міститися посилання на файл із записом дзвінка, якщо у вашій CRM є власне хмара для зберігання файлів, запис може автоматично завантажуватися в хмару CRM. Якщо свого сховища немає, можна реалізувати кнопку play, щоб прослухати запис за отриманим посиланням. Кнопку відтворення запису дзвінка можна розміщувати поруч з інформацією про дзвінок, наприклад в стрічці ліда/контакту/угоди і в загальній статистиці дзвінків.
Для формування загальної статистики дзвінків в CRM необхідно використовувати інформацію про дзвінки отриману з повідомлень NOTIFY_END и NOTIFY_OUT_END.
6. Автоматичне створення контактів/лідів/угод при дзвінку від нового клієнта ▾
Автоматичне створення сутностей або подій в CRM при вхідних дзвінках з невідомих номерів або вихідні дзвінки на невідомі номери. При надходженні вхідного дзвінка або ініціації вихідного дзвінка, номер телефону звіряється з базою даних з CRM і якщо номер не було знайдено, можна створювати новий контакт/лід/угоду/заявку і призначати цю сутність користувачеві, який здійснював дзвінок. Рекомендуємо робити окремі опції автоматичного створення подій для вхідних і вихідних дзвінків. Для вихідного дзвінка створювати сутність можна: коли дзвінок ініційований (повідомлення NOTIFY_OUT_START), коли була отримана відповідь (повідомлення NOTIFY_ANSWER), по завершенню дзвінка (повідомлення NOTIFY_OUT_END). Номер телефону, на який здійснюється дзвінок, передається в параметрі destination
Для вхідного дзвінка створювати сутність можна коли дзвінок надійшов на внутрішній номер користувача CRM (повідомлення NOTIFY_INTERNAL, номер абонента, що телефонує, передається в параметрі caller_id) для того, щоб під час розмови користувач уже міг відкрити щойно створену картку клієнта, що телефонує, редагувати її, вносити позначки і т.і. По завершенню вхідного дзвінка буде надіслано повідомлення NOTIFY_END, в якому, у параметрі internal буде передано внутрішній номер атс, який прийняв цей дзвінок. Зіставивши цей номер зі списком користувачів CRM, система зрозуміє якого користувача призначити відповідальним. Або можна створювати сутність по завершенню вхідного дзвінка після отримання NOTIFY_END. Деякі CRM системи взагалі не використовують автоматичне створення сутностей, даючи можливість менеджеру, що прийняв дзвінок, визначити цільовий дзвінок чи ні і вручну створити лід/контакт/завдання.
7. Автоматичне направлення вхідного дзвінка на відповідального співробітника ▾
При вхідному дзвінку від існуючого клієнта (його номер телефону вже збережено в CRM) дзвінок автоматично направляється на користувача відповідального за цим клієнтом, абонент, що телефонує, при кожному дзвінку до вас не слухає голосове привітання і потім не вимагає з'єднати з його персональним менеджером, з яким він розмовлял хвилину тому, його дзвінок автоматично буде направлений на телефон відповідального менеджера, користувача CRM. Реалізується за допомогою повідомлення NOTIFY_START
У параметрі caller_id передається номер абонента, що телефонує, якщо цей номер раніше був збережений в CRM (наприклад, як контактний номер одного з клієнтів і за цим клієнтом є відповідальний) можна виконати напрямок вхідного дзвінка на внутрішній номер відповідального. Також можна вказати тривалість дозвону до відповідального користувача, наприклад 15 секунд, якщо відповідальний відлучився і не може підняти слухавку, через 15 секунд вхідний дзвінок від його клієнта буде повернуто на голосове меню і далі дзвінок піде за сценарієм АТС. Реалізується за допомогою відповіді на POST запитNOTIFY_START
{
"redirect": “101”,
"return_timeout": “15”
}
де,
- redirect - внутрішній номер АТС (тризначний номер).
- return_timeout - Значення в секундах >= 3 - тривалість дзвінка внутрішнього номеру, перш ніж дзвінок повернеться на меню, рекомендоване значення 15 або 20.
8. Відображення імені клієнта в ip-телефоні/софтфоні ▾
Опція дозволяє передавати ім'я клієнта з CRM на ip-телефон або софтфон користувача, в якому він приймає вхідний дзвінок. Реалізується за допомогою повідомлення NOTIFY_START і відповіді на нього, в повідомленні, в параметрі caller_id передається номер абонента, що телефонує, якщо номер уже збережений в CRM і закріплений за клієнтом/контактом/лідом, у відповіді на NOTIFY_START можна передати латиницею ім'я клієнта:
{
"caller_name": "IBM"
}
де,
- caller_name - ім'я клієнта/компанії з CRM.
9. Нагадування про пропущені дзвінки ▾
При вхідному дзвінку від клієнта при отриманні повідомлення NOTIFY_END з параметра caller_id можна отримати номер абонента і знайти клієнта/контакт/лід з цим номером і менеджера відповідального за цим клієнтом. Якщо дзвінок не був прийнятим, статус дзвінка не answered в параметрі disposition, відповідальному менеджерові можна створити завдання/нагадування/повідомлення про те що був пропущений дзвінок від клієнта.
10. Чорний список у CRM ▾
Ви можете створити список номерів, дзвінки з яких будуть відхиляється. Вносити номери до чорного списку можна на сторінці налаштувань телефонії, або зробити для кожного користувача кнопку додавання номера дов чорного списку. Реалізується також на підставі повідомлення NOTIFY_START і відповіді на нього. Якщо номер абонента з параметра caller_id знаходиться в чорному списку CRM у відповіді на NOTIFY_START передаємо:
{
"redirect": "blacklist"
}
11. Додавання інтеграції в особистий кабінет Zadarma ▾
Після вдалого виконання попередніх кроків і успішного тестування на рівні окремого користувача можна подати заявку на додавання інтеграції в маркетплейс Zadarma (якщо щомісячна відвідуваність сайту вашої системи перевищує 30 000 користувачів). Це дозволить користуватися даною інтеграцією будь-якому користувачеві Zadarma, який має активований аккаунт і налаштовану АТС. Також це дозволить кінцевому користувачеві швидко і зручно зберігати всі необхідні налаштування. Заявки необхідно надсилати на електронну адресу integration@zadarma.com з поміткою "Запит на додавання інтеграції c системою [Ім'я вашої СRM] в маркетплейс Zadarma". Заявка повинна містити такі додаткові дані:
URL-адресу у Вашій CRM для включення інтеграції
На цю адресу буде відправлятися інформації про користувача Zadarma, який намагається здійснити інтеграцію телефонії і Вашої СRM. В обраному форматі передачі даних (GET, POST) Вам буде переданий унікальний ідентифікатор користувача в форматі рядка md5 hash. У відповідь ви повинні відправити випадково згенерований ключ, який буде прив'язаний до даного користувача. Надалі при кожному запиті до Вашої CRM системи ідентифікатор користувача і відправлений вами хеш будуть використовуватися як підтверджують дані з використанням заголовка:
Authorization: Bearer [userId . hash]
Також ідентифікатор користувача буде передаватися в будь-яке повідомлення про дзвінок в поле zdUserId. Необхідні приклади можливих відповідей.
URL-адресу у Вашій CRM для відключення інтеграції
На цю адресу буде відправлятися запит при спробі відключення користувачем інтеграції. Використовується стандартна авторизація Bearer
URL-адресу у Вашій CRM для отримання повідомлень про дзвінки
Передаються повідомлення про дзвінки для всіх інтегрованих користувачів. Визначити користувача можна використовуючи поле zdUserId. Формат повідомлень можна знайти на сторінці опису API. Використовується стандартна авторизація Bearer.
URL-адресу у Вашій CRM, при зверненні на який можна отримати ім'я клієнта за номером телефону
Необхідно для використання функції "Відображення імені клієнта на софтфона". Необхідний приклад запиту та можливих відповідей. Використовується стандартна авторизація Bearer.
(Опціонально) URL-адресу у Вашій CRM, при зверненні на який можна отримати список менеджерів
Необхідно для використання функції "Прив'язка менеджерів до внутрішніх номерів АТС". Це дозволить користувачеві відразу з особистого кабінету Zadarma зіставити менеджерів CRM і внутрішні номери АТС Zadarma. У разі необхідності синхронізації цих даних з Вашої CRM необхідно також вказати URL адресу, на яку можна відправити ці дані в JSON-форматі. Необхідний приклад запиту та можливих відповідей. Використовується стандартна авторизація Bearer.
Ім'я, що відображується, автора інтеграції (можна відправити назву Вашої компанії і посилання на головну сторінку)
Логотип інтеграції в форматі PNG, на прозорому тлі і з розмірами 500 x 150px
Функціонал з пунктів 6-10 рекомендуємо робити опціональним, щоб кінцевий користувач міг увімкнути/вимкнути необхідні йому функції на сторінці "Налаштування телефонії" в CRM