Добавить в корзинуПозвонить
Найти в Дзене

Создание сделки в Битрикс24 на основе заказа из МойСклад

Автоматизация обмена данными между МойСклад и Битрикс24 позволяет компаниям оптимизировать управление заказами, сделками, контрагентами и товарами, исключив ручной труд и минимизировав ошибки. В нашей основной статье мы описали логику сложного сценария интеграции МойСклад и Битрикс24 через платформу Пинкит, которая решает три ключевые задачи: Для реализации этих задач мы разработали 9 сценариев интеграции, каждый из которых выполняет свою роль в обеспечении бесшовного обмена данными (готовые шаблоны интеграции можно скачать тут): В данной статье рассмотрим пример настройки одной из 9 интеграций для создания сделки в Битрикс24 на основе заказа из МойСклад. На этом шаге настраиваем триггер для запуска интеграции. Получаем данные при создании нового заказа в МойСклад: 2.1. Проверяем подходит ли заказ под условия для выгрузки Используем Фильтр элементов массива в поле source.attributes. Условие - (Текст) Содержит, Сравниваемое значение - Синхронизировать с Битрикс24. Используем проверку в
Оглавление

Автоматизация обмена данными между МойСклад и Битрикс24 позволяет компаниям оптимизировать управление заказами, сделками, контрагентами и товарами, исключив ручной труд и минимизировав ошибки.

В нашей основной статье мы описали логику сложного сценария интеграции МойСклад и Битрикс24 через платформу Пинкит, которая решает три ключевые задачи:

  1. Синхронизация сделок и заказов между системами.
  2. Синхронизация контрагентов и клиентов (физические лица, юридические лица, контактные лица).
  3. Синхронизация товаров по UUID для точного соответствия номенклатуры.

Для реализации этих задач мы разработали 9 сценариев интеграции, каждый из которых выполняет свою роль в обеспечении бесшовного обмена данными (готовые шаблоны интеграции можно скачать тут):

-2

В данной статье рассмотрим пример настройки одной из 9 интеграций для создания сделки в Битрикс24 на основе заказа из МойСклад.

МойСклад: заказ создан → Битрикс24: создать сделку

Шаг 1: Откуда

На этом шаге настраиваем триггер для запуска интеграции. Получаем данные при создании нового заказа в МойСклад:

-3

Шаг 2: Инструменты

2.1. Проверяем подходит ли заказ под условия для выгрузки

  • Синхронизировать с Битрикс24

Используем Фильтр элементов массива в поле source.attributes. Условие - (Текст) Содержит, Сравниваемое значение - Синхронизировать с Битрикс24.

-4
  • Если "Синхронизировать с Битрикс24 = Да", тогда продолжить, иначе прервать

Используем проверку в поле step1.0.value. Условие - (Логическое) Истина, Действие - Продолжить, если проверка пройдена.

-5
  • Найти сопоставление с заказом в Битрикс24

Используем Поиск ID соответствующий сущности в поле source.id. Сопоставляем сделку и заказ.

-6
  • Если заказ не найден, тогда продолжить, иначе прервать

Используем проверку в поле step3. Условие - (Логическое) Ложь, Действие - Продолжить, если проверка пройдена.

-7

2.2. Организация

У заказчика несколько организаций, настраиваем выбор при создании заказа.

  • Какую организацию выбрать при создании заказа Х или У

Используем инструмент Если-иначе в поле source.organization.meta.href. Условие*(Текст) Содержит, Сравниваемое значение - api.moysklad.ru/api/remap/1.2/entity/organization/c37b9504-cfe5-11ea-0a80-09ca001feaaa, Результат при успешной проверке = 330, Результат при неуспешной проверке = 331.

-8

2.3. Склад

  • Получить список складов в МойСклад

Используем API-запрос Методом GET с указанием URL = /entity/store.

-9
  • Найти нужный склад в списке

Используем Фильтр элементов массива в поле step6.rows. Условие*(Текст) Содержит, Сравниваемое значение - source.store.meta.href.

-10
  • Сопоставить название склада и ID с Битрикс24

Сопоставляем склады в поле step7.0.name.

-11

2.4. Проект

  • Получить список проектов в МойСклад

Используем API-запрос Методом GET с указанием URL = /entity/project.

-12
  • Найти нужный Проект из списка

Используем Фильтр элементов массива в поле step9.rows. Название поля внутри элемента массива - meta.href. Условие*(Текст) Содержит, Сравниваемое значение - source.project.meta.href.

-13
  • Сопоставить название проекта и ID с Битрикс24

Сопоставляем проекты в поле step10.0.name.

-14

2.5. Канал продаж

  • Получить список Каналов Продаж в МойСклад

