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

Прежде чем начинать — сделайте полный бэкап сайта и базы данных (обязательно). Это требование — всегда. Также обновите WordPress, плагины и тему; используйте Child Theme.
Шаг 1 — подготовка WooCommerce
Обновите WordPress + WooCommerce + плагины (и сделайте бэкап).
Настройте API-ключи: WooCommerce → Settings → Advanced → REST API (сразу скопируйте их в надежное место, они показываются только один раз). По сути основные настройки на стороне сайта завершены, дальше мы перемещаемся в N8N.
Шаг 2 — настроить n8n workflow
Я буду исходить из того что у вас уже есть настроенный сервис N8N и к нему подключен Телеграм бот, если нет, то ознакомьтесь с моей предыдущей статьей как настроить мониторинг (там подробно рассказано как развернуть бесплатно N8N на своем сервере).
Создайте новый workflow.

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

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

После 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.
Вот готовый к импорту файл о котором шла речь выше. Импортируйте себе его на холст и измените под себя.
Остались вопросы или хотите чтобы я настроил вам подобную автоматизацию, свяжитесь со мной!