Интеграция opencart retailcrm+instagram+мой склад+google Analytics

Заказать интеграцию можно через мой кворк или обратившись ко мне напрямую.

На примере рабочего проекта будет описана интеграция opencart retailcrm + мойсклад по шагам, включая выгрузку товаров и настройку синхронизации. Система в целом упрощает с точки зрения сопровождения бизнес, обзор далее — тому подтверждение.

Термины

ИМ — интернет-магазин; срм или РЦРМ — retailcrm

Как всё работает

Каталог товаров/категорий по крону парсится с ИМ в РЦРМ. Заказы в РЦРМ подгружаются режиме реального времени вместе с контрагентами. Если на стороне срм происходят изменения, то новые данные автоматически отправляются в ИМ. Из РЦРМ заказы с контрагентами передаются в МойСклад. Остатки по всем товарам синхронизируются из МойСклад в ИМ. Связь односторонняя. В
МойСклад данные по каталогу товаров не изменяются. Если какая-то позиция на ИМ отсутствует, то она автоматически создаются при синхронизации с МойСклад.

Opencart

Интеграция opencart с retailcrm производилась с помощью бесплатного модуля https://ocmod.net/modul-retailcrm

Какие задачи удалось решить:
      — формирование ICML-каталога с сайта,
      — синхронизация статусов и полей заказов и клиентов,
      — передача заказов/клиентов с сайта в retailCRM

Инструкция по настройке модуля в опенкарт

1 Opencart. Вкладка «ГЛАВНАЯ»

Заполнил поля адрес retailcrm и Api ключ RetailCRM

В настройке торговых зон поставил «Российская Федерация»

Остальное оставил по умолчанию

2 Opencart.Вкладка «СПРАВОЧНИКИ»

Сопоставил способы доставки ИМ и retailcrm. Для доставки через СДЕК потребовалось создать отдельный способ доставки в retailcrm.

Сопоставил статусы заказов там и там. Недостающие статусы добавил в retailcrm
#статусы retailcrm

Сопоставил способы оплаты там и там. Для оплаты наложенный платеж СДЕК магазина создал в ритейлсрм отдельный способ

Указал оплату и доставку по умолчанию

Указал статус пропавших заказов «черновик«. Это когда посетитель не доводит заказ до конца, т.е. не нажимает кнопку подтвердить заказ

3 Opencart.Другие вкладки

Я оставил без изменений кроме «Пользовательские поля». Они позволяют передавать доп.инфу о покупателях и о заказе. Я использовал такую возможность, чтобы передавать информацию о купоне, которым воспользовался покупатель.

Подробнее о настройке передачи купона в ритейлСРМ здесь

Изначально во вкладке пусто. Нужно зайти в подраздел настраиваемые поля в разделе покупатели и добавить хоть одно поле.

Затем вернуться обратно во вкладку модуля интеграции и установить соответствующее пользовательское поле из CРМ.

Как создавать поля в ритейле — здесь

4 Opencart.Настройка задач синхронизации в кроне

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

* */4 * * * /usr/bin/php /path/to/opencart/system/cron/icml.php >> /path/to/opencart/system/logs/cronjob_icml.log 2>&1

Для получения изменений и новых данных, например, кода добавили клиенту или заказу новые сведения в ритейле нужно записать в кроне.

*/5 * * * * /usr/bin/php /path/to/opencart/system/cron/history.php >> /path/to/opencart/system/logs/cronjob_history.log 2>&1

*/5 означает, что периодичность будет раз в 5 минут

RetailCRM

Теперь перейдем непосредственно к настройке РЦРМ. Для ознакомления с системой предоставляется пробный период. По истечению какого-то времени понадобится перейти на тариф «
Профессиональный», который поддерживает все описанные в статье возможности. Подробнее

Инструкция по настройке РЦРМ

1 RetailCRM.ICML файл каталога

В настройках указал, где лежит xml выгрузки в opencart (формат, который поддерживает ритейл). Эта настройка в разделе Настройки->магазины->магазины доступна для уже добавленных сайтов. Я добавил новый, т.к. не пользовался ранее. Там вошел во вкладку каталог и выставил вот такие параметры

В основной вкладке прописал адрес сайта, символьный код и галочку — активность.

Так как связывание товаров между системами предполагается по полю model, то внес изменения в файл \catalog\model\extension\retailcrm\order.php
и в файл system\library\retailcrm\lib\service\RetailcrmOrderConverter.php

Цель правкиГде расположеноКакие изменения
чтобы в качестве идентификатора товарного предложения заказов в ритейл передавалось бы поле modelстроку
'externalId' => !empty($offerId) ? $product['product_id'].'#'.$offerId : $product['product_id']
заменил на
'externalId' => !empty($offerId) ? $product['model'].'#'.$offerId : $product['model']