Используем API-запрос Методом GET с указанием URL = /entity/saleschannel.

-15
  • Найти нужный Канал Продаж из списка

Используем Фильтр элементов массива в поле step12.rows. Название поля внутри элемента массива - meta.href. Условие*(Текст) Содержит, Сравниваемое значение = source.salesChannel.meta.href.

-16
  • Сопоставить название Канал Продаж и ID с Битрикс24

Используем Сопоставление данных в поле step13.0.name.

-17

2.6. Заказ оплачен

  • Найти в доп. полях "Заказ оплачен"

Используем Фильтр элементов массива в поле source.attributes. Условие*(Текст) Содержит, Сравниваемое значение - Заказ оплачен.

-18
  • Сопоставить true и false с Битрикс24

Используем сопоставление данных в поле step15.0.value. Условие выполнения = step15.

-19

2.7. Сборщик

  • Найти в доп.полях "Сборщик"

Используем Фильтр элементов массива в поле source.attributes. Условие*(Текст) Содержит, Сравниваемое значение = Сборщик.

-20
  • Найти сотрудника в Битрикс24 по ФИО из МойСклад

Используем сопоставление данных в поле step17.0.value.name. Условие выполнения = step17. Сопоставляем сотрудников.

-21

2.8. Метод оплаты

  • Найти в доп.полях "Метод оплаты"

Используем Фильтр элементов массива в поле source.attributes. Условие*(Текст) Содержит, Сравниваемое значение - Метод оплаты.

-22
  • Получить список Метод оплаты в МойСклад

Используем Сопоставление данных в поле step19.0.value.name. Сопоставляем методы оплаты.

-23

2.9. Получить все остальные поля, которые не справочники

  • Срок резерва

Используем Фильтр элементов массива в поле source.attributes. Название поля внутри элемента массива - name. Условие*(Текст) Содержит, Сравниваемое значение = Срок резерва.

-24
  • Имя

Используем Фильтр элементов массива в поле source.attributes. Условие*(Текст) Содержит, Сравниваемое значение = Имя.

-25
  • Ярлык заказа

Используем Фильтр элементов массива в поле source.attributes. Условие*(Текст) Содержит, Сравниваемое значение = Ярлык заказа.

-26

2.10. Преобразуем все даты к формату ISO 8601 для Битрикс24

  • Дата создания и Плановая дата доставки

Используем Форматирование даты/времени в поле source.created, source.deliveryPlannedMoment.

-27
  • Найти доп.поле "Срок резерва"

Используем Фильтр элементов массива в поле source.attributes. Условие*(Текст) Содержит, Сравниваемое значение = Срок резерва.

-28
  • Срок резерва

Используем Форматирование даты/времени в поле step25.0.value.

-29

2.11. Получаем информацию о контрагенте в МойСклад

  • Обрезать ссылку с контрагентом, чтобы дальше его получить через API-запрос

Преобразуем строку в массив в поле source.agent.meta.href.

-30
  • Получаем контрагента по полученной ссылке

Используем API-запрос Методом GET с указанием URL = {{step27.1}}.

-31

2.12. Определяем тип контрагента

  • Определяем тип контрагента Юр.лицо, ИП, Физ.лицо

Используем Сопоставление данных в поле step28.companyType.

-32
  • Если это Юр.лицо ИЛИ ИП, тогда Истина и ищем по ИНН в Битрикс24

Используем Сопоставление данных в поле step29.

2.13. Создание контрагента в Битрикс24 если это Юр.лицо или ИП

→ Ищем контрагента по ИНН →

Используем API-запрос Методом GET с указанием URL = /crm.requisite.list?filter[RQ_INN]={{step28.inn}}.

-33

→ Если не нашли → ищем по UID →

Используем инструмент Если-иначе в поле step31.result. Условие*(Логическое) Ложь, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-34

→ ищем по UID →

Используем API-запрос Методом GET с указанием URL = /crm.company.list?filter[UF_CRM_UID]={{step28.id}}.

-35

→ Если и по UID нет → создаём компанию →

Используем инструмент Если-иначе в поле step33.result. Условие*(Логическое) Ложь, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-36

→ создаём компанию →

Используем API-запрос Методом POST с указанием URL = /crm.company.add.

Запрос:

{
"fields": {
"TITLE": "{{step28.name|escape()}}",
"PHONE": [
{
"VALUE": "{{step28.phone|default()}}",
"VALUE_TYPE": "WORK"
}
],
"EMAIL": [
{
"VALUE": "{{step28.email|default()}}",
"VALUE_TYPE": "WORK"
}
],
"COMMENTS": "{{step28.description|default()}}",
"UF_CRM_UID": "{{step28.id}}"
}
}

