Краткий ответ: WooCommerce можно связать с Telegram через Telegram-бота, bot token, chat_id и серверную отправку уведомлений из WordPress. Самый простой способ — поставить готовый плагин уведомлений. Более надёжный способ — сделать отдельный мини-плагин, который отправляет в Telegram новые заказы, смену статуса, оплату, отмену, низкий остаток товара и ошибки, не замедляя checkout.
Telegram в WooCommerce лучше использовать как быстрый канал уведомлений для менеджера. Он не должен заменять заказы в админке, email-уведомления и CRM. Правильная схема: заказ создаётся в WooCommerce, письмо остаётся резервным каналом, CRM хранит историю клиента, а Telegram быстро сообщает менеджеру о важном событии.
В WooCommerce письма о заказах часто приходят с задержкой, попадают в спам или теряются в почтовом ящике менеджера. Telegram решает другую задачу: он быстро показывает событие на телефоне — новый заказ, успешная оплата, отмена, возврат, смена статуса или низкий остаток товара.
Связка WooCommerce с Telegram нужна, когда магазин должен быстро реагировать на заказы.
Если задача не только про заказы, а про обычные формы заявок, лучше сначала посмотреть отдельную схему: как отправлять заявки с WordPress в Telegram. Для WooCommerce логика сложнее, потому что нужно учитывать статусы заказов, оплату, доставку, checkout, сессии и производительность.
| Событие WooCommerce | Что отправлять | Когда полезно |
|---|---|---|
| Новый заказ | Номер заказа, сумма, товары, клиент, телефон | Быстрое уведомление менеджеру |
| Оплата завершена | Номер заказа, сумма, способ оплаты | Контроль оплаченных заказов |
| Смена статуса | Старый статус, новый статус, номер заказа | Контроль обработки заказов |
| Отмена заказа | Заказ, клиент, причина или комментарий | Контроль проблемных заказов |
| Возврат | Сумма возврата, заказ, товар | Финансовый контроль |
| Низкий остаток | Товар, SKU, текущий остаток | Контроль склада |
| Ошибка оплаты | Заказ, gateway, статус, клиент | Диагностика проблем с оплатой |
| Заказ на большую сумму | Номер заказа, сумма, клиент | Приоритетная реакция менеджера |
Перед настройкой нужно проверить не только Telegram, но и сам WooCommerce. Если заказ не создаётся, Telegram ничего не отправит. Если заказ создаётся, но статус не меняется после оплаты, уведомление может уйти не в тот момент.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Заказ есть, Telegram молчит | Не сработал hook или ошибка Telegram API | debug.log, hook, token, chat_id |
| Telegram пишет только некоторые заказы | Фильтр по статусу или способу оплаты | Статусы, условия в коде, настройки плагина |
| Checkout стал дольше работать | Отправка в Telegram выполняется синхронно | Network, wc-ajax=checkout, timeout |
| Ошибка 401 | Неверный bot token | Токен из BotFather |
| Ошибка 403 | Бот не имеет доступа к чату | Бот в группе, права в канале |
| Ошибка 400 | Неверный chat_id или HTML в сообщении | chat_id, parse_mode, экранирование |
| Товаров нет в сообщении | Неправильно получены items заказа | wc_get_order(), get_items() |
| Дубли уведомлений | Несколько hooks или повторные webhooks оплаты | Логи, payment gateway, условия отправки |
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Для WooCommerce лучше не отправлять Telegram-сообщение тяжёлым запросом прямо внутри checkout. Если Telegram API отвечает медленно, покупатель будет ждать. В простых магазинах можно отправлять сразу, но в рабочем магазине безопаснее ставить уведомление в очередь: заказ создан — событие записано — Telegram отправлен через WP-Cron или Action Scheduler.
| Hook | Когда срабатывает | Для чего использовать |
|---|---|---|
| woocommerce_new_order | Когда заказ создан | Быстрое уведомление о новом заказе |
| woocommerce_checkout_order_processed | После обработки checkout и создания заказа | Уведомление после оформления |
| woocommerce_payment_complete | После успешной оплаты | Уведомление об оплате |
| woocommerce_order_status_changed | При смене статуса заказа | Контроль обработки заказов |
| woocommerce_low_stock | Когда товар достиг низкого остатка | Уведомление о складе |
Если магазин уже тормозит на оформлении заказа, не добавляйте ещё один внешний запрос прямо в checkout. Сначала проверьте, почему WooCommerce долго оформляет заказ, а потом подключайте Telegram через очередь.
Важно: код ниже работает с заказами WooCommerce и внешним Telegram API. Перед установкой сделайте бэкап, проверьте на staging-копии и не вставляйте bot token в JavaScript или HTML. Для постоянного решения лучше создать отдельный мини-плагин, а не хранить код в теме.
Куда вставлять: файл wp-config.php, перед строкой /* That’s all, stop editing! */.
define('SC_WC_TELEGRAM_BOT_TOKEN', 'PASTE_YOUR_BOT_TOKEN_HERE');
define('SC_WC_TELEGRAM_CHAT_ID', 'PASTE_YOUR_CHAT_ID_HERE');
Куда вставлять: отдельный мини-плагин или временно functions.php дочерней темы.
<?php
if (!defined('ABSPATH')) {
exit;
}
function sc_wc_tg_escape_html($text) {
$text = (string) $text;
return str_replace(
array('&', '<', '>'),
array('&', '<', '>'),
$text
);
}
function sc_wc_send_telegram_message($message) {
if (!defined('SC_WC_TELEGRAM_BOT_TOKEN') || !defined('SC_WC_TELEGRAM_CHAT_ID')) {
error_log('SC WC Telegram error: token or chat_id is missing.');
return false;
}
$bot_token = SC_WC_TELEGRAM_BOT_TOKEN;
$chat_id = SC_WC_TELEGRAM_CHAT_ID;
if (empty($bot_token) || empty($chat_id) || empty($message)) {
return false;
}
$api_url = 'https://api.telegram.org/bot' . $bot_token . '/sendMessage';
$response = wp_remote_post($api_url, array(
'timeout' => 10,
'body' => array(
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'HTML',
'disable_web_page_preview' => true,
),
));
if (is_wp_error($response)) {
error_log('SC WC Telegram wp_remote_post error: ' . $response->get_error_message());
return false;
}
$response_code = wp_remote_retrieve_response_code($response);
$response_body = wp_remote_retrieve_body($response);
if ($response_code !== 200) {
error_log('SC WC Telegram response code: ' . $response_code);
error_log('SC WC Telegram response body: ' . $response_body);
return false;
}
return true;
}
Код использует wc_get_order(), поэтому подходит для обычного хранения заказов и для HPOS-совместимой логики WooCommerce.
<?php
function sc_wc_build_order_telegram_message($order_id, $event_title = 'Новый заказ WooCommerce') {
if (!function_exists('wc_get_order')) {
return '';
}
$order = wc_get_order($order_id);
if (!$order) {
return '';
}
$items_text = '';
foreach ($order->get_items() as $item) {
$product = $item->get_product();
$sku = '';
if ($product) {
$sku = $product->get_sku();
}
$items_text .= '- ' . $item->get_name();
if (!empty($sku)) {
$items_text .= ' [' . $sku . ']';
}
$items_text .= ' x ' . $item->get_quantity();
$items_text .= ' = ' . wc_price($item->get_total(), array('currency' => $order->get_currency()));
$items_text .= "n";
}
$billing_name = trim($order->get_billing_first_name() . ' ' . $order->get_billing_last_name());
$billing_phone = $order->get_billing_phone();
$billing_email = $order->get_billing_email();
$payment_method = $order->get_payment_method_title();
$shipping_method = $order->get_shipping_method();
$admin_order_url = method_exists($order, 'get_edit_order_url') ? $order->get_edit_order_url() : '';
$message = '';
$message .= '<b>' . sc_wc_tg_escape_html($event_title) . "</b>n";
$message .= 'Заказ: #' . sc_wc_tg_escape_html($order->get_order_number()) . "n";
$message .= 'Статус: ' . sc_wc_tg_escape_html(wc_get_order_status_name($order->get_status())) . "n";
$message .= 'Сумма: ' . sc_wc_tg_escape_html(wp_strip_all_tags($order->get_formatted_order_total())) . "n";
$message .= 'Клиент: ' . sc_wc_tg_escape_html($billing_name) . "n";
$message .= 'Телефон: ' . sc_wc_tg_escape_html($billing_phone) . "n";
$message .= 'Email: ' . sc_wc_tg_escape_html($billing_email) . "n";
if (!empty($payment_method)) {
$message .= 'Оплата: ' . sc_wc_tg_escape_html($payment_method) . "n";
}
if (!empty($shipping_method)) {
$message .= 'Доставка: ' . sc_wc_tg_escape_html($shipping_method) . "n";
}
if (!empty($items_text)) {
$message .= "n<b>Товары:</b>n";
$message .= sc_wc_tg_escape_html($items_text);
}
if (!empty($admin_order_url)) {
$message .= "nАдминка: " . sc_wc_tg_escape_html($admin_order_url);
}
return $message;
}
Важно: этот вариант безопаснее для checkout, чем прямой внешний запрос во время оформления заказа. WP-Cron должен нормально работать на сайте. Если WP-Cron отключён, нужно настроить системный cron на хостинге.
<?php
add_action('woocommerce_checkout_order_processed', 'sc_wc_schedule_new_order_telegram', 20, 3);
function sc_wc_schedule_new_order_telegram($order_id, $posted_data, $order) {
$order_id = (int) $order_id;
if ($order_id <= 0) {
return;
}
if (!wp_next_scheduled('sc_wc_send_order_telegram_event', array($order_id, 'new_order'))) {
wp_schedule_single_event(time() + 10, 'sc_wc_send_order_telegram_event', array($order_id, 'new_order'));
}
}
add_action('sc_wc_send_order_telegram_event', 'sc_wc_send_order_telegram_event_handler', 10, 2);
function sc_wc_send_order_telegram_event_handler($order_id, $event_type) {
$order_id = (int) $order_id;
if ($order_id <= 0) {
return;
}
$event_title = 'Новый заказ WooCommerce';
if ($event_type === 'payment_complete') {
$event_title = 'Заказ оплачен';
}
if ($event_type === 'status_changed') {
$event_title = 'Статус заказа изменён';
}
$message = sc_wc_build_order_telegram_message($order_id, $event_title);
if (empty($message)) {
error_log('SC WC Telegram error: empty message for order ' . $order_id);
return;
}
$sent = sc_wc_send_telegram_message($message);
if (!$sent) {
error_log('SC WC Telegram error: message not sent for order ' . $order_id);
}
}
Этот hook полезен, если менеджеру важны только оплаченные заказы, а не все созданные заказы.
<?php
add_action('woocommerce_payment_complete', 'sc_wc_schedule_payment_complete_telegram');
function sc_wc_schedule_payment_complete_telegram($order_id) {
$order_id = (int) $order_id;
if ($order_id <= 0) {
return;
}
if (!wp_next_scheduled('sc_wc_send_order_telegram_event', array($order_id, 'payment_complete'))) {
wp_schedule_single_event(time() + 10, 'sc_wc_send_order_telegram_event', array($order_id, 'payment_complete'));
}
}
Важно: если отправлять сообщение на каждую смену статуса, в активном магазине может быть много уведомлений. Лучше ограничить нужные статусы.
<?php
add_action('woocommerce_order_status_changed', 'sc_wc_send_status_change_telegram', 20, 4);
function sc_wc_send_status_change_telegram($order_id, $old_status, $new_status, $order) {
$allowed_statuses = array(
'processing',
'completed',
'cancelled',
'failed',
'refunded',
);
if (!in_array($new_status, $allowed_statuses, true)) {
return;
}
$order_id = (int) $order_id;
if ($order_id <= 0) {
return;
}
$old_status_name = wc_get_order_status_name($old_status);
$new_status_name = wc_get_order_status_name($new_status);
$message = sc_wc_build_order_telegram_message(
$order_id,
'Статус заказа изменён: ' . $old_status_name . ' → ' . $new_status_name
);
if (empty($message)) {
return;
}
sc_wc_send_telegram_message($message);
}
Куда вставлять: в тот же мини-плагин. Работает, если в WooCommerce включён складской учёт и настроены пороги остатка.
<?php
add_action('woocommerce_low_stock', 'sc_wc_send_low_stock_telegram');
function sc_wc_send_low_stock_telegram($product) {
if (!$product || !is_a($product, 'WC_Product')) {
return;
}
$message = '';
$message .= "<b>Низкий остаток товара</b>n";
$message .= 'Товар: ' . sc_wc_tg_escape_html($product->get_name()) . "n";
$message .= 'SKU: ' . sc_wc_tg_escape_html($product->get_sku()) . "n";
$message .= 'Остаток: ' . sc_wc_tg_escape_html($product->get_stock_quantity()) . "n";
$message .= 'ID товара: ' . sc_wc_tg_escape_html($product->get_id());
sc_wc_send_telegram_message($message);
}
После правильной настройки менеджер получает в Telegram понятное уведомление: номер заказа, сумма, статус, клиент, телефон, способ оплаты, доставка, товары и ссылка на заказ в админке.
Подходит, если нужно быстро получать уведомления о новых заказах, статусах и остатках без разработки.
Плюсы: быстрое подключение, настройки в админке, тестовое сообщение, меньше ручного кода.
Минусы: ограниченная структура сообщений, зависимость от поддержки плагина, не всегда есть нужные условия и логи.
Подходит, если нужно получать не только WooCommerce-заказы, но и формы, регистрации, комментарии, ошибки сайта и другие уведомления WordPress.
Плюсы: много событий в одном месте.
Минусы: может быть слишком много настроек и лишних уведомлений.
Подходит, если нужна точная логика: разные чаты для разных статусов, отдельные уведомления для оплаченных заказов, логи, очередь, фильтр по сумме, товарам или способу доставки.
Плюсы: полный контроль над логикой и сообщениями.
Минусы: нужно тестировать checkout, оплату, статусы и ошибки Telegram API.
Подходит, если Telegram — только быстрый сигнал, а вся обработка заказа идёт через CRM. В этом случае WooCommerce передаёт заказ в CRM, а CRM или WordPress отправляет уведомление менеджеру.
Плюсы: меньше риск потерять заказ, есть статусы и история обработки.
Минусы: сложнее архитектура, нужна нормальная интеграция WordPress с CRM/API.
Подходит, если нужно быстро связать WooCommerce, Telegram, Google Sheets и CRM без написания PHP.
Плюсы: удобно для бизнес-автоматизации.
Минусы: внешний сервис, тарифы, задержки, зависимость от WooCommerce REST API и webhook.
WooCommerce-заказ содержит персональные данные клиента. Поэтому Telegram-уведомления нужно делать аккуратно: отправлять только нужную информацию и только в закрытые рабочие чаты.
Telegram API — внешний сервис. Если отправлять сообщение прямо во время оформления заказа, покупатель может ждать ответ Telegram. На небольшом магазине это может быть незаметно, но при медленном хостинге, проблемах сети или внешних API checkout может стать медленнее.
Если Telegram API отвечает медленно, покупатель ждёт. Лучше использовать очередь или хотя бы короткий timeout.
Если одновременно подключить woocommerce_new_order, woocommerce_checkout_order_processed и woocommerce_order_status_changed без условий, один заказ может прийти в Telegram несколько раз.
Магазин быстро превращает Telegram-чат в шум. Лучше выбрать важные статусы: processing, completed, cancelled, failed, refunded.
Новый заказ может быть ещё не оплачен. Для оплаты лучше использовать woocommerce_payment_complete или статус processing/completed, в зависимости от способа оплаты.
ID группы часто начинается с минуса. Для супергруппы часто используется формат с -100. Если ID неверный, Telegram не доставит сообщение.
Если в имени клиента или товаре есть символы <, > или &, сообщение с parse_mode HTML может сломаться.
Для Telegram обычно достаточно имени, телефона, email, суммы и состава заказа. Полные адреса, заметки и мета-поля нужно отправлять только если это реально нужно менеджеру.
Telegram удобен, но email лучше оставить как резерв. Если с Telegram будет ошибка, письма WooCommerce помогут не пропустить заказ.
Нужно создать Telegram-бота, получить bot token, узнать chat_id и подключить отправку уведомлений из WooCommerce через плагин или PHP-код с wp_remote_post() к Telegram Bot API.
Да. Для этого используют WooCommerce hooks: woocommerce_new_order, woocommerce_checkout_order_processed, woocommerce_payment_complete или woocommerce_order_status_changed.
Плагин быстрее для простой настройки. Кастомный код лучше, если нужны разные чаты, фильтр по статусам, точный формат сообщения, логи и отправка через очередь.
Частые причины: неправильный token, неверный chat_id, бот не добавлен в группу, не сработал WooCommerce hook, WP-Cron отключён, Telegram API вернул ошибку или хостинг блокирует запрос.
Да. Можно написать мини-плагин WordPress, который получает заказ через wc_get_order(), формирует сообщение и отправляет его в Telegram через Bot API.
Для уведомления после оформления заказа часто используют woocommerce_checkout_order_processed. Для самого факта создания заказа можно использовать woocommerce_new_order.
Для успешной оплаты подходит woocommerce_payment_complete. Также можно отслеживать смену статуса на processing или completed через woocommerce_order_status_changed.
Да. Для этого используется hook woocommerce_order_status_changed. Лучше ограничить список статусов, чтобы Telegram-чат не был перегружен лишними сообщениями.
Да. Товары можно получить через $order->get_items(), а затем вывести название, SKU, количество и сумму по каждой позиции.
Да. Бота нужно добавить в группу и использовать chat_id этой группы. Для супергрупп ID часто начинается с -100.
Да. Бот должен быть добавлен в канал и иметь право публиковать сообщения. После этого можно использовать chat_id или подходящий идентификатор канала.
Может замедлять, если отправка выполняется прямо во время оформления заказа. Лучше использовать очередь, WP-Cron или Action Scheduler, особенно если магазин уже имеет медленный checkout.
Да. Telegram лучше использовать как быстрый дубликат. Email-уведомления и заказы в админке WooCommerce должны оставаться резервом.
Да, если token хранится на сервере, чат закрыт, данные очищаются, не отправляются платёжные данные и не раскрываются лишние персональные данные клиента.
Связать WooCommerce с Telegram можно через готовый плагин или через свой мини-плагин на PHP. Для простого магазина достаточно уведомления о новом заказе. Для нормальной рабочей схемы лучше добавить события оплаты, смены статуса, отмены, возврата и низкого остатка товара.
Главное — не вставлять bot token во фронтенд, не отправлять лишние данные клиента, не тормозить checkout внешним запросом и не делать Telegram единственным местом хранения заказа. Надёжная интеграция работает так: WooCommerce создаёт заказ, уведомление ставится в очередь, Telegram получает короткое сообщение, ошибки пишутся в debug.log, а email и CRM остаются резервными каналами.
Об авторе