Интеграция Helpdesk и VoIP за 15 минут

Как привязать существующий номер телефона к системе Helpdesk и принимать на него заявки? Конечно же используя технологии VoIP. 

Создатели Zendesk и Freshdesk реализовали это внутри системы используя собственную встроенную PBX, с поддержкой IVR, голосовой почты и всеми остальными функциями, типичными для облачных IP АТС. Заявки при этом создаются автоматически и есть возможность прикреплять файл с записью разговора. Однако стоимость аренды телефонных номеров и услуги виртуальной АТС может быть не всем по карману, да и список стран, в которых можно приобретать номера ограничен. Ну и это может быть не очень удобно, если у компании уже есть номер, который знают клиенты и менять его нельзя.

Разработчики таких систем, как Live Agent или Vision Helpdesk пошли более простым путем реализовав телефонный канал поступления заявок с помощью сторонних сервисов, например Twilio. А в остальном механизм такой же, как и в Zendesk, автоматическое создание заявки с данными о звонке.

И в случае с Twilio и с Zendesk и Freshdesk услуга телефонии не бесплатна и часто доступна не на самом дешевом тарифе. Как быть, если в Helpdesk нужен только голосовой канал поступления заявок и переплачивать за лишний функционал нет смысла? Связать IP PBX и Helpdesk с помощью API. Мы решили попробовать это с Freshdesk и сервисом IP телефонии с бесплатной облачной АТС Zadarma (полный список функций читайте в обзоре сервиса Zadarma). Zadarma был выбран по причине большого количества стран, в которых продаются номера и стоимостью аренды облачной АТС, а Freshdesk потому, что в пределах трех агентов им можно пользоваться бесплатно и при этом будет доступен API. В итоге схема получается почти бесплатная, оплачивать нужно только номер телефона.

Настройка взаимодействия IP PBX и HelpDesk

Для того, чтобы передавать в HelpDesk информацию о звонках, нам необходимо сделать простой скрипт, который будет принимать информацию от Zadarma и затем через API создавать заявки. Мы сделали скрипт, который передает только номер абонента и начало звонка. При желании можно добавить к этому еще и файл записи разговора, в HelpDesk это может быть очень удобно. Сам скрипт мы разместили у себя на веб-сервере.

В Zadarma в настройках API мы указываем адрес нашего скрипта, а так же берем Key и Secret и прописываем их в скрипте.

Zadarma настройки API

В Freshdesk нужно получить API Key, находится он в настройках пользователя.

freshdesk api key

Сам код у нас уложился в 55 строк:

<?php

// Taken from https://github.com/zadarma/user-api-v1/blob/master/examples/callinfo_callback.php
if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']);

define('ZADARMA_IP', '185.45.152.42');
define('API_SECRET', '5d8c53fdd59dh384dhjf83sff'); // You can get it from https://ss.zadarma.com/api/

$remoteIp = filter_input(INPUT_SERVER, 'REMOTE_ADDR');
$callerId = filter_input(INPUT_POST, 'caller_id'); // number of calling party;
$calledDid = filter_input(INPUT_POST, 'called_did'); // number of called party;
$callStart = filter_input(INPUT_POST, 'call_start'); // start time of call

if ($callStart && ($remoteIp == ZADARMA_IP)) {
 $signature = getHeader('Signature'); // Signature is send only if you have your API key and secret
 $signatureTest = base64_encode(hash_hmac('sha1', $callerId . $calledDid . $callStart, API_SECRET));
 if ($signature == $signatureTest)
 createFreshDeskTicket ($callerId);
}

function getHeader($name)
{
 $headers = getallheaders();
 foreach ($headers as $key => $val) {
 if ($key == $name) return $val;
 }
 return null;
}

// Taken from https://github.com/freshdesk/fresh-samples/blob/master/PHP/create_ticket.php
function createFreshDeskTicket ($phone) {
 $api_key = "alksdjhglakhsfiuwr9q34y";
 $password = "password";
 $yourdomain = "ergonotes";
 $ticket_data = json_encode(array(
 "description" => "Ticket from $phone",
 "subject" => "Ticket from $phone",
 "name" => $phone,
 "phone" => $phone,
 "priority" => 1,
 "status" => 2,
 "source"=> 3
 ));
 $url = "https://$yourdomain.freshdesk.com/api/v2/tickets";
 $ch = curl_init($url);
 $header[] = "Content-type: application/json";
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 curl_setopt($ch, CURLOPT_HEADER, true);
 curl_setopt($ch, CURLOPT_USERPWD, "$api_key:$password");
 curl_setopt($ch, CURLOPT_POSTFIELDS, $ticket_data);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_exec($ch);
 curl_close($ch);
}

На этом настройка завершена. Пробуем звонить и наблюдаем, как появляется новая заявка. В описании у нас текст  “Ticket from” и номер телефона. Кроме этого, номер телефона заполняется и в поле From. Ну и собственно канал поступления у нас будет “По телефону”.

freshdesk ticket from zadarma

Заключение

Само собой разумеется, что подобную схему можно реализовать и с другими системами HelpDesk и IP PBX. И передавать в HelpDesk больше параметров включая файл записи разговора. В данной статье был рассмотрен самый простой случай. Пишите в комментариях свои вопросы и волнующие темы и мы будем продолжать писать об интеграции HelpDesk с другими системами.