RetailCRM стандартный модуль


#1

Добрый день!

Подскажите, возможно ли как-то инициировать прогрузку заказа в CRM, который по какой-то причине не ушел автоматически?

@cs-cart_team Вероятно, есть какая-то команда в командной строке? Или какой-то специальный режим? Быть может, лог есть что может подсказать, по какой причине не ушел заказ?


#2

Я решил еще раз попробовать применить этот модуль на абслютно стандартной установке… синхронизировал на 100% статусы заказов, способы оплаты, способы доставки. Чистый каталог, меньше 200 товаров. И блин, вроде пару раз выгрузило заказы неделю назад и снова не выгружает. Ну должно же оно хоть немного то работать, хоть по-минимуму. Но что-то не работает.


#3

По идее либо у заказа должно быть поле, либо это отдельная таблица модуля, в которой заказу проставляется статус, что он успешно принят CRM. То есть идет передача, CRM получает данные, записывает, и по итогу отдает связку “номер заказа” -> “статус выполнения”. Модуль получает этот ответ и прописывает полученный статус заказу. При следующем проходе по крону (либо если часть задач выполнилась с ошибкой запустить повторный проход, но тут надо быть осторожным и сначала проэкспериментироваепть, иначе можно впасть в бесконечный цикл) необработанные заказы будут обработаны снова.
Потому как есть только два пути: или по крону по расписанию, или по событию, но тогда скрипт должен довести выполнение до логичесмкого конца.


#4

Добрый день.

Лог есть, находится в служебных файлах, папка retailcrm_logs. У нас в единичных случаях невыгрузки причиной является некорректный email.


#5

Вот спасибо! Странная ерунда, ведь генерируется email, т.к. не обязателен для ввода.


#6
Мысли

Вообще было бы здорово чтобы разработчики добавляли не просто что подходит для такой то версии такой то системы, а в каких условиях объемах и нагрузках тестировали. А то может под фразой, что модуль делает то то и то то подразумевается совсем не то, что нами подразумевается…


#7

А как в таких случаях прогружаете?


#8

Вручную создаем в crm,
Либо “действовать от лица покупателя” - заказы - оформить заказ повторно.

Немного топорно, я был бы тоже признателен, если бы cs-cart_team подсказала более элегантное решение :slight_smile:


#9

Вообще конечно странно что проверки на существование email нет, а есть только странная регулярка, которая пропускает что ни попадя. Классов в нете на эту тему навалом, принцип - один и тот же - обмен заголовками с сервером без отправки письма, ну хоть например
https://htmlweb.ru/php/example/is_e-mail.php
я в свое время использовал две функции на проверку домена и проверку доступности адреса, но не суть. Может разработчики боятся тормозов при запросах, так всё происходит значительно быстрее, чем расчет доставки, который часто вообще падает.
А вот польза, что можно быть уверенным, что покупатель получит все уведомления (менеджеры не обращают внимание, что письмо не доставлено, они просто шлют и шлют письма, а потом аннулируют заказ потому что клиент не отвечает, или клиент не забирает заказ, потому что на правильную почту не пришел код отслеживания).
Но это конечно - для другой темы…


#10

Так зачем вообще нужна эта проверка, если такого email заведомо не существует - он не введен при оформлении заказа и сформирован автоматически в виде test-testovyy-1620804942@example.com


#11

Вот я так и хочу сделать у себя: у меня фейковые адреса формируются по схеме:
номер-телефона@мой-домен.ru
таким образом я могу исключить из проверки емэйлы с собственным доменом, а все остальные проверять.


#12

Я имел в виду несколько иное. Ограничение на стороне RCRM, поэтому некоторые http запросы не принимаются в обработку.
В файле OrderConverter.php просто добавили удаление лишних символов из email адреса.


image


#13

И всё-таки… ведь нереально написать аналогичный модуль не тестируя 100500 раз. Ведь 100% должен быть скрипт выгружающий определенный заказ, или все? Да или просто перевыгрузить, мало ли по каким причинам не выгрузилось…


#14

Заказы в retailcrm отправляются по триггеру при создании заказа с помощью хуков. Других вариантов в модуле из коробки нет. Можно написать отдельный скрипт, который отправит заказы с выбранными id в Retailcrm - это не так сложно, но костыльно очень. Но Чтобы по кнопке выгружать отдельные заказы из админки в Retaicrm - это сложнее, нужно проверять наличие заказа в crm сначала, потом уже отправлять или обновлять заказ, больше логики и кода.


#15

Но это же не нормально сделать модуль без описания, без инструкции, без особенностей, без вывода сообщений об ошибках и без возможности перевыгрузить когда что-то пошло не так, не поддерживающий даже коробочный функционал движка, даже самую базовую его часть, модуль который не работает даже с демо-данными… А не так пошло из-за имейла, который генерируется самой же коробкой и нет механизма исправления. Нельзя прогрузить старые заказы, нельзя покупателей… Для кого было сделано, уж если в магазине со 150 товарами, двумя способами оплаты и двумя способами доставки не работает, один из которых и там и там - Обсудить с менеджером…


#16

Ошибки в логи пишутся, но очень скудно и каждый раз лезть и смотреть в файл не появилась ли какая-то ошибка и все ли заказы выгрузились - то ещё занятие. Куда удобнее, если б ошибки отправлялись боту в телеграмм для оперативности и наглядности. Вобщем есть, что развивать в модуле.


#17

Да его похоже за несколько дней в рамках рекламы запилили в 2017 и с тех пор и не трогали… В третий раз пытаюсь его применить, уже в совсем примитивнейшем магазине. И в третий раз полный облом. Тут уже вообще нихрена нет - 150 простейших товаров, 2 способа доставки, 2 способа оплаты(коробочные, даже не переименовывались), никаких доработок. Не работает…


#18

Вот накатал быстро функцию, которая выгружает все заказы в RetailCRM.
Если нужно выгрузить определенные заказы, то включите их ids в массив $order_ids вместо sql запроса.

function fn_retailcrm_export_orders()
{
    $order_ids = array();
    $order_ids = db_get_fields('SELECT order_id FROM ?:orders');

    if (!empty($order_ids)) {
	    foreach ($order_ids as $order_id) {
		    $order = fn_get_order_info($order_id);
		
		    if ($order['is_parent_order'] === 'Y') {
		        return;
		    }

		    /** @var \Tygh\Addons\Retailcrm\Service $service */
		    $service = Tygh::$app['addons.retailcrm.service'];
		
		    $service->createRetailCrmOrder($order);
		    fn_print_r("Заказ ID" . $order_id . " выгружен в RetailCRM");
		    sleep(1);
		}
	}
}

#19

Добрый день.

Подскажите, в какой файл вы ставили функцию? В кастомный скрипт?
В заголовках use Tygh\Api;
use Tygh\Registry;
use Tygh\Addons\Retailcrm\Service as RetailcrmService;

Спасибо.


#20
  1. В двух файлах насоображали изменений
    /app/addons/retailcrm/Tygh/Addons/Retailcrm/Converters
    orderconverter.php и customerconverter.php

Где передается массив данных по заказу, пишем
‘email’ => filter_var( $order[‘email’], FILTER_VALIDATE_EMAIL ) ? mb_strtolower( trim($order[‘email’]) ) : ( $order[‘order_id’] . ‘@example.com’ )

То есть, если почта корректная, передаем без изменений. Если нет - меняем на номеразаказа@example.com

  1. На днях столкнулись еще с ошибкой Error creating RetailCRM order: Order discount cannot be divided between items.

Решается установкой галки в настройках retailcrm.