-37

→ для созданной компании добавляем реквизиты→

Используем API-запрос Методом POST с указанием URL = /crm.requisite.add.

Запрос:

{
"fields": {
"NAME": "{{step28.name|escape()}}",
"ENTITY_TYPE_ID": 4,
"ENTITY_ID": "{{step35.result}}",
"PRESET_ID": "{{step29}}",
"RQ_COMPANY_FULL_NAME": "{{step28.legalTitle|escape()}}",
"RQ_COMPANY_NAME": "{{step28.name|escape()}}",
"RQ_EMAIL": "{{step28.email|default()}}",
"RQ_PHONE": "{{step28.phone|default()}}",
"RQ_INN": "{{step28.inn|default()}}",
"RQ_KPP": "{{step28.kpp|default()}}",
"RQ_OGRN": "{{step28.ogrn|default()}}",
"RQ_OKPO": "{{step28.okpo|default()}}"
}
}

-38

→ добавляем к реквизитам адрес

Используем API-запрос Методом POST с указанием URL = /crm.address.add.

Запрос:

{
"fields": {
"TYPE_ID": 6,
"ENTITY_TYPE_ID": 8,
"ENTITY_ID": "{{step36.result}}",
"ADDRESS_1": "{{step28.legalAddress}}"
}
}

-39

2.14. Если мы создали новую компанию или нашли старую, определяем какой ID берем

Преобразовать созданную компанию в Массив

Используем Преобразование типов данных в поле step35.result|default().

-40
  • Преобразовать найденную компанию по ИНН в Массив

Используем Преобразование массива объектов в поле step31.result.

-41
  • Преобразовать найденную компанию по UID в Массив

Используем Преобразование массива объектов в поле step33.result.

-42
  • Объединить все найденные ID и взять 1й

Используем Объединение массивов step38, step39, step40.

-43

2.15. Создание контакта в Битрикс24, если это физ.лицо в МС

Если это физ.лицо, тогда начать поиск контакта в Битрикс24

Используем инструмент Если-иначе в поле step28.companyType. Условие*(Текст) Содержит, Сравниваемое значение = individual, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-44

→ ищем контакт по email →

Используем API-запрос Методом GET с указанием URL = /crm.contact.list?filter[EMAIL]={{step28.email}}.

-45

→ ЕслиEmail нет → ищем по Phone →

Используем инструмент Если-иначе в поле step43.result. Условие*(Логическое) Ложь, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-46

→ закодировать + у телефона если он есть→

Используем Замену по регулярному выражению в поле step28.phone. Условие выполнения = step42.

-47

→ ищем контакт по phone→

Используем API-запрос Методом GET с указанием URL = /crm.contact.list?filter[PHONE]={{step45}}. Условие выполнения = step42.

-48

→ Если по Email и Phone нет → ищем по UID →

Используем инструмент Если-иначе в поле step46.result. Условие*(Логическое) Ложь, Результат при успешной проверке=1, Результат при неуспешной проверке=0.

-49

→ ищем контакт по UID→

Используем API-запрос Методом GET с указанием URL = /crm.contact.list?filter[UF_CRM_CONT_UID]={{step28.id}}.

-50

→ Если и по UID нет → создаём контакт →

Используем инструмент Если-иначе в поле step48.result. Условие*(Логическое) Ложь, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-51

→ создаём контакт.

Используем API-запрос Методом POST с указанием URL * = /crm.contact.add. Запрос:

{
"fields": {
"NAME": "{{step28.name|escape()}}",
"PHONE": [
{
"VALUE": "{{step28.phone|default()}}",
"VALUE_TYPE": "WORK"
}
],
"EMAIL": [
{
"VALUE": "{{step28.email|default()}}",
"VALUE_TYPE": "WORK"
}
],
"COMMENTS": "{{step28.description|default()}}",
"UF_CRM_UID": "{{step28.id}}"
}
}

-52

→ для созданного контакта добавляем реквизиты→

Используем API-запрос Методом POST с указанием URL = /crm.requisite.add.

Запрос:

{
"fields": {
"NAME": "{{step28.name|escape()}}",
"ENTITY_TYPE_ID": 3,
"ENTITY_ID": "{{step50.result}}",
"PRESET_ID": "{{step29}}",
"RQ_EMAIL": "{{step28.email|default()}}",
"RQ_PHONE": "{{step28.phone|default()}}"
}
}

-53

→ добавляем к реквизитам адрес

Используем API-запрос Методом POST с указанием URL = /crm.address.add. Запрос:

