Санкт-Петербург, Ленинский пр-т, 168 оф. 319
+7 996 768-1381 [email protected] unit1.pro

Расширенная интеграция retailCRM и МойСклад. Часть 1.

Интеграция retailCRM и МойСклад

Всем привет! Сегодня хочу рассказать, какие возможности предоставляет retailCRM в связке со складским сервисом МойСклад. О возможностях стандартной интеграции retailCRM и МойСклад есть отдельная статья, здесь же мы поговорим о том, как можно расширить этот стандартный функционал.

На старт…

retailCRM предлагает готовую интеграцию с МС из своего маркетплейса. В этот функционал входит автоматическая выгрузка информацию о заказах в МС, синхронизация статусов заказов, отслеживание факта отгрузки заказа. Согласен, некоторым этого функционала достаточно. Но не нам. Будем разгонять!

Внимание…

Чего же нам не хватает…? Упрощенно этапы бизнес-процесса обработки заказа в нашем условном магазине выглядят следующим образом:

этапы заказа

Менеджер обрабатывает и подтверждает заказ в retailCRM. После этого заказ автоматически выгружается в МС. Далее возможны 2 варианта в зависимости от способа доставки: самовывоз и курьерская доставка. При самовывозе менеджер отдает товар клиенту, ставит статус заказа в CRM «Выполнен» и переходит в МС, чтобы создать отгрузку. При доставке курьером менджер выдает заказ курьеру и опять создает отгрузку в МС. Таким образом, менеджер вынужден вести работу и в CRM и в МС. Будем от этого избавляться! Сделаем так, чтобы отгрузки создавались в МС автоматически.

Марш!

МС предоставляет клиентам мощный API — средство для выполнения действий внутри МС из вне. Собственно, по такому принципу и работает стандартный механизм обмена между retailCRM и МС. Мы тоже воспользуемся этой возможностью. Для этого нам понадобятся:

  1. Скрипт на языке PHP. Данный скрипт будет осуществлять всю основную работу по формированию отгрузки в МС.
  2. Триггер в CRM. Триггер будет вызывать наш скрипт с определенными параметрами и должен срабатывать на смену статуса заказа. Для самовывоза это будет статус «Выполнен», для курьерской доставки — «Передано в доставку».
retailCRM

Начнем с триггера. Если Вы еще не используете триггеры в retailCRM, то самое время начать это делать. Итак, создаем новый триггер. Название придумаете самостоятельно. Рекомендую в названии отразить его смысл, чтобы потом не разбираться для чего в системе нужен триггер «asd123». Выбираем событие — изменение заказа. Настраиваем фильтр следующим образом:

changeSet.hasChangedField(«status») and changeSet.getNewValue(«status»).getCode() == «send-to-delivery»

Собственно, здесь все просто: триггер сработает если изменился статус заказа и код нового статуса «send-to-delivery». Этим кодом у нас в CRM как раз обозначен статус «Передан в доставку». Код Вашего статуса можете посмотреть в разделе Настройки — Статусы. В качестве действия триггера выбираем «Выполнить HTTP-запрос» и указываем адрес расположения скрипта, например http://example.com/moysklad.php.

Теперь разберемся с передаваемыми параметрами:

trigger_1

 key

Произвольное значение для фильтрации запросов внутри нашего скрипта. В скрипте в самом начале мы реализуем проверку передаваемых параметров, для того чтобы принимать запросы только от «своих» отправителей. Если значение параметра key не будет соответствовать указанной строке, то скрипт прекратит свое выполнение в самом начале. Кто-то скажет, что это паранойя, но мы в своей практике придерживаемся данного способа фильтрации входящих запросов. Делать или нет всегда остается на Ваше усмотрение.

operation

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

orderid

Код заказа, для которого необходимо создать отгрузку. Думаю, тут все понятно.

На этом настройки CRM закончены. Осталось написать код скрипта.

moysklad.php

Собственно теперь разберем наш скрипт. Чтобы было понятно не только программистам, рассмотрим суть алгоритма по формированию отгрузки. Реализация может быть сделана различными способами.

МС позволяет создавать документы на основании других документов. При этом отпадает необходимость заполнения всех полей документа, вся нужная информация будет взята из документа-основания автоматически. Воспользуемся этой возможностью и создадим отгрузку на основании существующего заказа.

  1. Сначала нужно найти наш заказ в МС. В скрипт передается ID заказа, для которого нужно оформить отгрузку. Так как заказ был выгружен из retailCRM, то МС у него в поле «Внешний код» указан этот самый ID. Значит, зная ID мы сможем найти среди всех заказов в МС нужный нам.
  2. Создаем документ «Отгрузка» на основании найденного ранее заказа. Собственно на этом можно было бы и закончить, если бы не одно «но». При отправке запроса через API в МС на создание документов на основании других документов в самом МС изменений не происходит. В ответ на наш запрос мы получаем структуру нового документа, заполненную данными документа-основания. Для окончательного формирования документа в МС нам нужно отправить данную структуру обратно. При необходимости можно изменить любую информацию. Например, в случае курьерской доставки, если мы оформляем отгрузку на курьерскую компанию, мы можем изменить контрагента в документе, т.к. по умолчанию там будет указан клиент, оформивший заказ.
  3. Отправляем запрос на создание отгрузки.

На этом все. Отгрузка сформировалась в МС, а в retailCRM через некоторое время в карточке заказа Вы увидите, следующую картину:

retailcrm заказ отгружен в мойсклад

Конечно, необходимо еще предусмотреть отмену отгрузки при отмене самого заказа, но это тема для отдельной статьи. Если у Вас есть комментарии, вопросы или предложения по усовершенствованию описанного алгоритма, пишите в комментарии, с радостью обсудим.

А если Вы хотите такой же функционал в свою CRM, то оставьте заявку на нашем сайте — www.unit1.pro — и мы свяжемся с Вами.

Всем эффективных интеграций!

Расширенная интеграция retailCRM и МойСклад. Часть 1.: 2 комментария

  1. Приветствую.

    Прочитал вашу статью и она помогла мне разобраться во многих вопросах. Но один все же остался не решенным. Как определить отправила ли CRM данные по указанному url если например текущий сайт не доступен?
    Может данный триггер возвращает результат ответа? Может в триггере можно задать свою логику работы и например отложить его на минут 10 и попытаться снова?

    1. Триггер не обрабатывает результат выполнения. Если в триггере выполняется вызов скрипта по url, то технически триггеру и crm без разницы доступен данный url или нет. Результат выполнения можно увидеть в журнале событий crm. Но заложить какую-то логику, основываясь на результатах работы триггера или скрипта нет возможности. Если этот url не ваш, а стороннего сервиса, то как вариант делать свой скрипт, который вызывать из триггера и уже в своем скрипте делать контроль доступности нужного адреса

Добавить комментарий для Александр Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *