Содержание
Передаем негативных клиентов в google sheets с помощью Chatrex и MoreKit
В данной статье рассмотрим следующий кейс: необходимо передать данные из CRM в google sheets (id сделки, имя клиента, имя ответственного), если клиент проявил негатив в общении с менеджером
Для данной реализации будет задан соответствующий промпт в ИИ бота на стороне Chatrex
Настройка бота
Настраиваем боту соответствующий промпт, при котором бот отправит webhook на адрес MoreKit с соответствующими данными, если клиент написал негативное сообщение по заданным условиям промпта.
В Chatrex, в системном промте стоит описать, кем является бот, как он должен общаться (официально, дружественно, и т.п.), а также какой цели он придерживается. Данный блок является крайне важным и эффективность работы чат-бота напрямую зависит от указанного системного промта.
В вкладке “Условия срабатывания” — мы можем указать параметры при которых текущий бот будет работать, дни недели, время (с указанием часового пояса) и условия запуска.
Для начала необходимо выбрать каналы общения, для этого — нажмите на шестеренку, и выберите необходимые каналы в которых будет общаться чат-бот. После чего нажмите кнопку “сохранить”
Далее необходимо выбрать условия запуска бота. Например, при интеграции с каналом amoCRM, можно выбрать в каких воронках и в каких статусах сделки будет работать бот. Условия можно комбинировать, например чат-бот будет работать в воронке “Продажи”, на всех этапах, но только с теми сделками, в которых наше кастомное поле “Статус клиента” равно значению ‘VIP’
Раздел “Свои переменные” — необходим для того, чтобы бот записывал данные от клиента, которые получает во время диалога. Для этого укажите название самой переменной (обязательно на английском) и понятное пояснение для бота что это за переменная. Например нам необходимо чтобы в рамках диалога бот выяснял номер клиента и указывал его в карточке контакта amoCRM.
Создание таблицы google sheets
На данном шаге необходимо создать google таблицу, развернув на ней скрипт обработчик. Копируем скрипт и выполняем новое развертывание по данной документации
Скрипт-обработчик для appscript будет следующий
function doPost(request) { var data = JSON.parse(request.postData.contents), sheet = SpreadsheetApp.getActive().getActiveSheet(), table_headers = get_table_headers(sheet), search_by = request.parameter.search_by; if (table_headers.length == 0) { table_headers = Object.keys(data); fill_headers(sheet, table_headers); } if (!search_by) { return ContentService.createTextOutput(JSON.stringify({ 'error': 'search_by not found' })); } if (is_object(data)) { var fill_func = fill_object; if (is_array(data)) fill_func = fill_array; fill_func(data, table_headers, sheet, search_by); } else { return ContentService.createTextOutput(JSON.stringify({ 'error': 'Unknown data format' })); } return ContentService.createTextOutput(JSON.stringify({ 'result': 'ok' })); } function is_array(data) { return typeof(data) === 'object' && data.length; } function is_object(data) { return typeof(data) === 'object'; } function fill_array(data, table_headers, sheet, search_by) { data.forEach((v) => { fill_object(v, table_headers, sheet, search_by) }); } function fill_object(data, table_headers, sheet, search_by) { var column_id = table_headers.indexOf(search_by); if (column_id < 0) return; var row = get_row_id_by_lead_id(data[search_by], column_id + 1, sheet), data = object_to_list(data, table_headers); sheet.getRange(row, 1, 1, data.length).setValues([data]); } function fill_headers(sheet, headers) { sheet.getRange(1, 1, 1, headers.length).setValues([headers]); } function get_table_headers(sheet) { var cols = sheet.getLastColumn(); if (cols > 0) return sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; else return []; } function object_to_list(data, table_headers){ var result = []; for (var i in table_headers){ var is_null = data[table_headers[i]] === undefined || data[table_headers[i]] === null; result.push(is_null ? '' : data[table_headers[i]]); } return result; } function get_row_id_by_lead_id(lead_id, column, sheet) { var last_row = sheet.getLastRow(); if (last_row > 1) { var data = sheet.getRange(2, column, last_row, 1).getValues(); for (i in data) { if (data[i] && data[i][0] == lead_id) return parseInt(i) + 2; } } return parseInt(last_row) + 1; }
После вставки скрипта и его развертки на таблицу — отправленные на таблицу данные будут заполняться в таблицу
Настройка процесса в MoreKit
Теперь необходимо создать процесс в MoreKit, выбираем нужный тип, в нашем случае тип процесса будет «Другое»
Выстраиваем схему следующим образом
Описание блоков схемы
#1 Регулярные выражения — используется для очистки номера телефона от лишних символов (пробелов, скобок, операторов)
#2 Найти контакты — ищем контакт по очищенному номеру телефона
#3 — ищем контакт по email адресу, если не нашли по телефону
#5 Создать контакт — создаем новый контакт, если не сработал поиск по email и номеру телефона
#6 Создать переменную — записываем найденный/созданный контакт в переменную для удобства обращения к данным контакта
#7 Найти сделки — ищем активную сделку из контакта. В данном блоке используем фильтр по статусу, отсекая поиск сделок в закрытых статусах, чтобы результатом поиска была активная сделка
#8 Создать сделку — Создаем новую сделку, если не нашли активную сделку из контакта, заполняем название сделки, статус, прикрепляем контакт
#9 Создать переменную — записываем найденную/созданную сделку в переменную
#10 HTTP запрос — отправляем HTTP запрос в нашу google таблицу. В данном блоке URL — генерируемый url после разворачивания скрипта. Добавляем один GET параметр search_by, чтобы не было дублей строк в таблице, при отправке автоматически найдется строка с ID сделки, который будет передаваться. Если сделка в таблице не найдется — создастся новая строка. POST параметры — параметры, необходимые для заполнения в таблицу: Имя, Номер, Email, Сообщение, ID сделки
Проверяем результат
Ждем сообщения от бота. Как только поступит негативное сообщение — произойдет отправка webhook со стороны Chatrex в Morekit. В процессе данные обработаются и отправятся в таблицу.
Подводим итоги
В данной статье разобрали, как передать информацию о клиенте, который оставил негативное сообщение с помощью отправки запроса из Chatrex в MoreKit. MoreKit собрал данные внутри процесса и успешно передал их в google таблицу