Интеграция CRM с онлайн чатом на сайте (Replain)
Введение
Есть замечательный онлайн чат для сайта Replain, позволяющий быстро добавить возможность обработки запросов посетителей сайта.
В бесплатной версии есть ряд ограничений, но для простого использования этого вполне хватает.
Совсем недавно мы стали использовать платную версию Replain (стоит базовая версия порядка 5тр в год). Что это дает:
- интеграция с системами аналитики
- API
- рекламные баннеры
- видеоприветствие
- обратный звонок
- история переписки
- и многое другое, см. https://replain.cc/pricing-ru
Для нас главную роль играет возможность работы по API. Мы можем передавать дополнительные данные о пользователе в replain (например, его username, или какие-то другие объекты), а также получать в свою систему всю информацию по взаимодействию через чат онлайн.
JS настройка виджета для передачи дополнительных параметров
Сначала разберем, как передавать информацию с сайта в Replain. Делается это через JS.
Пример кода подключения счетчика с 2 дополнительными полями username и falconGuid
$(function(){
window.replainSettings = {
id: '22bb302e-57a6-4d21-a58a-58f1a79f6289',
fields:{
username : $('.as-username').val(),
falconGuid : as.sys.cookie.get('falconGuid') || ''
}
};
(function(u){var s=document.createElement('script');s.async=true;s.src=u;
var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);
})('https://widget.replain.cc/dist/client.js');
});
Подробности - https://replain.notion.site/607c70a502384310a200e3fb7343b760
В итоге оператор по кнопке Инфо увидит не только IP, локацию пользователя, но и указанные дополнительные параметры.
API передачи данных из веб-хука в CRM
Мы можем сохранять все необходимые данные по переписке в CRM в карточке клиента, а также автоматически создавать клиента в системе по обращению в Replain. Раньше мы это делали вручную - т.е. копировали значимые моменты в CRM по обращению через Replain. Теперь все автоматом попадает в комментарии по лиду.
Документация по веб-хукам API - https://replain.notion.site/Re-plain-API-Webhooks-64927eb510d941d1a1a538cfe7ccc378
Веб-хук - это уведомление во внешнюю систему о каком-то событии с передачей всех необходимых данных. В данном случае Replain уведомляет нашу систему по определенному адресу, что произошло такое-то событие.
Как настроить:
1. Указываем вебхук в настройках API (в Телеграм - Replain -выбор виджета - API - Управление Выбрать webhooks - Указать хук).
Пример: https://falconspace.ru/api/action/replainapi?token=YYYY
2. Создадим таблицу для хранения событий replain
CREATE TABLE [dbo].[as_replainEvents](
[id] [int] IDENTITY(1,1) NOT NULL,
[eventType] [nvarchar](128) NULL,
[eventID] [nvarchar](128) NULL,
[clientID] [nvarchar](128) NULL,
[chatID] [nvarchar](128) NULL,
[realName] [nvarchar](128) NULL,
[form] [nvarchar](1024) NULL,
[ip] [nvarchar](32) NULL,
[page] [nvarchar](128) NULL,
[geolocation] [nvarchar](128) NULL,
[operator] [nvarchar](128) NULL,
[text] [nvarchar](max) NULL,
[fileUrl] [nvarchar](128) NULL,
[utm] [nvarchar](1024) NULL,
[nickname] [nvarchar](128) NULL,
[created] [datetime] NULL,
CONSTRAINT [PK_as_replainEvents] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[as_replainEvents] ADD CONSTRAINT [DF_as_replainEvents_created] DEFAULT (getdate()) FOR [created]
GO
Также добавим в crm_client поле replainClientID nvarchar(128). По нему мы будем понимать, что входящий event относится к существующему клиенту или нет.
3. Создаем Входящий API метод в /asapi
CREATE PROCEDURE [dbo].[api_replainaoi_replainapi]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(256)
as
begin
-- https://replain.notion.site/Re-plain-API-Webhooks-64927eb510d941d1a1a538cfe7ccc378 дока replain API Hook
declare @token nvarchar(max) = (select top 1 lower(Value2) from @parameters where [Key] = 'token')
if(@token<>'YYYY') begin
select 0 Result, 'Invalid token' Msg
return
end
declare @s nvarchar(max) = (select top 1 Value2 from @parameters where [Key] = 'InputStream')
--exec as_print @json
declare @eventID nvarchar(max) = JSON_VALUE(@s, '$.event.id')
declare @clientID nvarchar(max) = JSON_VALUE(@s, '$.client.id')
declare @nickname nvarchar(max) = JSON_VALUE(@s, '$.client.nickname')
declare @realname nvarchar(max) = JSON_VALUE(@s, '$.client.realname')
declare @operator nvarchar(max) = JSON_VALUE(@s, '$.operator.name')
declare @eventType nvarchar(max) = JSON_VALUE(@s, '$.event.type')
declare @text nvarchar(max) = JSON_VALUE(@s, '$.message.text')
declare @fileName nvarchar(max) = JSON_VALUE(@s, '$.message.file.name')
declare @fileUrl nvarchar(max) = JSON_VALUE(@s, '$.message.file.url')
declare @form nvarchar(max) = JSON_query(@s, '$.client.form')
declare @utm nvarchar(max) = JSON_query(@s, '$.utm')
if(exists(select id from as_replainEvents where eventID = @eventID)) begin
select 0 Result, 'Double' Msg
return
end
INSERT INTO [dbo].[as_replainEvents]
([eventType],[eventID],[clientID],[chatID],[realName],[form],[nickname],[ip],[page]
,[geolocation],[operator],[text],[fileUrl],[utm])
SELECT *
FROM OPENJSON(@s, N'$')
WITH (
eventType NVARCHAR(max) N'$.event.type',
eventID NVARCHAR(max) N'$.event.id',
clientID NVARCHAR(max) N'$.client.id',
chatID NVARCHAR(max) N'$.client.chatId',
realname NVARCHAR(max) N'$.client.realname',
form NVARCHAR(max) N'$.client.form' as JSON,
nickname NVARCHAR(max) N'$.client.nickname',
ip NVARCHAR(max) N'$.client.ip',
page NVARCHAR(max) N'$.client.page',
geolocation NVARCHAR(max) N'$.client.geolocation',
--dateCreate NVARCHAR(max) N'$.client.dateCreate',
operator NVARCHAR(max) N'$.operator.name',
text NVARCHAR(max) N'$.message.text',
fileUrl NVARCHAR(max) N'$.message.file.url',
utm NVARCHAR(max) N'$.utm' as json
)
declare @crmInstanceID int = (select instanceID from crm_clients where replainClientID = @clientID)
if(@crmInstanceID is null) begin
-- создаем клиента
declare @ps ExtendedDictionaryParameter
insert into @ps ([Key], Value2)
select 'name' [Key], isnull(@nickname, '') + ' ' + isnull(@realname, '') Value2
union
select 'phone' [Key], '' Value2
union
select 'email' [Key], '' Value2
union
select 'comment' [Key],
'Создан из Replain чата
'+
'Страница ' + isnull(page, '--')+ '
' +
'Место '+ isnull(geolocation, '') + '
' +
'IP '+ isnull(''+ip+'', '') + '
'+
'Поля '+ isnull(form, '') + '
' +
iif(len(@utm)>5, 'UTM '+ isnull(@utm, '') + '
', '' )
Value2
from as_replainEvents where eventID = @eventID
exec [dbo].[crm_createClient]
@parameters = @ps,
@username = '',
@instanceID = @crmInstanceID output
update crm_clients set replainClientID = @clientID where instanceID = @crmInstanceID
end
-- добавляем коммент к клиенту.
declare @commentText nvarchar(max) =''
select top 1 @commentText = isnull(@eventType, '') + ' ' + isnull(@nickname, '') + ' ' + isnull(@realname, '') + ' '+ isnull(@text, '')
if(@eventType='clientSentMessage')
set @commentText = 'Клиент написал: ' + isnull(@text, '') +
iif(len(@fileUrl)>0, 'Файл '+ isnull(@fileName, '')+' '+@fileUrl+'', '')
if(@eventType='clientSentContactForm') set @commentText = 'Клиент отправил контакты: ' + isnull(@form, '') + ' ' + isnull(@realname, '')
if(@eventType='clientSentOfflineForm') set @commentText = 'Клиент отправил контакты в Оффлайн: ' + isnull(@form, '')+ ' ' + isnull(@realname, '')
if(@eventType='clientSentAutoContactForm') set @commentText = 'Клиент отправил контакты (автоформа): ' + isnull(@form, '')+ ' ' + isnull(@realname, '')
if(@eventType='clientSentCallbackRequest') set @commentText = 'Клиент запросил обратный звонок: ' + isnull(@form, '')
if(@eventType='clientSentCallRequest') set @commentText = 'Клиент запросил видео звонок: ' + isnull(@form, '')
if(@eventType='operatorAcceptedCallRequest') set @commentText = 'Оператор принял запрос на звонок: ' + isnull(@form, '')
if(@eventType='operatorChoseClient') set @commentText = 'Оператор '+isnull(@operator, '')+' взял в обработку клиента '
if(@eventType='operatorSentMessage') set @commentText = 'Оператор '+isnull(@operator, '')+' ответил: ' + isnull(@text, '')
insert into as_comments (username, text, created, itemID, type, color, guid)
select '',@commentText, getdate(), @crmInstanceID, 'client', '', newid()
-- SELECT 1 - вывод метаданных о результате операции метода API
select '' Msg, 1 Result, 0 errorCode
end
Что происходит в процедуре:
1. проверяем что на входе передан верный токен в адресе (минимальная проверка).
2. Извлекаем поля и сохраняем в таблицу events (возможно для будущих дополнительных манипуляций с данными).
3. Проверяем был ли клиент с таким clientID. Если не был, то создаем его и записываем общие данные из replain по нему (локация, IP, UTM и т.д.)
4. Добавляем комментарий к карточке клиента. Текст комментария зависит от типа события (eventType)
В итоге при переписке в Replain в CRM в комментарии сохраняются данные по ней.
Заключение
Подобная интеграция упрощает работу оператора. Не нужно копировать в CRM важные данные по переписке.
Дополнительный плюс - можно контролировать через свою систему как работают операторы. Насколько оперативно они отвечают клиенту.
Еще дополнительное применение - это обслуживание своих зарегистрированных пользователей. В этом случае вы можете дополнительно передавать и другие данные для того, чтобы оператор сразу понимал лучше контекст пользователя (например, это может быть прямая ссылка на карточку пользователя для быстрого перехода).
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация, юзабилити
- Лендинги
- Универсальный API
- Примеры интеграций Прием платежей через Яндекс.Кассу Онлайн-платежи. Интеграция с Робокассой (платежный шлюз) Zapier интеграция на платформе Falcon Space Интеграция коллтрекинга МАНГО ОФИС (режим Площадка) Интеграция API DaData.ru подсказки по адресам Интеграция API Курсы валют Центрального Банка РФ в веб-платформе Falcon Space Интеграция API Почта РФ Интеграция API Служба доставки СДЭК (CDEK) Интеграция API Служба доставки Деловые линии Интеграция импорт и парсинг файла CSV Интеграция API IpGeoBase Город по IP-адресу Интеграция API DaData.ru Город по IP-адресу Как вычислить расстояние между 2 точками с координатами через Google Maps Сканирование штрихкодов и QR кодов через камеру и с картинок Получение данных контрагента по ИНН Прием платежей на сайте через CloudPayments Как сделать интеграцию с Мой Склад Внедрение подсказок dadata на сайт Вывод точек на карте Яндекс. Интеграция с Яндекс Карты Интеграция с телефонией Zadarma.com Получение данных о контрагенте - интеграция с сервисом ЗаЧестныйБизнес Интеграция с AMO CRM Как импортировать данные в базу CRM из Google Контакты Вход/регистрация через ВКонтакте(vk.com) Интеграция CRM с онлайн чатом на сайте (Replain) Как связать yandex metrika clientID с пользователем на сайте и посмотреть полный путь его по сайту? Телеграм. Работа с файлами Как сделать обработку входящей почты (создание клиента в CRM из Email) Интеграция сайта с ChatGPT (openAI) Интеграция с Яндекс Метрика Интернет-эквайринг Тинькоф Банк Интеграция с платежным шлюзом LifePay Как сделать вебхук для передачи данных с Тильды на Falcon Space Пополнение средств через Yookassa (Юкасса) Тинькофф Банк - уведомление в учетную систему по операциям с расчетным счетом Интеграция с Ютуб. Получение роликов канала Интеграция с Ozon, Wildberries - извлечение статистики Вывод данных из различных удаленных SQL Server через технологию Linked Server
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта