Авито для бизнеса: события для разработчиков — советы в блоге
25 июля 2023
Автор: Авито для бизнеса
В новых версиях модуля «Авито для бизнеса» доступны пользовательские события для разработчиков. Вы сможете написать собственный PHP-код, который внесет изменения в файл объявлений или в процесс сохранения заказа.
События обработки заказов
Изменить процесс сохранения заказа Авито можно с помощью событий до (onBeforeOrderSave) и после (onAfterOrderSave). Также объявления, добавленные вручную, можно сопоставить с элементами инфоблока автоматически (onOrderUnknownItems).
Номер заказа Авито в номере заказа 1С-Битрикс
Если необходимо использовать номер заказа Авито в номере заказа 1С-Битрикс, предлагаем сохранить номер на событии onBeforeOrderSave и переопределить на событии onBeforeOrderAccountNumberSet модуля Интернет-магазин.
Дублирование информации в комментарий
Пользователи сталкиваются с проблемой, что при синхронии с RetailCRM, не передается трек-номер и название службы доставки. В качестве решения предлагаем дублировать информацию в комментарий заказа на событии onBeforeOrderSave.
Поиск товаров заказа
Если модулю не удалось найти товары заказа в инфоблоке, вы можете выполнить поиск самостоятельно на событии onOrderUnknownItems. Например, при добавлении объявления в названии указывайте идентификатор товара после символа # - Футболка Мужской Огонь #21.
События файлов объявлений
В файлах объявлений доступны события для форматирования значений onFeedOfferExtend и изменения тегов onFeedOfferWrite.
Форматирование значений
Для создания объявления значения должны быть отформатированы в соответствие с документацией Авито. Если уже храните значение в свойстве элементов инфоблока, добавьте Произвольный тег на шаге Сопоставление полей (Сервисы → Авито для бизнеса → Файлы с объявлениями), введите название тега и выберите свойство. Воспользуйтесь событием onFeedOfferExtend для форматирования.
Например, для автомобильных шин в 1С-Битрикс вводите бренд производителя Nordman, но на Авито требуется — Nokian Tyres.
Изменение тега
Если необходимо изменить содержимое тега, используйте событие onFeedOfferWrite. Например, поменять домен для изображений:
События обработки заказов
Изменить процесс сохранения заказа Авито можно с помощью событий до (onBeforeOrderSave) и после (onAfterOrderSave). Также объявления, добавленные вручную, можно сопоставить с элементами инфоблока автоматически (onOrderUnknownItems).
Номер заказа Авито в номере заказа 1С-Битрикс
Если необходимо использовать номер заказа Авито в номере заказа 1С-Битрикс, предлагаем сохранить номер на событии onBeforeOrderSave и переопределить на событии onBeforeOrderAccountNumberSet модуля Интернет-магазин.
Дублирование информации в комментарий
Пользователи сталкиваются с проблемой, что при синхронии с RetailCRM, не передается трек-номер и название службы доставки. В качестве решения предлагаем дублировать информацию в комментарий заказа на событии onBeforeOrderSave.
<?php
use Bitrix\Main;
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('avito.export', 'onBeforeOrderSave', function(Main\Event $event) {
/** @var \Avito\Export\Api\OrderManagement\Model\Order $avitoOrder */
/** @var \Bitrix\Sale\OrderBase $saleOrder */
$avitoOrder = $event->getParameter('AVITO_ORDER');
$saleOrder = $event->getParameter('ORDER');
$current = trim($saleOrder->getField('USER_DESCRIPTION'));
$additional = implode(PHP_EOL, [
$avitoOrder->delivery()->serviceName(),
$avitoOrder->delivery()->trackingNumber(),
]);
$new =
($current !== '' ? $current . PHP_EOL . '------' . PHP_EOL : '')
. $additional;
$saleOrder->setField('USER_DESCRIPTION', $new);
});
|
Поиск товаров заказа
Если модулю не удалось найти товары заказа в инфоблоке, вы можете выполнить поиск самостоятельно на событии onOrderUnknownItems. Например, при добавлении объявления в названии указывайте идентификатор товара после символа # - Футболка Мужской Огонь #21.
<?php
use Bitrix\Main;
use Avito\Export\Api;
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('avito.export', 'onOrderUnknownItems', function(Main\Event $event) {
/** @var Api\OrderManagement\Model\Order\Item[] $items */
$items = $event->getParameter('ITEMS');
$newMapping = [];
foreach ($items as $key => $item)
{
if (preg_match('/#([a-z0-9]+)\s*$/i', $item->title(), $matches))
{
$newMapping[$key] = $matches[1];
}
}
return new Main\EventResult(Main\EventResult::SUCCESS, $newMapping);
});
|
События файлов объявлений
В файлах объявлений доступны события для форматирования значений onFeedOfferExtend и изменения тегов onFeedOfferWrite.
Форматирование значений
Для создания объявления значения должны быть отформатированы в соответствие с документацией Авито. Если уже храните значение в свойстве элементов инфоблока, добавьте Произвольный тег на шаге Сопоставление полей (Сервисы → Авито для бизнеса → Файлы с объявлениями), введите название тега и выберите свойство. Воспользуйтесь событием onFeedOfferExtend для форматирования.
Например, для автомобильных шин в 1С-Битрикс вводите бренд производителя Nordman, но на Авито требуется — Nokian Tyres.
<?php
use Bitrix\Main;
use Avito\Export\Feed;
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('avito.export', 'onFeedOfferExtend', function(Main\Event $event) {
/** @var Feed\Engine\Data\TagValues[] $groupValues */
$groupValues = $event->getParameter('VALUES');
foreach ($groupValues as $tagValues)
{
if ($tagValues->get('Brand') === 'Nordman')
{
$tagValues->set('Brand', 'Nokian Tyres');
}
}
});
|
Изменение тега
Если необходимо изменить содержимое тега, используйте событие onFeedOfferWrite. Например, поменять домен для изображений:
<?php
use Bitrix\Main;
use Avito\Export\Feed;
$eventManager = Main\EventManager::getInstance();
$eventManager->addEventHandler('avito.export', 'onFeedOfferWrite', function(Main\Event $event) {
/** @var Feed\Engine\Data\TagCompiled[] $groupTags */
$groupTags = $event->getParameter('TAGS');
foreach ($groupTags as $tag)
{
$images = $tag->getChild('Images');
if ($images !== null)
{
foreach ($images->getChildren() as $image)
{
$url = $image->getAttribute('url');
$url = str_replace('olddomain.ru', 'newdomain.ru', $url);
$image->setAttribute('url', $url);
}
}
}
});
|
Статья полезна для
Предлагаем еще прочесть




