Кейс: обзвон остывших лидов из Битрикс24

Автообзвон Битрикс24
Недавно к нам обратился клиент с интересной задачей — создание системы автоматического обзвона «забытых» клиентов с целью разогрева. Это интересная задача, потому что позволяет выстроить целую систему автоматических взаимодействий. Мы расскажем подробнее обо всех перипетиях создания конфигурации под Битрикс24.

Выборка

Call Office позволяет создавать выборки любой сложности, учитывающие различные параметры лида. Например, нам необходимо выбрать из Битрикс лиды со статусом «В работе», для которых пользовательское поле «Статус обзвона» пустое или не содержит «Нажата клавиша». Проще говоря, нам нужны потенциальные клиенты, которые ещё не приобрели товар и не отказались от сделки при предыдущем обзвоне.

Пользовательское поле «Статус обзвона» пустое для клиентов, которым программа ещё не звонила. Оно заполняется программой в зависимости от нажатой клиентом клавиши. Если клиент нажимает клавишу на телефоне, выражая свою заинтересованность, то лид передаётся в работу менеджерам.

Уже на этом этапе мы столкнулись с удивительными свойствами API Битрикс24. CRM упрямо отказывалась возвращать строки по условию «поле Статус обзвона пустое». Мы колдовали с синтаксисом и параметрами, прошерстили весь интернет и только обращение в техническую поддержку расставило все точки над «i». Bitrix24 не возвращает строки по условию «пустое поле».

Что же делать? Формировать выборку на стороне Call Office.

[code lang=»js»]

function () {

var Data = {filter:{"STATUS_ID": ‘IN_PROCESS’}, select:[‘Phone’, ‘Name’, ‘UF_CRM_1524132067’]};

var Leads = this.CallMethod (‘crm.lead.list’, Data, true);
Leads = this.Select (‘crm.lead.list’, Data, Leads);

for (var i in Leads) {

var Value = Leads[i].UF_CRM_1524132067;

if (Value != null) {
if (Value.indexOf (‘Нажата клавиша’) !== -1) delete Leads[i]; // Удаляем ненужные
}
}

return this.MakeResult (Leads, ‘crm.lead’);
}

[/code]

Что происходит в этой функции? Мы получаем содержимое полей «Телефон», «Имя» и «Статус обзвона» (пользовательское поле) для строк (лидов), поле «Статус» которых равно «В процессе».

Примечательно, что вы не можете просто получить содержимое пользовательского поля, обратившись к нему по человекопонятному имени «UF_Статус обзвона». Ещё одна фича, а не баг Битрикс24 — в API-запросах вы должны обращаться к пользовательским полям по их ID. О том, как получить ID пользовательского поля подробнее в нашей Wiki.

Далее из полученного списка мы удаляем лиды, которые уже выразили свой интерес посредством нажатия клавиши на телефоне, и, наконец, получаем нужную нам выборку.

К сожалению, это решение невозможно реализовать посредством SQL запросов, поэтому используем прямые запросы к API. Для большинства более простых выборок из Битрикс24 мы реализовали возможность использовать SQL-синтаксис. Мы транслируем SQL в запросы API CRM.

Обзвон и обработка реакции абонента

В данном случае мы сохраняли нажатую абонентом клавишу в пользовательском поле «Статус обзвона».

update crm.lead set UF_Статус обзвона = "Нажата клавиша [Клавиши]" where id = [Выборка.ID]

Это пример SQL запроса на запись данных в пользовательское поле. Он транслируется в запрос к REST API Битрикс24. Здесь мы уже обращаемся к пользовательскому полю по его человекопонятному имени «UF_Статус обзвона». Мы реализовали возможность использования имени пользовательского поля в SQL-запросах к Битрикс24.

Создание задания для менеджеров

Если абонент выражает заинтересованность, то программа должна создать задачу для менеджеров и запланировать контакт.

[code lang=»js»]

function () {

function GetDate (Days) {

var paddatepart = function (part) {return part = 10 ? part.toString() : ‘0’ + part.toString();}

var d = new Date ();
d.setDate (d.getDate () + Days);
d.setSeconds (0);

return d.getFullYear () + ‘-‘ +
paddatepart (1 + d.getMonth ()) + ‘-‘ +
paddatepart (d.getDate ()) + ‘T’ +
paddatepart (d.getHours ()) + ‘:’ +
paddatepart (d.getMinutes ()) + ‘:’ +
paddatepart (d.getSeconds ()) + ‘+03:00’;
}

this.CallMethod (‘crm.activity.add’,
{fields: {"TYPE_ID": 2, // 1 — Встреча, 2 — Звонок, 3 — Задача*
"DIRECTION": 2, // 1 — Входящее, 2 — Исходящее
"OWNER_TYPE_ID": 1, // 1 — Лид, 2 — Сделка, 3 — Контакт, 4 — Компания*
"OWNER_ID": Script.GetVariable (‘Выборка.ID’), // ID абонента
"COMMUNICATIONS": [{VALUE: Script.GetVariable (‘Выборка.PHONE’)}], // Телефон
"SUBJECT": "Перезвонить: нажата клавиша [Клавиши]", // Название звонка
"START_TIME": GetDate (0),
"END_TIME": GetDate (7),
"DESCRIPTION": "Нажата клавиша [Клавиши]", // Статус звонка (Его описание)
"COMPLETED": "N"}}); // Y — выполнено, N — не выполнено

return null;
}

[/code]

Данный код можно разделить на два смысловых блока

Функция GetDate получает текущее время и преобразует его из UNIX-формата в формат Битрикс24. Так же в неё можно передать параметр — число, которое будет прибавлено к текущей дате.

Вторая функция — запрос к API CRM, который создаёт «Активность». Вместе с запросом мы передаём характеристики этой активности. Данный код можно прочитать так:

Запланировать задание типа «исходящий звонок» по такому-то номеру для лида с такими-то ID. Назвать активность «Перезвонить: нажата клавиша такая-то». Дата старта активности — текущее время, дедлайн — текущее время + 7 дней. Описание такое-то, задание не выполнено.

Созданное задание будет отображаться в разделе «Мои дела» CRM Bitrix24.

Что же получилось?

Обойдя все подводные камни, заботливо расставленные разработчиками Битрикс24, мы добрались до цели. Call Office автоматически обзванивает остывшие лиды и выясняет их заинтересованность. Затем сохраняет результаты в CRM и назначает задачи для менеджеров. Конфигурация будет запускаться по расписанию и автоматически пополнять список заданий.

Если вам интересны статьи такого формата, то напишите в комментариях!

Понравилась статья? Расскажите друзьям!

2 комментария “Кейс: обзвон остывших лидов из Битрикс24

  1. Александр Ответ

    Статьи подобного характера (с описанием возникающих проблем и изложением способов их решения) крайне полезны с точки зрения наработки собственного опыта обхода «камней», подобных описанным в статье.
    Было бы интересно рассмотрение нюансов интеграции с прочими СУБД (в т.ч. более простыми), а также CRM системами.

    • Call Office Team Автор записиОтвет

      Вас поняли, будем собирать материалы по этой теме.

Добавить комментарий

Ваш адрес email не будет опубликован.