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

Автоматическое обновление заказа в МойСклад при обновлении сделки в Битрикс24

Продолжаем разбираться с настройками интеграции МойСклад и Битрикс24 (начало здесь). Сегодня расскажем, как настроить еще 2 интеграции для обновления заказа в МойСклад (добавляем в заказ нужное количество товаров) при обновлении сделки в Битрикс24. Вы можете настроить интеграции по описанию ниже или просто установить шаблоны по ссылке и донастроить его под свои бизнес-процессы или настроить интеграции с нуля по описанию ниже. Указываем сервис Пинкит и интеграцию, настроенную ранее. Используем API-запрос Методом GET с указанием URL = /crm.deal.productrows.get?id={{source.int12026.source.ID}} Используем инструмент Для каждого в поле step1.result. Используем Преобразование типов данных в поле step2. Используем API-запрос Методом GET с указанием URL = /crm.product.get?ID={{step2.PRODUCT_ID}} Используем API-запрос Методом GET с указанием URL = /entity/product/{{step4.result.PROPERTY_70.value}} Объединяем прогоны. Используем Преобразование массива объектов в поле step7. Используем Преобразов
Оглавление

Продолжаем разбираться с настройками интеграции МойСклад и Битрикс24 (начало здесь). Сегодня расскажем, как настроить еще 2 интеграции для обновления заказа в МойСклад (добавляем в заказ нужное количество товаров) при обновлении сделки в Битрикс24.

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

1. Обновить заказ в МойСклад и добавить в него нужное количество товаров

1.1. Шаг 1: Откуда

Указываем сервис Пинкит и интеграцию, настроенную ранее.

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

  • Получить товары сделки

Используем API-запрос Методом GET с указанием URL = /crm.deal.productrows.get?id={{source.int12026.source.ID}}

-2
  • Для каждого полученного товара

Используем инструмент Для каждого в поле step1.result.

-3
  • Преобразовать товар в массив

Используем Преобразование типов данных в поле step2.

-4
  • Получить товар подробнее в Битрикс24

Используем API-запрос Методом GET с указанием URL = /crm.product.get?ID={{step2.PRODUCT_ID}}

-5
  • Поиск товара в МойСклад

Используем API-запрос Методом GET с указанием URL = /entity/product/{{step4.result.PROPERTY_70.value}}

-6
  • Собрать массив товаров

Объединяем прогоны.

-7
  • Собрать запрос с товаром

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

-8
  • Собрать массив товаров для комментария

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

-9
  • JSON

Преобразуем массив в JSON в поле step9.

-10
  • Убрать сначала [

Используем Замену по регулярному выражению в поле step10.

-11
  • Убрать сначала ]

Используем Замену по регулярному выражению в поле step11.

-12
  • Убрать сначала "

Используем Замену по регулярному выражению в поле step12.

-13
  • Фильтр

Используем Фильтр элементов массива в поле step8. Условие - Существует.

-14

1.3. Шаг 3: Куда

Обновляем заказа в МойСклад.

-15

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

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

ID заказа - {{source.int12026.result.id}}

Позиции товаров
Тип: Тело
Название параметра: positions
Значение параметра: {{step14}}
Статус: Активно

description
Тип: Тело
Название параметра: description
Значение параметра: {{step13}}
Статус: Активно

-16

1.5. Шаг 5: Запуск

Запускаем.

-17

2. Битрикс24.Продажи = Сделка - обновлена => Передать обновление в МойСклад

Теперь разберем еще одну интеграцию, которая автоматически обновит зазаз в МойСклад при обновлении соответствующей сделки в Битрик24 в воронке «Продажи».

2.1. Шаг 1: Откуда

Забираем данные из Битрикс24 в момент обновления сделки.

-18

2.2. Шаг 2 - Инструменты

2.2.1. Если есть компания → получаем её реквизиты (ИНН, название, email) → ищем в МойСклад по ИНН → если не нашли, создаём новую компанию

  • Сопоставление_Проверяем выгружался ли ранее заказ в МойСклад

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

-19
  • Сопоставление_Если заказ ранее выгружался, тогда продолжить, иначе остановить

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

-20

Если есть компания →

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

-21

получаем её реквизиты →

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

-22

получаем её телефон, email →

Используем API-запрос Методом GET с указанием URL = /crm.company.get?ID={{source.COMPANY_ID}}

-23