2 RetailCRM.Статусы

На *.retailcrm.ru/admin/statuses добавил все необходимые статусы в соответствии со статусами в ИМ. При этих действиях попутно создал пару статусных групп, когда не нашел подходящих под некоторые статусы.

Там же в подразделе переходы статусов для обоих типов заказа выделил все статусы и сохранил.

3 RetailCRM.Оплаты

*.retailcrm.ru/admin/payment-types

По умолчанию уже присутствуют около 5 простых способов оплат, не интегрированных в платежные системы. Для проекта создал особый способ оплаты с интеграцией для платежей через сбербанк.

Предварительно подключил к срм виджет сбербанк эквайринг

4 RetailCRM.Доставки

https://docs.retailcrm.ru/Users/Administration/Dictionaries/SettingTypeOfDelivery?account=https://snegiriki.retailcrm.ru

5 RetailCRM.Сбербанк эквайринг


Указал ключ доступа к АПИ срм. Но прежде создал его в ритейлСРМ в разделе
Настройки/Интеграции/Ключи доступа к API Подробнее какие разрешения выставлять ключу https://im-business.com/marketplace/sberbank-ekvajring/#Application

и заполнил все поля, что просил мастер установки

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

После завершения настройки виджета я через личный кабинет сбербанк эквайринга отправил запрос в тех. поддержку(в ЛК можно выбрать из шаблонов):

Здравствуйте. Прошу подключить callback-уведомления на боевой среде на URL https://sberbank.imb-service.ru/payments/pay-callback.html. Уведомления нужны без контрольной суммы.

Более подробно весь процесс настройки описан на сайте разработчика виджета Там в конце приводятся возможные проблемы. Лично у меня возникла ошибка, которая не описана у разработчика: undefined index:vat. Оказалось, что в заказе не был установлен параметр НДС.

Видео инструкция по оплате через виджет сбербанк экваринг в ритейлСРМ https://youtu.be/ztIMWk16X20

6
RetailCRM.Валидация

Валидации помогают контролировать изменения в заказах и настраиваются в разделе настройки->системные->валидации https://*.retailcrm.ru/admin/settings/validation

Я реализовал для своего проекта след. валидации:

1. Невозможен переход в группу возврата из ранних статусов по заказу.


дублирую условие из скриншота

changeSet.isUpdate() and changeSet.hasChangedField('status') and order.status.group.name == 'Возврат' and changeSet.oldValue('status').ordering < 35

2. Если заказ перешел из статуса Новый в любой другой, то вернуть статус Новый обратно уже нельзя. Статус Новый должен быть только для новых заказов.

дублирую условие из скриншота

changeSet.isUpdate() and changeSet.hasChangedField('status')and order.status.ordering < 10

3. Невозможно изменение статусов заказа на раннюю обработку из статуса «Доставляется».

дублирую условие из скриншота

changeSet.isUpdate() and changeSet.hasChangedField('status') and changeSet.oldValue('status').code == 'delivering' and order.status.code == 'processed'

7 RetailCRM.Почта

Делаем с помощью retailcrm интернет — торговлю омниканальной благодаря возможности агрегировать там корресподенцию со своих почтовых аккаунтов.

Настройки->Системные ->Почта

Настройки->магазины->магазины

8 RetailCRM. Instagram и facebook

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

Что потребовалось

До установки виджета из маркетплейса retailcrm я в инстаграм магазина (была обычная страничка) перевел в режим бизнес-аккаунта (не требуется вложений). Об этом подробнее здесь https://youtu.be/GdVwFPWxW9c

Все действия описаны в инструкции

Интеграция с сервисом Мойсклад

МойСклад является удобным инструментом
управления торговлей касательно складского учета. Важно, что сервис может принимать сделки amocrm и других систем, в том числе retailcrm.

1 МойСклад. Подготовка к импорту товаров

Выгрузка каталога из ритейлсрм в МС напрямую через модуль обмена не поддерживается. Необходимо импорт делать через настройки-> интеграции МойСКЛАД, выбирая файл xml каталога товаров у себя на компьютере или указывая внешний url(например, с сайта ИМ)

Я импортировал в МойСклад все товары с помощью выгрузки модуля интеграции opencart retailcrm. Но перед этим добавил немного изменений туда, чтобы заработала связка МойСклад->opencart и
МойСклад-> retailcrm

Изменения коснулись файла admin\model\extension\retailcrm\icml.php

