- PVSM.RU - https://www.pvsm.ru -
В современном мире компании используют большое количество каналов привлечения клиентов: контекстная реклама, баннерная реклама, реклама на радио или ТВ, наружная реклама и так далее. В каждом из этих каналов еще могут присутствовать параметры размещения, например, ключевые слова или площадки. Реклама — дело затратное и у бизнеса возникает понятное желание изучить эффективность тех или иных каналов и площадок. В случае онлайн-продаж все более-менее просто и отработано, есть специальные метки и cookie, которые цепляются к браузеру клиента и, когда он совершает покупку, Google/Yandex/любая другая система выдает вам информацию о том что клиент пришел из определенного канала по каким-то определенным ключевым словам. Но не все компании продают товары или услуги онлайн, многие до сих пор делают это по телефону, у каждого бизнеса своя специфика и телефон как канал продаж до сих пор не утратил своей актуальности. Для анализа эффективности маркетинговых каналов в случае телефонных продаж используется call tracking, дальше мы рассмотрим типы колл-трекинга и расскажем о том как его можно реализовывать.
Существует несколько типов колл-трекинга — статический и динамический. В случае статического колл-трекинга каждому рекламному каналу выделяется свой номер и за ним закрепляется, потом все звонки через номера фиксируются и анализ статистической информации показывает какой из каналов наиболее эффективен. Данный способ хорошо работает, если нужно отслеживать какое-то ограниченное количество каналов. В современном мире рекламодатели хотят отслеживать не только каналы, но и эффективность тех или иных ключевых слов и отлавливать отдельных клиентов, что в конечном итоге ведет к необходимости большого количества номеров.
В этом случае начинают применять динамический колл-трекинг: при динамическом колл-трекинге существует некоторый пул номеров телефонов, который используется для всех каналов, но связка номера с посетителем сайта происходит на лету и действует какое-то ограниченное количество времени, если в течение этого времени клиент позвонит по номеру, то система это отследит. Существует соотношение между количеством посещений сайта и количеством номеров, которое необходимо для трекинга приходящих на сайт посетителей из разных каналов, поэтому сервисы колл-трекинга обычно привязывают цену своих услуг к посещаемости ресурса.
Ну все, с теорией покончили, можно переходить к практике. Мы рассмотрим вариант пула номеров для трекинга, подключенных к платформе VoxImplant [1], которая будет отвечать за обработку входящих звонков и перенаправление их на номер клиента. В сценарии обработки звонков мы предусмотрим получение данных для переадресации с бэкенда по HTTP(S) и запись информации о звонках. Если звонок успешный, то мы сохраним его дату, длительность, URL записи разговора, номер на который пришел звонок и номер на который мы переадресовали вызов, в случае если звонок не состоялся еще добавим информацию об ошибке — почему именно не дозвонились. Перейдем к реализации:
var outbound_call,
dialed_number,
agent_number,
record_url,
call_date,
call_length = 0,
failure_code,
failure_reason,
wsURL = "http://yourwebservice.com/api", // предположим, что данный веб-сервис будет возвращать номера для переадресации
connected = false;
// Обработка входящего вызова
VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) {
// Дата звонка в UTC-формате
call_date = new Date().toUTCString();
// Номер, который набрал клиент
dialed_number = e.destination;
// URL для получения номера для переадресации по набранному номеру
wsURL += "?dialed_number=" + encodeURIComponent(dialed_number);
// Делаем HTTP-запрос к веб-сервису, чтобы получить номер куда будем переадресовывать звонок
Net.httpRequest(wsURL, function (res) {
if (res.code == 200) {
// Получили номер для переадресации
agent_number = res.text;
// Делаем исходящий звонок
outbound_call = VoxEngine.callPSTN(agent_number, dialed_number);
// Вешаем обработчики событий и соединяем входящий и исходящий звонки
VoxEngine.easyProcess(e.call, outbound_call, handleCallsConnected);
outbound_call.removeEventListener(CallEvents.Disconnected);
outbound_call.addEventListener(CallEvents.Disconnected, handleCallDisconnected);
outbound_call.removeEventListener(CallEvents.Failed);
outbound_call.addEventListener(CallEvents.Failed, handleCallFailed);
} else {
// Если веб-сервис недоступен - отбиваем звонок, опционально можно что-нибудь сказать в предответном состоянии
e.call.reject();
}
});
});
// Обработка завершения сессии
VoxEngine.addEventListener(AppEvents.Terminating, function (e) {
// В случае если звонок успешный
if (connected) {
Logger.write("Dialed number: " + dialed_number +
" Agent number: " + agent_number +
" Date: " + call_date +
" Length: " + call_length +
" Record URL: " + record_url);
// Можно отправить эти данные по HTTP на бэкенд с помощью Net.httpRequest
} else {
// Соединение не удалось
Logger.write("Call failed. Code: " + failure_code + " Reason: " + failure_reason);
// Можно отправить информацию по HTTP на бэкенд с помощью Net.httpRequest
}
});
// Исходящий звонок не удался
function handleCallFailed(e) {
failure_code = e.code;
failure_reason = e.reason;
VoxEngine.terminate();
}
// Обработка завершения удачного звонка
function handleCallDisconnected(e) {
call_length = e.duration;
VoxEngine.terminate();
}
// Обработчик удачного соединения
function handleCallsConnected(call1, call2) {
connected = true;
outbound_call.addEventListener(CallEvents.RecordStarted, function (e) {
record_url = e.url;
});
outbound_call.record(); // start call recording
}
Сохраняем его под каким-нибудь названием.Не забудьте сделать свой веб-сервис возвращающий номер для переадресации и поменять wsURL в коде
Это самый простой сценарий, который показывает концепцию использования VoxImplant для колл-трекинга, его можно усложнить и пытаться прокинуть звонок сразу на несколько номеров одновременно, или пытаться дозваниваться на несколько номеров по очереди. Если номеров нужно больше чем есть в наличии, всегда можно воспользоваться добавочными, которые клиент будет вводить при звонке на номер. В данном случае в код нужно будет добавить обработку нажатий клавиш, примерно так:
var inbound_call,
ext = '';
// Обработка входящего вызова
VoxEngine.addEventListener(AppEvents.CallAlerting, function (e) {
inbound_call = e.call;
inbound_call.addEventListener(CallEvents.ToneReceived, function (callevent) {
callevent.call.stopPlayback();
ext += callevent.tone;
if (ext.length == 4) {
wsURL += "?dialed_number=" + encodeURIComponent(dialed_number) + "&ext=" + ext;
// Получаем номер для переадресации
Net.httpRequest(wsURL, function (res) {
if (res.code == 200) {
// Получили номер для переадресации
agent_number = res.text;
// Делаем исходящий звонок
outbound_call = VoxEngine.callPSTN(agent_number, dialed_number);
// Вешаем обработчики событий и соединяем входящий и исходящий звонки
VoxEngine.easyProcess(e.call, outbound_call, handleCallsConnected);
outbound_call.removeEventListener(CallEvents.Disconnected);
outbound_call.addEventListener(CallEvents.Disconnected, handleCallDisconnected);
outbound_call.removeEventListener(CallEvents.Failed);
outbound_call.addEventListener(CallEvents.Failed, handleCallFailed);
} else {
// Если веб-сервис недоступен - отбиваем звонок, опционально можно что-нибудь сказать в предответном состоянии
inbound_call.reject();
}
});
}
});
inbound_call.addEventListener(CallEvents.Connected, function (callevent) {
inbound_call.say("Пожалуйста, введите добавочный.", Language.RU_RUSSIAN_FEMALE);
});
inbound_call.answer();
});
Наверное, можно придумать еще много всего интересного, но в рамки данной статьи это не входит. Важно помнить, что полноценный сервис колл-трекинга требует много работы и готовые сервисы, которые этим занимаются, не просто так берут за это деньги. Буду рад ответить на любые вопросы в комментариях.
Автор: aylarov
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/voip/83454
Ссылки в тексте:
[1] VoxImplant: http://voximplant.com
[2] панель управления: https://manage.voximplant.com/
[3] Applications: https://manage.voximplant.com/#applications
[4] Scenarios: https://manage.voximplant.com/#scenarios
[5] прямо в VoxImplant: https://manage.voximplant.com/#numbers
[6] настройках SIP: https://manage.voximplant.com/#sip
[7] Источник: http://habrahabr.ru/post/250899/
Нажмите здесь для печати.