→ ищем в МойСклад по ИНН →

Используем API-запрос Методом GET с указанием URL = /entity/counterparty?filter=inn~{{step2.result.0.RQ_INN}}

-24

→ Если компания найдена по ИНН в МойСклад, тогда Ложь, иначе Истина →

Используем Если-Иначе в поле step4.rows. Условие*Пустое значение, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-25

Выбрать это ИП или Юр.лицо

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

-26

→ если не нашли, создаём новую компанию

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

{
"name": "{{step2.result.0.RQ_COMPANY_NAME|escape()}}",
"legalTitle": "{{step2.result.0.RQ_COMPANY_FULL_NAME|escape()}}",
"inn": "{{step2.result.0.RQ_INN}}",
"kpp": "{{step2.result.0.RQ_KPP}}",
"email":"{{step3.result.EMAIL.0.VALUE|default()}}",
"description":"{{step3.result.COMMENTS}}",
"phone":"{{step3.result.PHONE.0.VALUE|default()}}",
"companyType":"{{step6}}"
}

-27

2.2.2. Если нет компании → получаем контакт (ФИО, email, телефон) → ищем в МойСклад по email/телефону → если не нашли, создаём новый контакт

Если нет компании, проверяем контакт →

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

-28

→ получаем контакт (ФИО, email, телефон) →

Используем API-запрос Методом GET с указанием URL = /crm.contact.get?ID={{source.CONTACT_ID}}.

-29

→ ищем в МойСклад по Phone →

Используем API-запрос Методом GET с указанием URL = /entity/counterparty?filter=phone~{{step9.result.PHONE.0.VALUE}}.

-30

Если по телефону контакт не найден, тогда продолжить поиск по Email

Используем Если-Иначе по полю step10.rows. Условие*Пустое значение, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-31

→ ищем в МойСклад по Email →

Используем API-запрос Методом GET с указанием URL = /entity/counterparty?filter=email~{{step9.result.EMAIL.0.VALUE}}.

-32

Если по Email контакт не найден, тогда проверяем был ли найден контакт по Email или Телефон

Используем Если-иначе в поле step12.rows. Условие*Пустое значение, Результат при успешной проверке = 1, Результат при неуспешной проверке = 0.

-33

→ если не нашли, создаём новый контакт.

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

{
"name": "{{step9.result.NAME|escape()}}",
"email":"{{step9.result.EMAIL.0.VALUE|default()}}",
"description":"{{step9.result.COMMENTS}}",
"phone":"{{step9.result.PHONE.0.VALUE|default()}}",
"companyType":"individual"
}

-34
  • Делаем массив ссылок c полученными контрагентами

Используем Преобразование типов данных в поле step7.meta.href|default(), step4.rows.0.meta.href|default(), step10.rows.0.meta.href|default(), step12.rows.0.meta.href|default(), step14.meta.href|default(). Тип данных - Массив.

-35
  • Склеить meta ссылки контрагентов, чтобы оставить только одну

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

step15.step7_meta_href|default()
step15.step4_rows_0_meta_href|default()
step15.step10_rows_0_meta_href|default()
step15.step12_rows_0_meta_href|default()
step15.step14_meta_href|default()

-36

2.2.3. «Организация»

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

Используем Если-Иначе в поле source.UF_CRM_*****. Условие*(Число) Равно.

-37

2.2.4. «Склад»

  • Сопоставление ID склада

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

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

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

-39
  • Найти нужный склад из списка

Используем Фильтр элементов массива в поле step19.rows. Условие*(Текст) Полностью совпадает, Сравниваемое значение = step18.

-40

2.2.5. «План. дата отгрузки» (доп. поле)

  • «План. дата отгрузки» (доп. поле)

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

-41

2.2.6. «Проект» (системное поле)

  • Проект

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

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

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

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

Используем Фильтр элементов массива в поле step23.rows. Условие*(Текст) Полностью совпадает, Сравниваемое значение = step22.

-44

2.2.7. «Канал продаж»

  • Канал продаж

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

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

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

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

Используем Фильтр элементов массива в поле step26.rows. Условие*(Текст) Полностью совпадает, Сравниваемое значение - step25.

-47

2.2.8. «Срок резерва» (доп. поле) и Заказ оплачен

  • «Срок резерва» (доп. поле)

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

-48
  • Заказ оплачен

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

-49