ЦельГде расположеноИзменение
Коду товара МойСклад присвоить значение Model в Опенкартстроку
$e->setAttribute('id', $product['product_id'] . '#' . $offerId);
заменить на
$e->setAttribute('id', $product['model'] . '#' . $offerId);


Коду товара МойСклад присвоить значение Model опенкарт
строку
$e->setAttribute('id', $product['
product_id ']);
заменить на
$e->setAttribute('id', $product['model']);

связать товары ритейлСРМ и МойСклад. Для этого в xml нужно вставлять параметр
xmlId
после фргамента
$e->appendChild($this->dd->createElement(‘price’))->appendChild($this->dd->createTextNode($price));
вставить
$e->appendChild($this->dd->createElement('xmlId')) ->appendChild($this->dd->createTextNode($product['model']));
Идентификатору товара присвоить значение поля modelстроку
$e->setAttribute(‘productId’, $product[‘product_id’]);
заменить на
$e->setAttribute(‘productId’, $product[‘model’]);

2 МойСклад. Импорт товаров

Зашел в настройки->импорт->товары (Яндекс.Маркет)

Импортировал выгрузку xml ритейлсрм с сайта ИМ (формат, который поддерживает МОЙСКЛАД)

Только перед импортом нужно учесть нюанс (показано на скрине ниже)

3 МойСклад. Модуль обмена retailcrm

Указал настройки подключения к МойСклад. В качестве ключа интеграции использовал отдельный с максимальными правами доступа к retailCRM.

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

Если после настройки обмена заказы по-прежнему не поступают в МОйСКлад из retailcrm, то нужно внимательно ознакомиться с записями вкладки Журнал.

4 МойСклад. Модуль интеграции с opencart

С целью обновлять товарные остатки в ИМ поставил модуль интеграции opencart МойСКлад https://ciframe.ru/moysklad-opencart-connector/ 

Данное решение условно бесплатное, имеет ограничение до 1000 товаров и недоступны некоторые настройки.

Задал основные настройки обмена: статус, логин, пароль. Потом по наитию выбрал параметры во вкладках настройки товаров, настройки заказов. Упор делал на то, чтобы создавались категории,товары и обновлялись остатки при синхронизации.

Важно правильно настроить параметры связи.

В пункте 1 данного раздела я производил модификацию модуля retailcrm в ИМ, чтобы товары связывались по параметрам код товара(МойСклад) <- модель(Opencart) 


При успешной настройке можно будет в последней вкладке связать товары. Нажимаем «связать товары», а потом обновить товары. После этого станет доступным обновление складских остатков.

видео по добавлению остатков в МойСклад поможет правильно организовать складской учет https://youtu.be/kh8GDaOUDcA

видео по перемещению и отгрузке товара https://www.youtube.com/watch?v=jIx_nXIETEA

видео по возвратам товаров в МС https://www.youtube.com/watch?v=w9gFvDvARyo

Для регулярного обновления товаров настройте крон/планировщик/crontab на своем хостинге. Тип крона «Исполняемый бинарный файл» строка крона выглядит так(1 — обновление товаров, 2 — обновление остатков):

1. wget -O /dev/null ‘https://snegiriki.ru/index.php?route=extension/module/ms_integration/updateProducts’
2. wget -O /dev/null ‘https://snegiriki.ru/index.php?route=extension/module/ms_integration/updateStock’

Google universal analytics

Систему аналитики запускал по инструкции
https://octemplates.net/octemplates-knowledge-base/analytics-ecommerce

т.к. у меня на cms opencart установлен шаблон OCTemplates. Очень упрощает муторный процесс по установке счетчиков
google и настройку целей . Сделал как в инструкции и сразу заработало без выяснения извечного вопроса «почему не поступают данные».

Вопросы к тех. поддержке

МойСклад. Вопрос №1

Здравствуйте, подскажите, пожалуйста, почему не появляются в МойСклад заказы и товары из ритейлСРМ. Соответствия складов, магазинов и статусов заданы.

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

Необходимый для RetailCRM формат каталога описан по ссылке. Порядок загрузки описан по ссылке. Требование к каталогу для интеграции с МойСклад описано по ссылке.

Если интернет магазина нет или заказы будут поступать в систему без товаров (согласовываться по телефону или через чат), то можно использовать скрипт по ссылке. Он не поддерживается нами, но всё ещё позволяет сделать каталог товаров на основе данных из системы МойСклад. Скрипт нужно будет разместить на внешнем сервере и настроить его периодический запуск, для обновления файла каталога.

МойСклад. Вопрос 2.

Здравствуйте, не подскажите почему могут появляться в журнале модуля интеграции МойСклад вот эти две ошибки https://skr.sh/sD5MOrDJpOP ? А заказ при этом в МОЙСКЛАД передается без товарных позиций и с нулевой ценой.

Если в модуле активна опция «Передавать Доставку как товарную позицию в заказе», то модуль создаёт услугу доставки в каталоге МойСклад. Далее с заказом модуль передаёт эту услугу. Ошибка возникает из-за того что данная услуга была удалена в МойСклад. Модуль пытается передать товары и в том числе эту услугу и из-за ошибки не удаётся это сделать.

Обновил связь по этой услуге. Со следующим заказом модуль её выгрузит. Не удаляйте её, пожалуйста.

МойСклад. Вопрос 3.

Здравствуйте, подскажите, почему при импорте товаров через yml не подгружаются остатки в МС?

при импорте из YML остатки не передаются, к сожалению. Остатки в сервис вносятся оприходованием или приемкой, можно массово внести с помощью импорта из Excel.
Инструкция https://support.moysklad.ru/hc/ru/articles/115006434208

RetailCRM. Вопрос №1

Подскажите, пожалуйста, почему не получается выбрать склад отгрузки в заказах?https://skr.sh/sBXODhnWsKF

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

RetailCRM. Вопрос №2

Подскажите как подключить retailcrm
Chat https://skr.sh/sBV4Lgdf1ud

crm chat доступен на тарифе «Профессиональный» На тарифе появляется возможность выбрать количество пользователей для данного раздела и оплатить RetailCRM Chat в личном кабинете (скриншот). Он появится на панели с разделами после оплаты и активации. Вы сможете активировать раздел если перейдёте в Настройки — Интеграция — Чаты (скриншот)

Для дальнейшей работы вам потребуется подключить интеграционные модули, которые позволят принимать сообщения клиентов из разных каналов. Найти доступные модули вы можете если перейдёте в Настройки — Интеграция — Маркетплейс (скриншот)

RetailCRM. Вопрос №3

подскажите почему в заказе способ оплаты сбербанка эквайринга можно выбрать только, когда в качестве способа доставки указан СДЕК? Получается, что интеграционные типы оплаты работают только с интеграционными типами доставок?

Для выбранного типа доставки в заказе, и других необходимых кроме СДЭК, потребуется в настройках разрешить этот тип оплаты — пример.

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

После этого для настроенного типа доставки, при его выборе в заказе, можно будет использовать этот тип оплаты.

RetailCRM. Вопрос №4

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

У вас в ICML нет xmlId ни у одного товара.

Модуль для OpenCart не предполагает выгрузки этого параметра, так как в OpenCart нет поля из которого его можно брать.

Чтобы передавать xmlId вам нужно определить, в каком из полей OpenCart значение совпадает с внешним кодом товара в МойСклад. После этого внести в код генерации каталога изменения, для выгрузки в файл этого поля, в теге xmlId. Правила кастомизации модуля описаны по ссылке. Важно так же учитывать требования к формату xmlId (ссылка).

Заказать кастомизацию модуля можно у наших партнёров (ссылка).

RetailCRM. Вопрос №5

при настроенной интеграции ритейл+ МС из опенкарта остатки не идут в ритейл? или в любом случае не идут? а из ритейла в опенкарт напрямую остатки обновляются?

при настроенной интеграции ритейл+ МС из опенкарта остатки не идут в ритейл?

В RetailCRM есть понятие «общий остаток» и остаток по складам. Из OpenCart с каталогом может быть передан общий остаток, но он игнорируется, если включено редактирование складских остатков. В этом режиме ожидаются остатки по складам, которые из OpenCart не передаются.

а из ритейла в опенкарт напрямую остатки обновляются?

Модуль не выгружает остатки в OpenCart. Выгружается только общий остаток с каталогом.

RetailCRM. Вопрос №6

Здравствуйте, подскажите, из-за чего может быть ошибка https://skr.sh/sBdj7EYrt8F, когда я нажимаю кнопку сгенерировать счет в заказе в разделе оплаты через сбербанка эквайринга?

У товаров не задан тип НДС

RetailCRM. Вопрос №7

Здравствуйте, подскажите почему, например, в заказе https://*.retailcrm.ru/orders/170/edit нельзя перейти в товар https://*.retailcrm.ru/products/2347Перед созданием этого заказа очистил склад https://skr.sh/sC55QfF8Wa6 и загрузил каталог из ICML по-новому.Каталог https://snegiriki.ru/retailcrm.xml xmlId в товарах присутствует

Когда товар впервые появляется в CRM — у него в CRM появляется внутренний id. Если товар добавляется в заказ CRM вручную — то в заказе прописывается id этого товара.

А очистка каталога — стирает все товары и их id — и когда тот же каталог загружается вновь — у теж же самых товаров прописываются новые id — поэтому в прежних заказах (там где старые id) товары становятся не связаны с каталогом.

Для того, чтобы эти товары в старых заказах связать с текущим каталогом (т.е. с тем же каталогом, но загруженным после очистки) — нужно их заново добавить в состав заказов.

RetailCRM. Вопрос №8

ну я имел ввиду новый заказ, который был создан уже после очистки/загрузки каталога. В нем то должно быть все ок. Например, 30 минут назад создан новый заказ https://*.retailcrm.ru/orders/172/edit.Чистку/загрузку каталога делал еще вчера. А товары в заказе не распознаются

Ваш заказ был создан по API

В состав заказа при его создании были по API переданы старые id товаров (см. скриншот), а после очистки каталога id товаров меняются — поэтому товары в заказе не связаны с каталогом CRM (в текущем каталоге нет таких id (см. скриншот))

Даже если в заказ добавляются, помимо значения id актуальные значения externalId или xmlId — товар не распознается — так как id указан, и он не подходит (но, если при создании заказа передавать только externalId или xmlId (совпадающие с данными товара в текущем каталоге), то товар в заказе распознается).

RetailCRM. Вопрос №9


прикладываю файл с запросами, которые отправляются при создании заказа. Нахожу только поле externalId. Отдельно нигде id товара нет. Заказ создан через АПИ 20 минут назад. https://*.retailcrm.ru/orders/175/edit Товар в него вложен вот этот https://*.retailcrm.ru/products/2347 Внешние коды совпадают, а id не передается в запросе, на сколько я вижу

Видим, что в запросе вы передавали externalId , равный 132 (см. скриншот), но такого offer id нет ни у одного торгового предложения в загруженном в CRM файле каталога — поэтому товар в заказе не удалось связать с каталогом (см. скриншот).

Дайте знать, если у вас появятся еще какие-либо вопросы

RetailCRM. Вопрос №10

какой offerid у вот этого товара https://*.retailcrm.ru/products/2347 ?
и что значит внешний id у этого товара?https://skr.sh/sCAa4Mvzzlc Это какой-то ид отличный от externalId?

На стороне CRM товар (product) — это своего рода контейнер, который включает в себя торговые предложения (offer), отличающиеся своими свойствами (цвет, размер, артикул и т.д.). У каждого товара в CRM должно быть указано как минимум одно торговое предложение.

В состав заказа добавляется не товар вообще, а его конкретное торговое предложение (даже если оно единственое у товара — в заказ нужно передавать externalId торгового предложения , а не товара)

У этого товара externalId равен 132, но в заказ добавляется конкретное торговое предложение этого товара (а не «товар вообще») — значение его externalId (равное УТ100028915 (см. скриншот) (посмотреть его можно в файле каталога, загруженном в CRM)) и нужно добавлять в заказ по API

RetailCRM. Вопрос №11

Здравствуйте, с двумя заказами есть проблема. В них выбрана оплата банковской картой при получении. Но в транспортных службах с клиентов не взяли оплату. Звонил по горячей линии. Мне сказали, что посылки вручены, а плату не взяли, т.к. указано в заказах, что оплата по договору((расшифровка: что оплачивается заказ будет самим владельцем)).

Отсюда вопрос, какие параметры неправильно передались в транспортные службы по АПИ? Можно как-то проверить?


это могло произойти из-за того, что в настройках сдек напротив оплаты не стояла галочка «наложенный платеж»? https://skr.sh/sCuv1591pSv

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

1 — в настройках модуля нужно поставить галку для типа оплаты, который будет подразумеваться под наложенным платежом.

2 — в самом заказе перед оформлением заявки на доставку нужно добавить ранее указанный в п.1 тип оплаты и поставить статус оплаты «Не оплачен».

На выходе, в СДЭК отправится информация из этого платежа, с учетом настроек модуля.

А вот если вам нужна не полностью оплата заказа, а только оплата доставки, тогда нужно сделать следующее:

1 — в настройках модуля в параметре «Порядок распределения частичной предоплаты за заказ» установить: «стоимость товаров в заказе»;

2 — в заказе, после выбора всех данных — добавляем обычный платеж (не наложенный) с суммой, которую оплатил клиент и ставим статус «Оплачен»;

3 — добавляем наложенный платеж на остаток суммы, в данном случае это будет стоимость доставки;

На выходе получится в накладной будет указано обе суммы, но к оплате будет стоять только стоимость доставки.


Добавить комментарий

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