Рабочее время склада в twig-шаблонах
В справочник объектов, доступных в триггерах и Twig-шаблонах, добавлены данные о рабочем времени склада.
Информация о рабочем времени склада передаётся в объекте
Каждый элемент массива содержит следующие поля:
-
-
-
-
Доступ к объекту
В справочник объектов, доступных в триггерах и Twig-шаблонах, добавлены данные о рабочем времени склада.
Информация о рабочем времени склада передаётся в объекте
Store:store.workTimes — массив объектов с интервалами рабочего времени склада отгрузки.Каждый элемент массива содержит следующие поля:
-
day — день недели (0 — воскресенье, 6 — суббота)-
workFrom — время начала работы (в формате ЧЧ:ММ)-
workUntil — время окончания работы (в формате ЧЧ:ММ)lunchFrom — время начала обеденного перерыва (в формате ЧЧ:ММ)-
lunchUntil — время окончания обеденного перерыва (в формате ЧЧ:ММ)Доступ к объекту
Store осуществляется через поля объекта заказа Order либо объекта упаковки товаров OrderProductPack.👍10
Media is too big
VIEW IN TELEGRAM
Для JS-модулей появилась возможность как получать, так и вносить изменения в состав заказа в рамках таргетов карточки заказа.
Получать данные состава заказа можно из поля
items контекста order/card (справочник таргетов и их контекстов https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModulesTargets)Вносить изменения в состав заказа можно через новый объект действий
useActions() контекста order/card. Список доступных действий приведен в том же справочнике таргетов и контекстов по ссылке выше. Работа с действиями описана в новом разделе документации https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModules#h-15В библиотеке примеров подготовлен демонстрационный кейс
cases/orderPromo, где показано как получение данных состава заказа, так и внесение в него изменений.#jsapi
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍5❤3
Передача внутреннего ID сообщения в webhook
Теперь в Transport API в запросе webhook с типом
Изменения в API:
— Webhook
— Методы, принимающие внутренний ID:
•
•
•
•
•
•
Основная цель данного нововведения — повышение устойчивости взаимодействия MessageGateway с транспортами:
— Можно продолжать работу с сообщением даже если транспорт не вернул
— В
Обратная совместимость: работа, основанная на
Подробнее в документации
message_sentТеперь в Transport API в запросе webhook с типом
message_sent передаётся внутренний ID сообщения в MessageGateway. Кроме того, все методы редактирования сообщений принимают этот внутренний ID как ключ для работы с сообщением.Изменения в API:
— Webhook
message_sent — содержит внутренний ID сообщения.— Методы, принимающие внутренний ID:
•
PUT /messages•
POST /messages/ack•
POST /messages/read•
POST /messages/restore•
DELETE /messages/reaction•
POST /messages/reactionОсновная цель данного нововведения — повышение устойчивости взаимодействия MessageGateway с транспортами:
— Можно продолжать работу с сообщением даже если транспорт не вернул
external_id в ответ на webhook message_sent или произошла сетевая ошибка, но запрос был обработан транспортом.— В
POST /messages/ack можно передать и внутренний ID, и external_id — тогда external_id будет установлен для сообщения и связь восстановится.Обратная совместимость: работа, основанная на
external_id, остается без изменений.Подробнее в документации
🔥5👍1👏1
Twig/Pipelang-функция получения остатков торгового предложения по складам offer_inventories
В Twig и Pipelang добавлена функция
Спецификация функции
Принимает параметры
Если указан и
Возвращаемое значение
Примеры вызова
В Twig
В Pipelang
Описание функций в документации
https://docs.retailcrm.ru/Developers/Automation/Twig/FunctionDictionariesTwig
https://docs.retailcrm.ru/Developers/Automation/PipeLang/Expressionlanguage/AvailableFunctions
В Twig и Pipelang добавлена функция
offer_inventories для получения остатков торгового предложения (Offer) в разрезе складов.Спецификация функции
offer_inventories(Offer offer, Site|null site = null, Store[]|Store|null stores = null): Inventory[]
Принимает параметры
Offer offer — объект торгового предложенияSite|null site = null — объект магазина, опциональный (будут возвращены остатки только по складам магазина)Store[]|Store|null stores = null — объект или массив объектов склада, опциональный (будут возвращены остатки только по указанным складам)Если указан и
site, и stores, учитывается пересечение параметров.Возвращаемое значение
Inventory[] — возвращается массив остатков по складам (массив объектов типа Inventory). В Inventory доступно значение остатка Inventory.quantity. Для складов в режиме «есть в наличии = да/нет», будет возвращаться 1/0 соответственно. Также доступны поля склада, по которому приведены данные, и закупочная цена на этом складе.Примеры вызова
В Twig
{# Различные варианты вызова функции #}
{% set inventories = offer_inventories(op.offer) %}
{% set inventories = offer_inventories(op.offer, order.site) %}
{% set inventories = offer_inventories(op.offer, order.site, entity_by_code('Store', 'store-1')) %}
{% set inventories = offer_inventories(op.offer, null, [entity_by_code('Store', 'store-1'), entity_by_code('Store', 'store-2')]) %}
{% set inventories = offer_inventories(op.offer, null, order.shipmentStore) %}
{# Получаем остатки по торговым предложениях позиций заказа для склада 'store-1' c проверкой принадлежности склада к магазину заказа #}
{% for op in order.availableOrderProducts %}
{% for i in offer_inventories(op.offer, order.site, entity_by_code('Store', 'store-1')) %}
{{ i.store.code }}:{{ i.quantity }}
{% endfor %}
{% endfor %}
В Pipelang
# строка из пар <символьный код склада>:<остатки>
offer_inventories(offer, order.site) | reduce((res, x) => res ~ x.store.code ~ ':' ~ x.quantity ~ ';', '')
# вернет true, если на всех складах магазина site-1 остатки данного оффера больше 10
offer_inventories(offer, entity_by_code('Site', 'site-1')) | every(x => x.quantity > 10)
# возвращает склад магазина заказа, где больше всего остатков
(offer_inventories(offer, order.site) | sort((a, b) => a.quantity < b.quantity) | first).store
Описание функций в документации
https://docs.retailcrm.ru/Developers/Automation/Twig/FunctionDictionariesTwig
https://docs.retailcrm.ru/Developers/Automation/PipeLang/Expressionlanguage/AvailableFunctions
docs.retailcrm.ru
RetailCRM Документация: Доступные функции
Основные и вспомогательные функции доступные при работе с объектами системы.
🔥11❤1👍1
Минимальная остаточная стоимость товара/услуги в программе лояльности
В ответы API-методов GET /api/v5/loyalty/loyalties и GET /api/v5/loyalty/loyalties/{id} добавлено поле
Данное поле может быть полезно, например, если необходимо учитывать программы лояльности только с включенной подобной настройкой.
В ответы API-методов GET /api/v5/loyalty/loyalties и GET /api/v5/loyalty/loyalties/{id} добавлено поле
minResidualCost, позволяющее получать информацию о настройке минимальной остаточной стоимости товара/услуги. В случае, если настройка выключена, поле возвращаться не будет. Данное поле может быть полезно, например, если необходимо учитывать программы лояльности только с включенной подобной настройкой.
docs.retailcrm.ru
RetailCRM Документация: Справочник методов API v5
Справочник, в котором представлены все доступные методы API v5
👍3🔥3❤2👀1
Добавлены API-методы получения и создания/редактирования категорий подписок
Добавлены API-методы:
*
*
Подробнее в документации:
* GET /api/v5/reference/subscriptions
* POST /api/v5/reference/subscriptions/{channel}/{code}/edit
Добавлены API-методы:
*
GET /api/v5/reference/subscriptions для получения списка всех категорий подписок*
POST /api/v5/reference/subscriptions/{channel}/{code}/edit для созданий или редактирования категории подписки.Подробнее в документации:
* GET /api/v5/reference/subscriptions
* POST /api/v5/reference/subscriptions/{channel}/{code}/edit
docs.retailcrm.ru
RetailCRM Документация: Справочник методов API v5
Справочник, в котором представлены все доступные методы API v5
👍3🔥1
Флаг массовой рассылки в Bot API
В методе Bot API
Что изменилось
В теле запроса можно передать
Когда будет полезно
Флаг пригодится, если ваш бот занимается массовыми рассылками клиентам, а вы хотите избежать лишнего «шума» в интерфейсе чатов — появления новых диалогов и непрочитанных сообщений у менеджеров. Кроме того, использование
Подробнее в документации
В методе Bot API
POST /messages появилось новое булево поле mass_communication.Что изменилось
В теле запроса можно передать
mass_communication: true, чтобы пометить сообщение как часть массовой рассылки. Такое сообщение не открывает диалог в чате и не обновляет его last_activity. Чаты, инициированные такими сообщениями, а также связанные с ними WebSocket-события возвращаются только при указании параметра для получения массовых коммуникаций include_mass_communication.Когда будет полезно
Флаг пригодится, если ваш бот занимается массовыми рассылками клиентам, а вы хотите избежать лишнего «шума» в интерфейсе чатов — появления новых диалогов и непрочитанных сообщений у менеджеров. Кроме того, использование
mass_communication поможет снизить количество обращений к API: теперь нет необходимости вручную закрывать диалоги, созданные такими рассылками.Подробнее в документации
🔥9
Twig-функция для выполнения HTTP-запроса к бекенду JS-модуля
В Twig добавлена функция
Спецификация функции
Принимает параметры
Возвращаемое значение
Объект типа HttpCallResponse с полями
Примеры вызова
Описание функции в документации
https://docs.retailcrm.ru/Developers/Automation/Twig/FunctionDictionariesTwig
#jsapi
В Twig добавлена функция
integration_module_http_call для выполнения HTTP-запроса к бекенду JS-модуля.Спецификация функции
integration_module_http_call(
string moduleCode,
string path,
string|json-object|null payload = null
): HttpCallResponse
Принимает параметры
string moduleCode — код экземпляра модуляstring path — путь, на который в бекенд модуля будет отправлен запросstring|json-object|null payload = null — значение опционального POST-параметра payloadВозвращаемое значение
Объект типа HttpCallResponse с полями
int status и HttpCallResponseBody body.Примеры вызова
{% set response = integration_module_http_call(
'module-code', '/get-promocode', 'somePayload'
) %}
Ваш промокод {{ response.status == 200 ? response.body : 'error' }}
# Передача json-объекта в payload
{% set response = integration_module_http_call(
'module-code', '/get-promocode', {order_id: 1}
) %}
# Если response.body является закодированной в JSON строкой вида '{"promocode": "foobar"}', то доступ к полю "promocode" можно получить через свойство "json"
{{ response.body.json.promocode }}
Описание функции в документации
https://docs.retailcrm.ru/Developers/Automation/Twig/FunctionDictionariesTwig
#jsapi
👍5🔥3❤2
Поле MGMessage.channelType в Sandbox
В объект MGMessage добавлено новое поле channelType, которое указывает тип канала, в который было отправлено сообщение.
Поле принимает одно из следующих значений, соответствующих поддерживаемым типам каналов в системе:
- telegram
- fbmessenger*
- viber
- whatsapp
- skype
- vk
- instagram*
- consultant
- yandex_chat
- odnoklassniki
- max
- ozon
- wildberries
- yandex_market
- mega_market
- avito
- drom
- youla
- custom
Использование поля
Пример использования в условии срабатывания триггера
При срабатывании триггера на событие (например, после выполнения родительского триггера для заказа), возможно задать следующее условие:
Так как родительский триггер может отправить сообщение в один из доступных для коммуникации каналов (в случае, если выбрана данная опция), тип канала заранее неизвестен.
В дочернем триггере можно проверить фактический тип канала, в который было отправлено сообщение.
В примере выше срабатывание дочернего триггера произойдет, только если сообщение, созданное в родительском триггере, было отправлено в канал Telegram.
Подробнее о доступных объектах и полях — в справочнике объектов.
* Деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook и Instagram — на территории Российской Федерации запрещена решением суда.
В объект MGMessage добавлено новое поле channelType, которое указывает тип канала, в который было отправлено сообщение.
Поле принимает одно из следующих значений, соответствующих поддерживаемым типам каналов в системе:
- telegram
- fbmessenger*
- viber
- skype
- vk
- instagram*
- consultant
- yandex_chat
- odnoklassniki
- max
- ozon
- wildberries
- yandex_market
- mega_market
- avito
- drom
- youla
- custom
Использование поля
channelType позволяет гибко настраивать условия срабатывания дочерних триггеров с учётом канала, в который было отправлено сообщение в родительском триггере.Пример использования в условии срабатывания триггера
При срабатывании триггера на событие (например, после выполнения родительского триггера для заказа), возможно задать следующее условие:
parent.actions | contains (action => action.mgMessages | contains(message => message.channelType == 'telegram'))
Так как родительский триггер может отправить сообщение в один из доступных для коммуникации каналов (в случае, если выбрана данная опция), тип канала заранее неизвестен.
В дочернем триггере можно проверить фактический тип канала, в который было отправлено сообщение.
В примере выше срабатывание дочернего триггера произойдет, только если сообщение, созданное в родительском триггере, было отправлено в канал Telegram.
Подробнее о доступных объектах и полях — в справочнике объектов.
* Деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook и Instagram — на территории Российской Федерации запрещена решением суда.
🔥8❤1👍1
Возможность указания родителя товарной группы через API
В API-методы
Подробнее в документации тут и тут.
В API-методы
POST /api/v5/store/product-groups/create и POST /api/v5/store/product-groups/{externalId}/edit добавлена возможность указания родителя товарной группы путём использования полей parentId и parentExternalId.Подробнее в документации тут и тут.
🔥4❤1👍1
Возможность добавлять и редактировать изображение товара по API
В API-методах
Подробнее в документации тут и тут.
В API-методах
POST /api/v5/store/products/batch/create и POST /api/v5/store/products/batch/edit появилась возможность добавления и редактирования изображения товара путём передачи параметра imageUrl. Необходимо указать ссылку на изображение (требования такие же, как и при работе с ICML - можно указывать изображения в формате jpg, png размером не более 2Мб, важно указывать корректный протокол (https:// или https://) и домен (с www или без него), а также важно, чтобы ссылка на товар была прямой и при переходе на нее не производились редиректы).Подробнее в документации тут и тут.
🔥6
Vue-компонент UiTextbox для JS-модулей
В витрину компонентов добавлен Vue-компонент <UiTextbox> для использования в JS-модулях.
Компонент позволяет вывести текстовое поле ввода (как input поле, так и textarea) с возможностью донастройки:
* добавления иконки до/после поля
* добавления текста до/после поля
* указания типа допустимых значений (текст, число, email и др)
* и целый ряд других настроек
Рекомендовано использовать данный компонент в разрабатываемых модулях для вывода полей ввода.
Витрина компонентов https://retailcrm.github.io/embed-ui/v1-components/latest/index.html
Документация по JS-модулям https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModules
#jsapi
В витрину компонентов добавлен Vue-компонент <UiTextbox> для использования в JS-модулях.
Компонент позволяет вывести текстовое поле ввода (как input поле, так и textarea) с возможностью донастройки:
* добавления иконки до/после поля
* добавления текста до/после поля
* указания типа допустимых значений (текст, число, email и др)
* и целый ряд других настроек
Рекомендовано использовать данный компонент в разрабатываемых модулях для вывода полей ввода.
Витрина компонентов https://retailcrm.github.io/embed-ui/v1-components/latest/index.html
Документация по JS-модулям https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModules
#jsapi
🔥7👍1
Перенаправление пользователя на страницы системы в JS-модулях
В JS API добавлена функция
Справочник роутов страниц системы, на которые можно перенаправлять https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModulesRoutes. Справочник расширен новыми страницами
Документация по данной функциональности https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModules#h-18
#jsapi
В JS API добавлена функция
goTo(route, params?) для перенаправления пользователя на определенную страницу системы. Сигнатура функции такая же, как у функции роутера генерации ссылки на страницу системы.
import { useHost } from '@retailcrm/embed-ui'
const host = useHost()
// идентификатор заказа
const id = 12345
// перенаправляем пользователя на страницу с редактирования заказа
host.goTo(
'crm_orders_edit',
{ id }
)
Справочник роутов страниц системы, на которые можно перенаправлять https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModulesRoutes. Справочник расширен новыми страницами
Документация по данной функциональности https://docs.retailcrm.ru/Developers/modules/PublishingModuleMarketplace/JsModules#h-18
#jsapi
Telegram
RetailCRM pro
Генерация ссылок на страницы системы в JS-модулях
Для JS-модулей добавлена возможность генерации ссылок на страницы системы
<UiLink :href="router.generate('crm_manager_show', { id: userId })">
{{ t('profile') }}
</UiLink>
Справочник роутов страниц…
Для JS-модулей добавлена возможность генерации ссылок на страницы системы
<UiLink :href="router.generate('crm_manager_show', { id: userId })">
{{ t('profile') }}
</UiLink>
Справочник роутов страниц…
🔥5👍1
Новые точки встраивания JS-модулей в начале и конце блока «В работе» в карточке клиента
В карточке клиента в блоке «В работе» добавлены точки встраивания
Отображение элементов в новом таргете добавлено в примере
Во всех таргетах карточки клиента
Посмотреть доступные JS-модулям таргеты можно в справочнике.
#jsapi
В карточке клиента в блоке «В работе» добавлены точки встраивания
customer/card:inWork.before в начале и customer/card:inWork.after в конце.Отображение элементов в новом таргете добавлено в примере
cases/allTargetsButton библиотеки примеров @retailcrm/core-ui-extensions-examples.Во всех таргетах карточки клиента
customer/card:* доступны штатные поля клиента customer/card, а также все пользовательские поля клиента в режиме «только чтение».Посмотреть доступные JS-модулям таргеты можно в справочнике.
#jsapi
🔥5❤1👍1
API-метод для импорта инвойса
Добавлен API-метод
Подробнее в документации
Добавлен API-метод
POST /api/v5/payment/invoice/import для передачи информации об уже завершенной интеграционной оплате в CRM.Подробнее в документации
docs.retailcrm.ru
RetailCRM Документация: Справочник методов API v5
Справочник, в котором представлены все доступные методы API v5
🔥5👍1
Информация об упаковках интеграционной доставки заказа в справочнике объектов
В справочник объектов добавлены данные об упаковках интеграционной доставки в заказе -
Содержит в себе список упаковок с указанием основных параметров (идентификатор, вес и габариты) и входящих в состав товаров из заказа.
Теперь стал доступен, например, вывод информации о сформированных упаковках для печатных форм заказа.
Пример в
В справочник объектов добавлены данные об упаковках интеграционной доставки в заказе -
presentationPackages (order.integrationDeliveryData.presentationPackages).Содержит в себе список упаковок с указанием основных параметров (идентификатор, вес и габариты) и входящих в состав товаров из заказа.
Теперь стал доступен, например, вывод информации о сформированных упаковках для печатных форм заказа.
Пример в
Twig (со всеми доступными полями):{% if order.integrationDeliveryData.presentationPackages %}
{% for package in order.integrationDeliveryData.presentationPackages %}
{{ package.packageId }}
{{ package.weight }}
{{ package.length }}
{{ package.width }}
{{ package.height }}
{% for item in package.items %}
{{ item.orderProduct.id }} / {{ item.orderProduct.externalId }}
{% for externalIds in item.orderProduct.externalIds %}
{{ externalIds.code }} - {{ externalIds.value }}
{% endfor %}
кол-во: {{ item.quantity }}шт
{% endfor %}
{% endfor %}
{% endif %}🔥4👍2
Точки встраивания в новой форме редактирования заказа в чатах
В разделе Чаты запущена новая версия виджета Заказы, в которой можно редактировать практически все данные заказа.
В рамках заказа чата добавлены:
*
*
*
*
*
*
В этих точках доступен контекст, который используется в точках встраивания карточки заказа
Отображение элементов в новом таргете добавлено в примере
Посмотреть доступные JS-модулям таргеты можно в справочнике.
#jsapi
В разделе Чаты запущена новая версия виджета Заказы, в которой можно редактировать практически все данные заказа.
В рамках заказа чата добавлены:
*
order/mg:list.before – перед списком товарных позиций*
order/mg:list.after – после списка товарных позиций*
order/mg:delivery.before – в начале секции доставки*
order/mg:delivery.after – в конце секции доставки*
order/mg:payment.before – в начале секции оплаты*
order/mg:payment.after – в конце секции оплатыВ этих точках доступен контекст, который используется в точках встраивания карточки заказа
order/card:*, так что расширения, написанные для карточки заказа должны работать корректно и в новых точках встраивания в чатах. Чтобы расширение заработало в новой точке, достаточно добавить цель встраивания в список доступных расширению целей.Отображение элементов в новом таргете добавлено в примере
cases/allTargetsButton библиотеки примеров @retailcrm/core-ui-extensions-examples.Посмотреть доступные JS-модулям таргеты можно в справочнике.
#jsapi
🔥8👍2❤1
Добавлен метод для более простого доступа к участию клиента в программе лояльности
В объект Customer добавлен новый метод
Подробнее в документации:
https://docs.retailcrm.ru/Developers/Automation/ObjectReference/Customer
https://docs.retailcrm.ru/Developers/Automation/ObjectReference/LoyaltyAccount
В объект Customer добавлен новый метод
customer.loyaltyAccount. Его можно использовать вместо более сложного выражения customer.loyaltyAccountBySiteCode(customer.site.code). Поведение и возвращаемый объект LoyaltyAccount для обоих выражений идентичны.Подробнее в документации:
https://docs.retailcrm.ru/Developers/Automation/ObjectReference/Customer
https://docs.retailcrm.ru/Developers/Automation/ObjectReference/LoyaltyAccount
🎉6👍5