2.2.9. Сборщик заказа

  • Сборщик заказа

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

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

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

-51
  • Выбрать нужного сборщика из списка МойСклад

Используем Фильтр элементов массива в поле step31.rows. Условие*(Текст) Полностью совпадает, Сравниваемое значение = step30.

-52

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

  • Метод оплаты

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

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

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

-54
  • Выбрать нужный Метод оплаты из списка

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

-55

2.2.11. Сопоставление сотрудников

  • Сотрудники

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

-56
  • Выбрать нужного сотрудника из списка МойСклад

Используем Фильтр элементов массива в поле step31.rows. Условие*(Текст) Полностью совпадает, Сравниваемое значение = step36.

-57

2.3. Шаг 3: Куда

Обновляем заказ в МойСКлад.

-58

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

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

ID заказа - {{step38}}

Дополнительное тело запроса:

{
"name": "{{source.UF_CRM_***|default()}}",
"created": "{{now|date(Y-m-d H:i:s)}}",
"shared": false,
"applicable": false,
"owner":{
"meta": {
"href": "{{step37.0.meta.href}}",
"metadataHref": "{{step37.0.meta.metadataHref}}",
"type": "{{step37.0.meta.type}}",
"mediaType": "application/json",
"uuidHref": "{{step37.0.meta.uuidHref}}"
}
},
"store": {
"meta": {
"href": "{{step20.0.meta.href}}",
"metadataHref": "{{step20.0.meta.metadataHref}}",
"type": "{{step20.0.meta.type}}",
"mediaType": "application/json",
"uuidHref": "{{step20.0.meta.uuidHref}}"
}
},
"salesChannel": {
"meta": {
"href": "{{step27.0.meta.href}}",
"metadataHref": "{{step27.0.meta.metadataHref}}",
"type": "{{step27.0.meta.type}}",
"mediaType": "application/json",
"uuidHref": "{{step27.0.meta.uuidHref}}"
}
},
"organization": {
"meta": {
"href": "{{step17}}",
"type": "organization",
"mediaType": "application/json"
}
},
"agent": {
"meta": {
"href": "{{step16.0}}",
"type": "counterparty",
"mediaType": "application/json"
}
},
"shipmentAddress": "{{source.UF_CRM_***|default()}}",
"shipmentAddressFull": {
"comment": "{{source.UF_CRM_***|default()}}",
"addInfo":"{{source.UF_CRM_***|default()}}"
},
"deliveryPlannedMoment": "{{step21}}",
"project": {
"meta": {
"href": "{{step24.0.meta.href}}",
"metadataHref": "{{step24.0.meta.metadataHref}}",
"type": "{{step24.0.meta.type}}",
"mediaType": "application/json",
"uuidHref": "{{step24.0.meta.uuidHref}}"
}
},
"attributes": [
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/1346cbba-dc6a-11e8-9109-f8fc000be52d",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "time",
"value": "{{step28}}"
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/7d55d84f-7b99-11e8-9109-f8fc000a26fe",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "boolean",
"value": {{step29|boolean()}}
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/49922556-d517-11e3-0e3e-002590a28eca",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "string",
"value": "{{source.UF_CRM_1600454081|default()}}"
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/37793c78-2225-11ec-0a80-04cc0016a753",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "employee",
"value": {
"meta": {
"href": "{{step32.0.owner.meta.href}}",
"type": "employee",
"mediaType": "application/json"
}
}
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/99abd13c-0254-11e9-912f-f3d4001e99af",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "link",
"value": "{{source.UF_CRM_*****|default()}}"
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/a82ba1fe-0b1a-11f0-0a80-003500266be0",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "link",
"value": "https://crm.smartoffice-online.ru/crm/deal/details/{{source.ID}}/"
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/27bea58b-f9e6-11ea-0a80-0197000f2af1",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "long",
"value": {{source.ID}}
},
{
"meta": {
"href": "https://api.moysklad.ru/api/remap/1.2/entity/customerorder/metadata/attributes/4f83f12f-e215-11ee-0a80-07480016ebe0",
"type": "attributemetadata",
"mediaType": "application/json"
},
"type": "customentity",
"value": {
"meta": {
"href": "{{step35.0.meta.href}}",
"type": "customentity",
"mediaType": "application/json"
}
}
}
]
}

2.5. Шаг 5 - Запуск

Запускаем.

-59

3. Итог

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

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

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

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

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