{
"fields": {
"TYPE_ID": 1,
"ENTITY_TYPE_ID": 8,
"ENTITY_ID": "{{step51.result}}",
"ADDRESS_1": "{{step28.legalAddress}}"
}
}

-54

2.16. Если мы создали новый контакт или нашли старый, определяем какой ID берем

  • Преобразовать созданный контакт в Массив

Используем Преобразование типов данных типа Массив в поле step50.result|default().

-55
  • Преобразовать найденные результаты в 1

Используем Преобразование массива объектов в поле step43.result, step46.result, step48.result.

-56
  • Склеить полученный массив ID и убрать дубликаты ID

Используем объединение массивов:

step53
step54.step43_result
step54.step46_result
step54.step48_result

Условие выполнения - step42

-57

2.17. Сопоставление пользователей

  • Обрезать ссылку на ответственного сотрудника

Преобразуем строку в массив в поле source.owner.meta.href.

-58
  • Получить подробно сотрудника из МойСклад

Используем API-запрос Методом GET с указанием URL = {{step56.1}}.

-59
  • Сопоставить сотрудника по ФИО

Используем сопоставление данных в поле step57.shortFio.

-60

Шаг 3: Куда

Создаем сделку в Битрикс24.

-61

Шаг 4: Сопоставление данных

Сопоставляем данные.

Номер заказа МС
Тип: Тело
Название параметра: fields.UF_CRM_******
Значение параметра: {{source.name|default()}}
Статус: Активно

Дата заказа МС
Тип: Тело
Название параметра: fields.UF_CRM_******
Значение параметра: {{source.created|date(c)}}
Статус: Активно

Организация (Pinall)
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step5|default()}}
Статус: Активно

Склад (Pinall)
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step8|default()}}
Статус: Активно

Адрес (тип адрес)
Тип: Тело
Название параметра: fields.UF_CRM_****
Значение параметра: {{source.shipmentAddressFull.addInfo|default()}}
Статус: Активно

Комментарий для доставки
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{source.shipmentAddressFull.comment|default()}}
Статус: Активно

План. дата отгрузки
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step24.source_deliveryPlannedMoment|default()}}
Статус: Активно

Проект (Pinall)
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step11|default()}}
Статус: Активно

Канал продаж (Pinall)
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step14|default()}}
Статус: Активно

Срок резерва
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step26|default()}}
Статус: Активно

Заказ оплачен
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step16|default()}}
Статус: Активно

Имя
Тип: Тело
Название параметра: fields.UF_CRM_******
Значение параметра: {{step22.0.value|default()}}
Статус: Активно

Сборщик
Тип: Тело
Название параметра: fields.UF_CRM_****
Значение параметра: {{step18|default()}}
Статус: Активно

Ссылка на фото
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step23.0.value|default()}}
Статус: Активно

Метод оплаты (Pinall)
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: {{step20|default()}}
Статус: Активно

Ответственный
Тип: Тело
Название параметра: fields.ASSIGNED_BY_ID
Значение параметра: {{step58}}
Статус: Активно

Заказа создан Битрикс24/МС (Pinkit)
Тип: Тело
Название параметра: fields.UF_CRM_*****
Значение параметра: 2004
Статус: Активно

Идентификатор МойСклад
Тип: Тело
Название параметра: fields.UF_CRM_DEAL_UID
Значение параметра: {{ID товара}}
Статус: Активно

-62

Шаг 5: Запуск

Запускаем.

-63

Итог

Итак, выполнив 5 шагов, мы настроили интеграцию в Пинкит, которая автоматически будет создавать сделки в Битрикс24 на основе заказа из МойСклад (Триггер: Создан заказ в МойСклад с чекбоксом «Синхронизировать с Битрикс24»;
Действие: Создать сделку в воронке «Продажи» в Битрикс24).

Напоминаем, что это одна из 9 интеграций из реального кейса компании, занимающейся продажей товаров, где МойСклад используется для управления заказами и складом, а Битрикс24 — для ведения сделок.

Вы можете настроить такую же интеграцию с нуля по нашей инструкции или установить готовые шаблоны и донастроить их под свои бизнес-процессы.

-64

Если возникли сложности с настройкой, то напишите нам в Телеграм или WhatsApp, расскажите о вашем бизнес-сценарии. Эксперты Пинкит помогут настроить интеграцию без разработки (настроим первую интеграцию бесплатно).

Если вам нужна интеграция с сервисом, которого в Пинкит нет, или приватное событие/действие, через Пинкитбилдер вы можете самостоятельно добавить авторизацию, необходимые события и действия без разработки.
Подберите свой шаблон интеграции без регистрации здесь.
Алексей Окара, продакт-менеджер Пинкит