О чём канал «RetailCRM Tips and Tricks»
Всем привет! Меня зовут Алексей и в этом канале я делюсь собственными наработками по настройке и автоматизации RetailCRM. Пишу о триггерах, валидациях, шаблонах и настройках системы. Описываю интересные комбинации действий и условий, простых и сложных, очевидных и неочевидных. Здесь вы найдете авторский взгляд на хитрости использования настроек и объяснение тонких моментов функций, фильтров и действий.
Подпишитесь на мой канал, чтобы регулярно получать интересные решения и расскажите о нём своим друзьям.
▸ О чём этот канал
▸ Поблагодарить автора
▸ Навигация и темы
▸ Дисклеймер
▸ Ваши предложения
Всем привет! Меня зовут Алексей и в этом канале я делюсь собственными наработками по настройке и автоматизации RetailCRM. Пишу о триггерах, валидациях, шаблонах и настройках системы. Описываю интересные комбинации действий и условий, простых и сложных, очевидных и неочевидных. Здесь вы найдете авторский взгляд на хитрости использования настроек и объяснение тонких моментов функций, фильтров и действий.
Подпишитесь на мой канал, чтобы регулярно получать интересные решения и расскажите о нём своим друзьям.
▸ О чём этот канал
▸ Поблагодарить автора
▸ Навигация и темы
▸ Дисклеймер
▸ Ваши предложения
Как поблагодарить автора
Многие наработки это часы, дни или даже месяцы труда, потраченные на написание и тонкую отладку кода. Автор — владелец собственного небольшого интернет-магазина, который хочет помочь таким же предпринимателям и компаниям, как совсем маленьким и начинающим, так и крупным, организовать свою работу в RetailCRM, сделать её удобной и приятной. Интеграторы и разработчики за каждое описанное здесь решение с вас возьмут от 1500 до десятков тысяч рублей. Я буду делиться ими здесь открыто.
Ваши реакции не посты, будут отличной обратной связью и помогут в формировании контента:
👍 — классное решение
👨💻 — буду использовать
🤡 — а что, так можно было?
🤯 — ничего не понятно, но очень интересно
🥰 — автор, пиши ещё
Если вы используете мои наработки и хотите поблагодарить, то можете отправить мне донат:
— 💳 49 рублей
— 💳 99 рублей
— 💳 149 рублей
— 💳 499 рублей
— произвольную сумму
Автор будет крайне счастлив получить от вас благодарность, если описанные решения помогут вам в работе.
Многие наработки это часы, дни или даже месяцы труда, потраченные на написание и тонкую отладку кода. Автор — владелец собственного небольшого интернет-магазина, который хочет помочь таким же предпринимателям и компаниям, как совсем маленьким и начинающим, так и крупным, организовать свою работу в RetailCRM, сделать её удобной и приятной. Интеграторы и разработчики за каждое описанное здесь решение с вас возьмут от 1500 до десятков тысяч рублей. Я буду делиться ими здесь открыто.
Ваши реакции не посты, будут отличной обратной связью и помогут в формировании контента:
👍 — классное решение
👨💻 — буду использовать
🤡 — а что, так можно было?
🤯 — ничего не понятно, но очень интересно
🥰 — автор, пиши ещё
Если вы используете мои наработки и хотите поблагодарить, то можете отправить мне донат:
— 💳 49 рублей
— 💳 99 рублей
— 💳 149 рублей
— 💳 499 рублей
— произвольную сумму
Автор будет крайне счастлив получить от вас благодарность, если описанные решения помогут вам в работе.
Навигация и темы
Каждый пост может быть посвещен одной сущности или комбинации сущностей, например когда используется связка триггер + валидация + уведомление и будет подписываться соответствующим тегом:
#триггер
#валидация
#уведомление
#шаблон
#комбинация
#интеграция
#настройка
Некоторые посты могут быть посвещены не целому решению, а конкретному условию, которое может применяться внутри решения универсально. Такие посты будут иметь дополнительные теги:
#twig
#pipeline
#action
Посты посвещенные хакам и объяснениям будут дополняться тегами:
#хак
#объяснение
Все описанные в темах действия вы сможете произвести самостоятельно внутри системы, а если потребуется какой-то внешний код на вашем сервере, то буду давать пример содержания файла. Внутри кода буду стараться писать комментарии, которые будут объяснять что же делает конкретная строка, если из написанного кода это не становится очевидно.
Каждый пост может быть посвещен одной сущности или комбинации сущностей, например когда используется связка триггер + валидация + уведомление и будет подписываться соответствующим тегом:
#триггер
#валидация
#уведомление
#шаблон
#комбинация
#интеграция
#настройка
Некоторые посты могут быть посвещены не целому решению, а конкретному условию, которое может применяться внутри решения универсально. Такие посты будут иметь дополнительные теги:
#twig
#pipeline
#action
Посты посвещенные хакам и объяснениям будут дополняться тегами:
#хак
#объяснение
Все описанные в темах действия вы сможете произвести самостоятельно внутри системы, а если потребуется какой-то внешний код на вашем сервере, то буду давать пример содержания файла. Внутри кода буду стараться писать комментарии, которые будут объяснять что же делает конкретная строка, если из написанного кода это не становится очевидно.
Дисклеймер
Для каждой задачи могут быть альтернативные решения, поэтому описанные темы не претендуют на единственно правильное решение, однако у некоторых альтернатив всегда могут быть нюансы. Ваши существующие решения могут конфликтовать с описанными и/или требовать тонкой донастройки как ваших собственных, так и описанных автором решений. Всегда тестируйте решения перед внедрением, используйте отладочные механизмы и ставьте ограничения. Автор не несёт ответственности за потенциальные убытки, которые могут произойти в следствие использования описанных решений.
Для каждой задачи могут быть альтернативные решения, поэтому описанные темы не претендуют на единственно правильное решение, однако у некоторых альтернатив всегда могут быть нюансы. Ваши существующие решения могут конфликтовать с описанными и/или требовать тонкой донастройки как ваших собственных, так и описанных автором решений. Всегда тестируйте решения перед внедрением, используйте отладочные механизмы и ставьте ограничения. Автор не несёт ответственности за потенциальные убытки, которые могут произойти в следствие использования описанных решений.
Ваши предложения по темам
Если вы хотите, чтобы я осветил какую-то тему, пишите комментарии к этому посту. Описывайте вашу задачу и цель конкретно и в зависимости от того, насколько она будет актуальна для широкого круга пользователей и интересна, я напишу пост об этом раньше или позже. Отвечать на такие запросы я буду только если у вас в Телеграме есть ник, так как буду отмечать вас в соответствующем топике. Если у вас нет ника, то автор оставляет за собой право не отвечать на такие вопросы, если ответ не поможет действительно широкому кругу пользователей.
Если вы, также как и я, хотите помочь остальным, пишите в комментариях к решениям свои варианты.
Если вы хотите, чтобы я осветил какую-то тему, пишите комментарии к этому посту. Описывайте вашу задачу и цель конкретно и в зависимости от того, насколько она будет актуальна для широкого круга пользователей и интересна, я напишу пост об этом раньше или позже. Отвечать на такие запросы я буду только если у вас в Телеграме есть ник, так как буду отмечать вас в соответствующем топике. Если у вас нет ника, то автор оставляет за собой право не отвечать на такие вопросы, если ответ не поможет действительно широкому кругу пользователей.
Если вы, также как и я, хотите помочь остальным, пишите в комментариях к решениям свои варианты.
Нормализация телефонных номеров триггером
Часто телефонные номера из интеграций могут прилетать в очень разных форматах. Например:
На выходе хочется получить
С одной стороны, в шаблонах вы можете использовать фильтр и при выводе значения вместо
Название: Нормализация телефона
Символьный код: phone-normalize
Событие: Изменение заказа
Условие:
Действие
Изменить данные заказа > Телефон
Выражение: смотрите код в полной версии статьи
Особенности:
Учитывайте, что изменение телефона будет автоматически переоформлять интеграционную доставку, если синхронизация с интеграционной службой доставки уже совершена. В некоторых ситуациях это может изменить трек-номер отправления. Именно поэтому в условиях выбраны заказы которые создаются, либо находятся в группе статусов «Новый» и изменяется номер телефона. Рекомендуется производить нормализацию ДО синхронизации со службой доставки, а отправлять данные в доставку в группе статусов отличной от «Новый».
Текущее решение расчитано на длину исходной строки до 25 знаков, а также заменяет первую цифру 8, на 7, только если телефон не начинается с +8.
Объяснение:
Читайте в полной версии статьи
#триггер #хак
❤️ Поблагодарить автора 💸
✍️ Предложить тему публикации
.
Часто телефонные номера из интеграций могут прилетать в очень разных форматах. Например:
8 916 123-4567
7 916 123 45 67
+7 (916) 123-45-67
На выходе хочется получить
79161234567
С одной стороны, в шаблонах вы можете использовать фильтр и при выводе значения вместо
{{ order.phone }}
написать {{ order.phone|international_phone }}
. С другой стороны, в базе у вас всё равно будет хранится значение в исходном формате. При выгрузке базы в файл, вам может быть сложно искать телефон, так как форматы из разных источников могут быть разными. Проблему можно решить нормализацией через API, но это потребует от вас наличия внешнего скрипта, подключенного по API к вашей системе. Альтернативно можно проделать нормализацию триггером.Название: Нормализация телефона
Символьный код: phone-normalize
Событие: Изменение заказа
Условие:
(changeSet.isCreate or order.status.group.code in ['new'])
and (order.phone != null or changeSet.hasChangedField("phone"))
and order.phone matches '/[^\\d]/u'
Действие
Изменить данные заказа > Телефон
Выражение: смотрите код в полной версии статьи
Особенности:
Учитывайте, что изменение телефона будет автоматически переоформлять интеграционную доставку, если синхронизация с интеграционной службой доставки уже совершена. В некоторых ситуациях это может изменить трек-номер отправления. Именно поэтому в условиях выбраны заказы которые создаются, либо находятся в группе статусов «Новый» и изменяется номер телефона. Рекомендуется производить нормализацию ДО синхронизации со службой доставки, а отправлять данные в доставку в группе статусов отличной от «Новый».
Текущее решение расчитано на длину исходной строки до 25 знаков, а также заменяет первую цифру 8, на 7, только если телефон не начинается с +8.
Объяснение:
Читайте в полной версии статьи
#триггер #хак
❤️ Поблагодарить автора 💸
✍️ Предложить тему публикации
.
Не про RetailCRM
Я пользуюсь браузером Google Chrome и во время работы у меня часто открыто очень много вкладок. Порой это доходит до пары сотен вкладок в 5 и более окнах. Кто пользуется этим браузером, знает, что он будет сжирать всю память, сколько бы у вас её не было на борту. 8Gb / 16Gb / 32Gb — Chrome съест всю память.
Начиная с версии 108, в браузере появилась настройка очистки памяти и экономии батарейки. Чтобы их включить, вставьте в строку браузера следующие ссылки
и включите обе настройки.
Затем перейдите в настройки производительности по этой ссылке
Я пользуюсь браузером Google Chrome и во время работы у меня часто открыто очень много вкладок. Порой это доходит до пары сотен вкладок в 5 и более окнах. Кто пользуется этим браузером, знает, что он будет сжирать всю память, сколько бы у вас её не было на борту. 8Gb / 16Gb / 32Gb — Chrome съест всю память.
Начиная с версии 108, в браузере появилась настройка очистки памяти и экономии батарейки. Чтобы их включить, вставьте в строку браузера следующие ссылки
chrome://flags/#high-efficiency-mode-available
chrome://flags/#battery-saver-mode-available
и включите обе настройки.
Затем перейдите в настройки производительности по этой ссылке
chrome://settings/performance
и настройте под себя.Скрываем от конкурентов количество заказов в нашем магазине с помощью триггера
Если в вашем интернет-магазине заказы нумеруются последовательно, то ваш конкурент может достаточно просто вычислить какое у вас количество заказов. Для этого надо делать заказы с определенной регулярностью, допустим раз в месяц, и считать разницу между предыдущим и настоящим заказом.
Чтобы усложнить данную задачу, до уровня практической невозможности вычисления (почему практической, напишу в объяснении), можно формировать номер заказа исходя из текущего timestamp. То есть каждую следующую секунду, номер заказа будет отличаться на +1 от предыдущего. В месяце от 2419200 до 2678400 секунд. Если все ваши заказы отражают каждую секунду, в которую мог быть сделан заказ, то определить сколько у вас в действительности было заказов, имея номер заказа, будет невозможно. Их мог быть как один в месяц, так и 2678400 за этот же месяц.
Проделать такую операцию можно триггером внутри RetailCRM и вместо номеров заказов
Название: Обфускация номера заказа
Символьный код: order_number-obfuscate
Событие: Изменение заказа
Условие:
Действие:
Изменить данные заказа > Номер заказа
Выражение: смотрите код в полной версии статьи
Особенности:
В условие необходимо будет вставить символьные коды ваших магазинов, номера заказов которых надо переделывать. Это необходимо для того, чтобы если вы работаете с интеграциями маркетплейсов, где прилетают свои номера заказов, чтобы они не изменялись. Продолжение в полной версии статьи.
Объяснение:
Читайте в полной версии статьи
#триггер #хак
❤️ Поблагодарить автора 💸
✍️ Предложить тему публикации
.
Если в вашем интернет-магазине заказы нумеруются последовательно, то ваш конкурент может достаточно просто вычислить какое у вас количество заказов. Для этого надо делать заказы с определенной регулярностью, допустим раз в месяц, и считать разницу между предыдущим и настоящим заказом.
Чтобы усложнить данную задачу, до уровня практической невозможности вычисления (почему практической, напишу в объяснении), можно формировать номер заказа исходя из текущего timestamp. То есть каждую следующую секунду, номер заказа будет отличаться на +1 от предыдущего. В месяце от 2419200 до 2678400 секунд. Если все ваши заказы отражают каждую секунду, в которую мог быть сделан заказ, то определить сколько у вас в действительности было заказов, имея номер заказа, будет невозможно. Их мог быть как один в месяц, так и 2678400 за этот же месяц.
Проделать такую операцию можно триггером внутри RetailCRM и вместо номеров заказов
1234, 1235, 1236
получать 100-741-353, 100-746-007, 100-882-116
, по которым вычислить, что у вас за это время произошло только три заказа, уже нельзя.Название: Обфускация номера заказа
Символьный код: order_number-obfuscate
Событие: Изменение заказа
Условие:
// Определяем, что переделывать номер необходимо только во время создания заказа
changeSet.isCreate
// Установите здесь значения магазинов, для которых требуется переделывать номера заказов
and order.site.code in ['my-first-shop-code', 'my-second-shop-code']
Действие:
Изменить данные заказа > Номер заказа
Выражение: смотрите код в полной версии статьи
Особенности:
В условие необходимо будет вставить символьные коды ваших магазинов, номера заказов которых надо переделывать. Это необходимо для того, чтобы если вы работаете с интеграциями маркетплейсов, где прилетают свои номера заказов, чтобы они не изменялись. Продолжение в полной версии статьи.
Объяснение:
Читайте в полной версии статьи
#триггер #хак
❤️ Поблагодарить автора 💸
✍️ Предложить тему публикации
.
Вывести количество полных дней, которое прошло с определенного события
Иногда требуется вывести менеджеру информацию, сколько дней прошло с определенного события. Например если заказ хранится в пункте выдачи уже более 16 дней, либо заказ ожидает оплаты более 5 дней. Разницу вычислять необходимо от какой-то определенной даты и удобнее всего это делать от даты изменения статуса. Например от статуса «Ожидает в пункте выдачи» или «Ожидает оплаты».
В коде шаблона примените следующее выражение:
Данный код покажет разницу в полных днях между текущим моментом и датой последнего изменения статуса.
Комбинируя и дополняя условия можно более тонко настроить оповещения менеджерам. Например в тексте оповещения можно написать следующий код:
Код из примера выведет текст оповещения
Если прошло более 6 дней:
Если прошло более 11 дней:
Если прошло более 16 дней:
Если прошло более 30 дней:
Особенности:
Данный пример можно использовать в шаблонах печатных форм, оповещений, писем и SMS, а также не только от даты изменения статуса, но и от любой другой даты, например записанной в пользовательское поле.
#уведомление #шаблон #twig
❤️ Поблагодарить автора 💸
✍️ Предложить тему публикации
.
Иногда требуется вывести менеджеру информацию, сколько дней прошло с определенного события. Например если заказ хранится в пункте выдачи уже более 16 дней, либо заказ ожидает оплаты более 5 дней. Разницу вычислять необходимо от какой-то определенной даты и удобнее всего это делать от даты изменения статуса. Например от статуса «Ожидает в пункте выдачи» или «Ожидает оплаты».
В коде шаблона примените следующее выражение:
{{ (("now"|date("U") - order.statusUpdatedAt|date("U"))/60/60/24)|round(0, 'floor') }}
Данный код покажет разницу в полных днях между текущим моментом и датой последнего изменения статуса.
Комбинируя и дополняя условия можно более тонко настроить оповещения менеджерам. Например в тексте оповещения можно написать следующий код:
Заказ {{ order.number }} ожидает в пункте выдачи уже {{ (("now"|date("U") - order.statusUpdatedAt|date("U"))/60/60/24)|round(0, 'floor') }} дней.
{% if ((("now"|date("U") - order.statusUpdatedAt|date("U"))/60/60/24)|round(0, 'floor')) >= 30 %}
Оформить возвратную накладную в службе доставки.
{% elseif ((("now"|date("U") - order.statusUpdatedAt|date("U"))/60/60/24)|round(0, 'floor')) >= 16 %}
Позвонить клиенту и если клиент отказывается забирать, то оформить возвратную накладную в службе доставки, либо продлить срок хранения по просьбе клиента.
{% elseif ((("now"|date("U") - order.statusUpdatedAt|date("U"))/60/60/24)|round(0, 'floor')) >= 11 %}
Напомнить клиенту об истечение срока хранения.
{% elseif ((("now"|date("U") - order.statusUpdatedAt|date("U"))/60/60/24)|round(0, 'floor')) >= 6 %}
Напомнить клиенту, что заказ в пункте выдачи.
{% endif %}
Код из примера выведет текст оповещения
Если прошло более 6 дней:
Заказ 123-456-789 ожидает в пункте выдачи уже 6 дней. Напомнить клиенту забрать заказ.
Если прошло более 11 дней:
Заказ 123-456-789 ожидает в пункте выдачи уже 11 дней. Напомнить клиенту об истечение срока хранения.
Если прошло более 16 дней:
Заказ 123-456-789 ожидает в пункте выдачи уже 16 дней. Позвонить клиенту и если клиент отказывается забирать, то оформить возвратную накладную в службе доставки, либо продлить срок хранения по просьбе клиента.
Если прошло более 30 дней:
Заказ 123-456-789 ожидает в пункте выдачи уже 30 дней. Оформить возвратную накладную в службе доставки.
Особенности:
Данный пример можно использовать в шаблонах печатных форм, оповещений, писем и SMS, а также не только от даты изменения статуса, но и от любой другой даты, например записанной в пользовательское поле.
#уведомление #шаблон #twig
❤️ Поблагодарить автора 💸
✍️ Предложить тему публикации
.