В современном мире компании используют большое количество каналов привлечения клиентов: контекстная реклама, баннерная реклама, реклама на радио или ТВ, наружная реклама и так далее. В каждом из этих каналов еще могут присутствовать параметры размещения, например, ключевые слова или площадки. Реклама — дело затратное и у бизнеса возникает понятное желание изучить эффективность тех или иных каналов и площадок. В случае онлайн-продаж все более-менее просто и отработано, есть специальные метки и cookie, которые цепляются к браузеру клиента и, когда он совершает покупку, Google/Yandex/любая другая система выдает вам информацию о том что клиент пришел из определенного канала по каким-то определенным ключевым словам. Но не все компании продают товары или услуги онлайн, многие до сих пор делают это по телефону, у каждого бизнеса своя специфика и телефон как канал продаж до сих пор не утратил своей актуальности. Для анализа эффективности маркетинговых каналов в случае телефонных продаж используется call tracking, дальше мы рассмотрим типы колл-трекинга и расскажем о том как его можно реализовывать.
Существует несколько типов колл-трекинга — статический и динамический. В случае статического колл-трекинга каждому рекламному каналу выделяется свой номер и за ним закрепляется, потом все звонки через номера фиксируются и анализ статистической информации показывает какой из каналов наиболее эффективен. Данный способ хорошо работает, если нужно отслеживать какое-то ограниченное количество каналов. В современном мире рекламодатели хотят отслеживать не только каналы, но и эффективность тех или иных ключевых слов и отлавливать отдельных клиентов, что в конечном итоге ведет к необходимости большого количества номеров.
В этом случае начинают применять динамический колл-трекинг: при динамическом колл-трекинге существует некоторый пул номеров телефонов, который используется для всех каналов, но связка номера с посетителем сайта происходит на лету и действует какое-то ограниченное количество времени, если в течение этого времени клиент позвонит по номеру, то система это отследит. Существует соотношение между количеством посещений сайта и количеством номеров, которое необходимо для трекинга приходящих на сайт посетителей из разных каналов, поэтому сервисы колл-трекинга обычно привязывают цену своих услуг к посещаемости ресурса.
Ну все, с теорией покончили, можно переходить к практике. Мы рассмотрим вариант пула номеров для трекинга, подключенных к платформе VoxImplant, которая будет отвечать за обработку входящих звонков и перенаправление их на номер клиента. В сценарии обработки звонков мы предусмотрим получение данных для переадресации с бэкенда по HTTP(S) и запись информации о звонках. Если звонок успешный, то мы сохраним его дату, длительность, URL записи разговора, номер на который пришел звонок и номер на который мы переадресовали вызов, в случае если звонок не состоялся еще добавим информацию об ошибке — почему именно не дозвонились. Перейдем к реализации:
Это самый простой сценарий, который показывает концепцию использования VoxImplant для колл-трекинга, его можно усложнить и пытаться прокинуть звонок сразу на несколько номеров одновременно, или пытаться дозваниваться на несколько номеров по очереди. Если номеров нужно больше чем есть в наличии, всегда можно воспользоваться добавочными, которые клиент будет вводить при звонке на номер. В данном случае в код нужно будет добавить обработку нажатий клавиш, примерно так:
Наверное, можно придумать еще много всего интересного, но в рамки данной статьи это не входит. Важно помнить, что полноценный сервис колл-трекинга требует много работы и готовые сервисы, которые этим занимаются, не просто так берут за это деньги. Буду рад ответить на любые вопросы в комментариях.
Существует несколько типов колл-трекинга — статический и динамический. В случае статического колл-трекинга каждому рекламному каналу выделяется свой номер и за ним закрепляется, потом все звонки через номера фиксируются и анализ статистической информации показывает какой из каналов наиболее эффективен. Данный способ хорошо работает, если нужно отслеживать какое-то ограниченное количество каналов. В современном мире рекламодатели хотят отслеживать не только каналы, но и эффективность тех или иных ключевых слов и отлавливать отдельных клиентов, что в конечном итоге ведет к необходимости большого количества номеров.
В этом случае начинают применять динамический колл-трекинг: при динамическом колл-трекинге существует некоторый пул номеров телефонов, который используется для всех каналов, но связка номера с посетителем сайта происходит на лету и действует какое-то ограниченное количество времени, если в течение этого времени клиент позвонит по номеру, то система это отследит. Существует соотношение между количеством посещений сайта и количеством номеров, которое необходимо для трекинга приходящих на сайт посетителей из разных каналов, поэтому сервисы колл-трекинга обычно привязывают цену своих услуг к посещаемости ресурса.
Ну все, с теорией покончили, можно переходить к практике. Мы рассмотрим вариант пула номеров для трекинга, подключенных к платформе VoxImplant, которая будет отвечать за обработку входящих звонков и перенаправление их на номер клиента. В сценарии обработки звонков мы предусмотрим получение данных для переадресации с бэкенда по HTTP(S) и запись информации о звонках. Если звонок успешный, то мы сохраним его дату, длительность, URL записи разговора, номер на который пришел звонок и номер на который мы переадресовали вызов, в случае если звонок не состоялся еще добавим информацию об ошибке — почему именно не дозвонились. Перейдем к реализации:
- Регистрируем и активируем аккаунт VoxImplant
- Заходим в панель управления и создаем приложение в разделе «Приложения», можно назвать его tracking
- Внутри приложения в разделе «Сценарии» создаем новый сценарий со следующим содержанием:
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 в коде
- Теперь есть 2 варианта с номерами — можно взять их прямо в VoxImplant, или же в настройках SIP прописать адрес своего транка, откуда будут звонки идти на платформу.
- Заходим в приложения tracking, которое мы создали ранее, и там в табе «Роутинг» создаем новое правило. Назовем его, например, InboundCalls, а маску оставим .*. Если мы хотим все входящие звонки отправить на обработку нашим сценарием, прикрепляем сценарий к правилу.
- Можно звонить
Это самый простой сценарий, который показывает концепцию использования 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();
});
Наверное, можно придумать еще много всего интересного, но в рамки данной статьи это не входит. Важно помнить, что полноценный сервис колл-трекинга требует много работы и готовые сервисы, которые этим занимаются, не просто так берут за это деньги. Буду рад ответить на любые вопросы в комментариях.
Only registered users can participate in poll. Log in, please.
Интересен ли вам данный материал?
78.95% Да75
8.42% Нет8
12.63% Не очень12
95 users voted. 24 users abstained.