Продолжаю рассказывать об автоматизации рабочих процессов и сегодня речь пойдет об отправке заказа в интернет-магазине в телеграмм. Это полезно в тех случаях, когда вы обрабатываете заказы вручную (например в нише с одеждой и обувью премиум класса). Админка сайта не очень удобна для обработки заказа и коммуникации, поэтому принято решение настроить отправку всех данных продавцам и менеджерам данных в телеграмм с использованием N8N. Полезно так же работать с незавершенными заказами.

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

N8n woo

Прежде чем начинать — сделайте полный бэкап сайта и базы данных (обязательно). Это требование — всегда. Также обновите WordPress, плагины и тему; используйте Child Theme.

Шаг 1 — подготовка WooCommerce

Обновите WordPress + WooCommerce + плагины (и сделайте бэкап).

Настройте API-ключи: WooCommerce → Settings → Advanced → REST API (сразу скопируйте их в надежное место, они показываются только один раз). По сути основные настройки на стороне сайта завершены, дальше мы перемещаемся в N8N.

Шаг 2 — настроить n8n workflow

Я буду исходить из того что у вас уже есть настроенный сервис N8N и к нему подключен Телеграм бот, если нет, то ознакомьтесь с моей предыдущей статьей как настроить мониторинг (там подробно рассказано как развернуть бесплатно N8N на своем сервере).

Создайте новый workflow.

Image

Добавьте WooCommerce Trigger:

  • Event: order.updated (для срабатывания при обновлении заказа) или другой, который вам нужен.
  • Укажите credentials (API ключи или webhook). Дайте n8n доступ к вашему сайту. n8n Docs+1
  • Включите Include Credentials in Query

Важное замечание: событие order.updated иногда срабатывает несколько раз при создании заказа (платёж, обновления статуса). В зависимостях от бизнес-логики фильтруйте по status.

Image

Добавьте узел If:

Условие: {{ $json.status }} equals «on-hold» OR equals «processing». Это добавляет логику фильтрации статуса заказа. Мне нужен только processing когда я точно понимаю, что заказ оплачен и только тогда процесс продолжается. А статус on-hold полезен когда заказ в ожидании, полезно для понимания трудностей у клиента и он завис на стадии оплаты (тут можно всякое придумать, связаться с ним или отправить промокод).

Image

После If (true) добавьте узел Code (JavaScript) и вставьте приведённый ниже код (он формирует order_composition_text). Если в заказе более одного предмета соберет их вместе и отправит текстом в сообщении в Telegram.

// Получаем данные из предыдущего узла
const rawInput = $input.item.json;

// Данные заказа могут приходить как массив с одним объектом. Извлекаем объект.
const order = Array.isArray(rawInput) && rawInput.length > 0 ? rawInput[0] : rawInput;

// Убедимся, что у нас есть действительный объект заказа и товары
if (!order || !order.line_items) {
  throw new Error("Не найдены данные заказа или список товаров (line_items).");
}

// Создаем пустую строку для состава заказа
let orderComposition = "";

// Перебираем каждый товар в line_items
for (const item of order.line_items) {
  // Добавляем основную информацию о товаре
  let itemLine = `\n- ${item.name} | ${item.price} ${order.currency_symbol} | Кол-во: ${item.quantity} | Арт: ${item.sku}`; // Ищем и добавляем опции товара (например, размер), исключая служебные
  const publicMetaData = item.meta_data.filter(
    (meta) => !meta.key.startsWith("_")
  );
  if (publicMetaData.length > 0) {
    const options = publicMetaData
      .map((meta) => `${meta.display_key}: ${meta.display_value}`)
      .join(", ");
    itemLine += ` (${options})`;
  }

  // Завершаем строку точкой с запятой и добавляем к общему составу
  orderComposition += itemLine + ";";
}

// Добавляем готовую строку в сам объект заказа
order.order_composition_text = orderComposition;

// Возвращаем обновленные данные для следующего узла
return $input.item;

Добавьте узел Telegram:

  • Resource: Message, Operation: Send Message.
  • Chat ID: ваш ID
  • Text: вставьте форматированный шаблон — используйте MarkdownV2 или Markdown (проверьте parse mode) и отключите web preview по необходимости. n8n Docs+1
  • Мой текст ниже, учтите что я использую переменные СДЭК (отредактируйте если они вам не нужны).
*🎉 Новый заказ #{{ $('WooCommerce Trigger').item.json.id }}*  
*Статус:* {{ $('WooCommerce Trigger').item.json.status }}

*Клиент:* {{ $('WooCommerce Trigger').item.json.billing.first_name }} {{ $('WooCommerce Trigger').item.json.billing.last_name }}
*Телефон:* {{ $('WooCommerce Trigger').item.json.billing.phone }}
*Email:* {{ $('WooCommerce Trigger').item.json.billing.email }}

*Сумма:* *{{ $('WooCommerce Trigger').item.json.total }} {{ $('WooCommerce Trigger').item.json.currency }}* 

*Состав заказа:*{{ $json.order_composition_text }}

*Доставка СДЭК:* {{ $node["WooCommerce Trigger"].json["shipping_lines"]["0"]["meta_data"]["2"]["value"] }} {{ $node["WooCommerce Trigger"].json["shipping_lines"]["0"]["meta_data"]["9"]["display_value"] }} {{ $json[0].shipping_lines[0].method_title }}

Адрес клиента: {{ $node["WooCommerce Trigger"].json["billing"]["city"] }}, {{ $node["WooCommerce Trigger"].json["billing"]["address_1"] }}

Протестируйте workflow: создайте тестовый заказ или обновите статус существующего и посмотрите, как n8n получает payload и отправляет сообщение. В логах n8n можно детально видеть входящие JSON.

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

Остались вопросы или хотите чтобы я настроил вам подобную автоматизацию, свяжитесь со мной!