Запрос
HTTP-заголовки:
- Access-Token – API-ключ
- SiteId – ID ЛК Calltouch
Тело запроса в формате JSON:
"crm": "Название CRM",
"orders": [
// Сделка 1
{
"matching": [
{
"type": "request",
"requestParams": {
"requestId": 1,
"tags": ["тег1", "тег2"],
"tagsLogic": "and"
}
},
{
"type": "call",
"callParams": {
"callId": 2 ,
"tags": ["тег"],
"tagsLogic": "and"
}
},
{
"type": "requestContact",
"requestContactParams": {
"emails": ["name@server.com"],
"phones": ["79157771122", "+7 (915) 888-11-22"],
"date": "Дата и время заявки",
"tags": ["тег"],
"tagsLogic": "and",
"requestTypeToMatch": "nearestUniq",
"searchDepth": 120
}
},
{
"type": "callContact",
"callContactParams": {
"phones": ["84953338877"],
"date": "Дата и время звонка",
"tags": ["тег"],
"tagsLogic": "and",
"callTypeToMatch": "nearestUniq",
"searchDepth": 120
}
},
{
"type": "call",
"callParams": {
"callId": 2,
"tags": ["тег"],
"tagsLogic": "and"
}
},
{
"type": "customSources",
"customSourceParams": {
"source": "Произвольный источник",
"medium": "Произвольный канал",
"campaign": "Произвольная кампания",
"content": "Произвольное объявление",
"term": "Произвольная ключевая фраза"
}
},
{
"type": "withoutSource"
}
],
"orderNumber": "ID сделки 1 внутри CRM",
"status": "Название статуса",
"statusDate": "Дата и время установки текущего статуса сделки",
"orderDate": "Дата и время создания сделки",
"revenue": "100000.50",
"manager": "ФИО продавца",
"comment": {
"text": "Комментарий ко сделки"
},
"addTags": [
{"tag": "Тег 1"},
{"tag": "Тег 2"},
{"tag": "Тег N"}
],
"addTagsToLead": {
"tags": [
{
"tag": "Тег 1"
},
{
"tag": "Тег 2"
}
],
"overwrite": true
},
"customFields": [
{"field": "grossprofit", "value": "456.50"},
{"field": "name", "value": "123"}
]
}
// Сделка N
...
]
}
Комментарии через // следует убрать из запроса перед его выполнением.
Параметры запроса
Параметр | Формат | Обязательный | Описание |
crm | string | Да | Одно на все сделки, оно будет отображаться в карточке сделки в ЛК. Любые символы, максимум 30. |
orders | array | Да | Массив сделок. Можно перечислить до 100 сделок за 1 запрос. Склейка происходит в режиме онлайн. Результат склеивания будет доступен сразу же в ответе. Обязательно. |
orders.matching | object | Да |
Здесь задается приоритет использования разных типов матчинга, по которым сделка будет пытаться склеиться с лидом. Чем выше находится строка с типом матчинга, тем больший приоритет она имеет. Если матчинга завершится на каком-либо типе, остальные типы ниже будут проигнорированы. Одинаковые типы матчинга могут повторяться, но общее кол-во типов не должно превышать 20 строк. |
orders.matching.type | string | Обязательно нужно указать хотя бы 1 тип маппинга в приоритете. | Тип матчинга. Возможные значения:
Типы матчинга customSources и withoutSource являются конечными, т.е. нет смысла размещать под ними другие типы, т.к. типы customSources и withoutSource сработают 100%. |
orders.matching .requestParams |
object | Обязательно, если "type": "request" | Параметры матчинга заявки по ID |
orders.matching .requestParams.requestId |
integer / string | Обязательно, если "type": "request" |
Возможные параметры:
|
orders.matching .requestParams.tags |
array | Необязательно |
Если указан список тегов, то найденная заявка перед склейкой будет дополнительно проверена на наличие указанных тегов. И только если у заявки будут эти теги, то сделка будет к ней прикреплена. Иначе сделка не прикрепляется к заявке, а матчинг переключается на следующий тип в приоритете. Фильтрация по тегам может передаваться вместе с типами call, request, callContact и requestContact. |
orders.matching .requestParams.tagsLogic |
string | Обязательно, если указан параметр tags и в нем передается более 1 тега | Логические условие между тегами. Возможные значения: and (у заявки должны быть все перечисленные теги) или or (у заявки должен быть хотя бы один из перечисленных тегов). |
orders.matching .callParams |
object | Обязательно, если "type": "call" | Параметры матчинга звонка по ID |
orders.matching .callParams.callId |
integer / string | Обязательно, если "type": "call" |
Возможные параметры:
|
orders.matching .callParams.tags |
array | Необязательно | Аналогично описанию из блока requestParams |
orders.matching .callParams.tagsLogic |
string | Обязательно, если указан параметр tags и в нем передается более 1 тега | Аналогично описанию из блока requestParams |
orders.matching .requestContactParams |
object | Обязательно, если "type": "requestContact" | Параметра матчинга заявки по номеру телефона / почте / дате сделки |
orders.matching .requestContactParams .emails |
array | Должен быть передан хотя бы один из параметров – emails или phones или оба. | Можно перечислить несколько почт, формат x@x.x, любые символы. Должен быть передан хотя бы один из параметров – emails или phones или оба. |
orders.matching .requestContactParams .phones |
array |
Можно перечислить несколько номеров телефонов. Номера могут быть в любом формате, 71234567890, +71234567890, 8 (123) 456-78-90 и любом другом – мы должны автоматически конвертировать на бэке их в 11-значный формат. Если переданы и phones и emails, то поиск заявки идет сначала по номерам, если не найдем, то по почтам. |
|
orders.matching .requestContactParams .date
|
string | Обязательно, если "type": "requestContact" |
Дата и время, относительно которой будет происходить поиск подходящей заявки в прошлое на кол-во дней из параметра searchDepth. Формат: dd-mm-yyyy hh:mm:ss. |
orders.matching .requestContactParams .tags |
array | Необязательно | Аналогично описанию из блока requestParams |
orders.matching .requestContactParams .tagsLogic |
string | Обязательно, если указан параметр tags и в нем передается более 1 тега | Аналогично описанию из блока requestParams |
orders.matching .requestContactParams .requestTypeToMatch |
string | Обязательно, если "type": "requestContact" |
Типы заявок, среди которых будет происходить поиск для склеивания со сделками. Возможные значения:
|
orders.matching .requestContactParams .searchDepth |
integer | Обязательно, если "type": "requestContact" | Глубина поиска подходящей заявки от даты лида date, указывается в мин. Возможные значения от 1 до 525600 мин (1 год). |
orders.matching .callContactParams |
object | Параметры матчинга звонка по номеру телефона / дате сделки | |
orders.matching .callContactParams .phones |
array | Обязательно, если "type": "callContact" | Аналогично описанию из блока requestContactParams |
orders.matching .callContactParams .date
|
string | Обязательно, если "type": "callContact" |
Дата и время, относительно которой будет происходить поиск подходящего звонка в прошлое на кол-во дней из параметра searchDepth. Формат: dd-mm-yyyy hh:mm:ss. |
orders.matching .callContactParams.tags |
array | Необязательно | Аналогично описанию из блока requestParams |
orders.matching .callContactParams .tagsLogic |
string | Обязательно, если указан параметр tags и в нем передается более 1 тега | Аналогично описанию из блока requestParams |
orders.matching .callContactParams .callTypeToMatch |
string | Обязательно, если "type": "callContact" | Аналогично описанию из блока requestContactParams |
orders.matching .callContactParams .searchDepth |
integer | Обязательно, если "type": "callContact" | Аналогично описанию из блока requestContactParams |
orders.matching .customSourceParams |
object | Обязательно, если "type": "customSources" | Не осуществлять матчинг сделки, а присвоить сделки произвольный источник |
orders.matching .customSourceParams .source |
string | Обязательно, если "type": "customSources" | Произвольный источник |
orders.matching .customSourceParams .medium |
string | Обязательно, если "type": "customSources" | Произвольный канал |
orders.matching .customSourceParams .campaign |
string | Обязательно, если "type": "customSources" | Произвольная кампания |
orders.matching .customSourceParams .content |
string | Нет | Произвольное объявление |
orders.matching .customSourceParams .term |
string | Нет | Произвольная ключевая фраза |
orders.orderNumber | string | Да | Уникальный ID сделки внутри CRM. Любые символы, максимум 100. |
orders.status | string | Да | Название статуса. Любые символы, максимум 100. |
orders.statusDate | string | Да |
Дата и время установки текущего статуса сделки. Формат: dd-mm-yyyy hh:mm:ss. |
orders.orderDate | string | Да |
Дата и время создания сделки. Формат: dd-mm-yyyy hh:mm:ss. Дата и время создания сделки должно быть равно или предшествовать дате и времени установки текущего статуса. |
orders.revenue | string | Нет | Выручка со сделки. Только числа, дробная часть отделяется точками. Максимум 100 символов. Если не указано, то считаем выручку равной 0. |
orders.manager | string | Нет | ФИО продавца. Любые символы, максимум 100. |
orders.comment.text | object | Нет |
Комментарий ко сделке. Любые символы, максимум 1000. Формат: "comment": { |
orders.addTags.tag | array | Нет |
Добавление тегов ко сделки. Если такие теги уже есть в ЛК, новые не создаются, а используются существующие. Любые символы, максимум 100 в каждом теги. Максимум 100 тегов. Формат: "addTags": [ |
orders.addTagsToLead .tags |
array | Нет |
Добавление тегов ко лиду, к которому приклеивается сделка. Если такие теги уже есть в ЛК, новые не создаются, а используются существующие. Необязательно, максимум 100 тегов. Если сделка не склеивается ни с каким лидом, то теги соответственно не добавляем. Формат: "addTagsToLead": { |
orders.addTagsToLead .overwrite |
boolean | Нет | Перезаписывать ли существующие теги у лида или нет. Обязательно, если указывается addTagsToLead. |
orders.customFields | array | Нет |
Пользовательские поля API. Для использования их необходимо заранее добавить в настройках API ЛК Calltouch. В field должно передаваться значение, добавленное в настройках API ЛК Calltouch. В value можно передаваться только цифры, дробная часть отделяется точкой, максимум 100 символов. Если не указано, то считаем значение поля равной 0. Формат: "customFields": [ |
Ответ
Процесс матчинга запускается сразу же после отправки запроса, после чего сразу же возвращается и ответ, пример:
"meta": [],
"data": {
"orders": [
{
"orderNumber": "UdvPC9bBjjLnEJ9R",
"calltouchOrderId": 2396375,
"matchedType": "request",
"created": true,
"callInfo": null,
"requestInfo": {
"requestId": 1257513,
"requestNumber": "1257513"
},
"customSources": null,
"error": null
}
]
}
}
Если API-токен не указан, то матчинг не выполняется и выводится ошибка:
"meta": [],
"data": {
"message": "Ошибка доступа"
}
}
Если API-токен указан не верно, то матчинг не выполняется и выводится ошибка:
"message": "Access token не найден"
}
Параметры ответа
Параметр | Формат | Описание |
data.orders.orderNumber | string | Переданный ID сделки из внешний CRM в запросе на создание. |
data.orders.calltouchOrderId | string | ID сделки в Calltouch. Может быть null, если created=false. |
data.orders.matchedType | string |
Тип матчинга из параметра matching API-запроса на создание сделки, по которому сделка склеилась с лидом. Если сделка не склеилась со сделкой и тип withoutSource не был передан, то отображается значение null. |
data.orders.created | boolean |
Флаг создания сделки. Возможные значения:
Создание и склеивание – разные процессы, т.к. сделка может быть создана и без связи с лидом. |
data.orders.callInfo | object |
Если сделка склеилась со звонком, то блок callInfo не пустой. |
data.orders.callInfo.callId | string | ID звонка в Calltouch |
data.orders.callInfo.callReferenceId | string | ID звонка из API-метода импорта звонков, может быть null |
data.orders.callInfo.sipCallId | string | ID звонка с АТС |
data.orders.requestInfo | object | Если сделка склеилась с заявкой, то блок requestInfo не пустой |
data.orders.requestInfo.requestId | string | ID заявки в Calltouch |
data.orders.requestInfo.requestNumber | string | ID заявки, переданный из формы сайта |
data.orders.customSources | object |
Если сделка не склеилась ни со звонком, ни с заявкой, но у нее были указаны произвольные источники, то в ответе отображаются они. Если сделка не склеилась ни со звонком, ни с заявкой, и у нее не было указаны произвольный источники, то отображается null. |
data.orders.customSources.source | string | Произвольный источник |
data.orders.customSources.medium | string | Произвольный канал |
data.orders.customSources.campaign | string | Произвольная кампания |
data.orders.customSources.content | string | Произвольное объявление |
data.orders.customSources.term | string | Произвольная ключевая фраза |
data.orders.error | string | Отображется причина ошибки маппинга |
Если в запросе обнаруживаются ошибки валидации, то матчинг не выполняется и выводится ошибка:
"meta": [],
"data": {
"type": "validationError",
"apiErrorData": null,
"validationErrorData": {
"violations": [
{
"fieldPath": "orders[0].statusDate",
"message": "Значение даты и времени недопустимо."
}
]
}
}
}