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

Интеграция МойСклад и Битрикс24: обновление сделки при изменении заказа в МойСклад

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

Продолжаем серию статей на тему интеграции МойСклад и Битрикс24 (начало здесь). Мы уже разобрали, как настроить интеграцию для автоматического создания сделки в Битрикс24, если в МойСклад создан заказ (в этой статье), разобрали еще 2 сценария интеграции: когда создается заказ в МойСклад → в Битрикс24 добавить (назначить) товары в сделку и привязать остаточные контакты (здесь можно почитать). Теперь давайте узнаем, как настроить интеграцию "МойСклад: заказ обновлён → Битрикс24: обновить сделку", которая будет срабатывать при обновлении данных.

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

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

Шаг 1: Откуда

Получаем данные в МойСклад в момент обновления заказа.

-2

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

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

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

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

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

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

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

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

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

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

-6

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

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

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

-7

2.3. Склад

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

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

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

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

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

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

-10

2.4. Проект

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

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

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

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

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

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

-13

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

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

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

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

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

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

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

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

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

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

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

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

-16

2.7. Сборщик

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

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

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

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

-18

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

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

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

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

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

-20

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

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

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

-21
  • Имя

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

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

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

-23

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

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

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

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

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

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

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

-26

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

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

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

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

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

-28

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

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

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

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

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

-30

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

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

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

-31

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

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

-32

→ ищем по UID →

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

-33

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

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

-34

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

Используем 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}}"
}
}

-35

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

Используем 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()}}"
}
}

-36

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

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

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

-37

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

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

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

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

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

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

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

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

Используем Объединение массивов. Условие выполнения step30.

step38
step39
step40

-41

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

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

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

-42

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

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

-43

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

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

-44

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

Используем замену по регулярному выражению в поле step28.phone. Строка для замены %2B.

-45

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

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

-46

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

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

-47

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

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

-48

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

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

-49

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

Используем 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}}"
}
}

-50

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

Используем 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()}}"
}
}

-51

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

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

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

-52

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

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

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

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

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

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

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

step53
step54.step43_result
step54.step46_result
step54.step48_result

-55

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

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

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

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

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

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

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

-58

Шаг 3: Куда

Обновляем сделку в Битрикс24.

-59

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

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

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

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

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

Склад
Тип: Тело
Название параметра: 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()}}
Статус: Активно

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

Канал продаж
Тип: Тело
Название параметра: 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()}}
Статус: Активно

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

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

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

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

-60

Шаг 5: Запуск

Запускаем.

-61

Итог

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

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

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

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

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