Уведомления в Telegram о заказах Woocommerce

2 комментария
12
Уведомления в Telegram о заказах Woocommerce

Уведомления о новых заказах

Готовая функция для отправки уведомлений в Telegram о новых заказах WooCommerce.

Перед использованием необходимо:

  • 1. Создать бота в Telegram через @BotFather и получить токен
  • 2. Получить chat_id (можно узнать через @myidbot)
  • 3. Указать свои данные в переменных $telegram_token и $chat_id
  • 4. Подключить файл в ваш WordPress-проект (например, в functions.php темы или как отдельный плагин)

Функция автоматически отправляет детализированное сообщение в Telegram при поступлении нового заказа, включая номер заказа, дату, статус, сумму, данные клиента, список товаров, стоимость доставки и использованные купоны.

PHP
/**
 * Функция отправки уведомлений в Telegram о новых заказах в WooCommerce
 * 
 * Эта функция автоматически отправляет сообщение в Telegram при создании нового заказа в WooCommerce.
 * Она использует Telegram Bot API для отправки сообщений.
 * 
 */
 // Хук на создание нового заказа в WooCommerce
add_action('woocommerce_new_order', 'send_telegram_notification', 10, 2);

/**
 * Функция отправки уведомления в Telegram
 * 
 * @param int $order_id ID заказа
 * @return void
 */
function send_telegram_notification($order_id, $order) {
    // Проверяем, существует ли заказ
    if (!$order_id) {
        return;
    }
    
    // Проверяем, что заказ существует
    if (!$order) {
        return;
    }
    // --- НАСТРОЙКИ ---
    // Замените на токен вашего Telegram бота
    $telegram_token = 'YOUR_TELEGRAM_BOT_TOKEN';
    
    // Замените на ваш chat_id
    $chat_id = 'YOUR_CHAT_ID';
    
    // URL для отправки сообщений через Telegram Bot API
    $url = "https://api.telegram.org/bot" . $telegram_token . "/sendMessage";
    // --- КОНЕЦ НАСТРОЕК ---

    // Получаем данные заказа
    $order_number = $order->get_order_number(); // Номер заказа
    $order_date = $order->get_date_created()->format('d.m.Y H:i'); // Дата создания
    $order_status = wc_get_order_status_name($order->get_status()); // Статус заказа
    $order_total = strip_tags($order->get_total()); // Общая сумма без HTML
    
    // Получаем данные клиента
    $billing_first_name = $order->get_billing_first_name(); // Имя
    $billing_last_name = $order->get_billing_last_name(); // Фамилия
    $billing_phone = $order->get_billing_phone(); // Телефон
    $billing_email = $order->get_billing_email(); // Email
    $billing_address = $order->get_formatted_billing_address(); // Адрес доставки
    
    // Формируем сообщение
    $message = "*НОВЫЙ ЗАКАЗ* \n\n";
    $message .= "*Номер заказа:* #{$order_number} \n";
    $message .= "*Дата:* {$order_date} \n";
    $message .= "*Статус:* {$order_status} \n";
    $message .= "*Сумма:* {$order_total} \n\n";
    
    $message .= "*КЛИЕНТ* \n";
    $message .= "*Имя:* {$billing_first_name} {$billing_last_name} \n";
    $message .= "*Телефон:* {$billing_phone} \n";
    $message .= "*Email:* {$billing_email} \n";
    $message .= "*Адрес:* {$billing_address} \n\n";
    
    // Формируем содержимое заказа
    $message .= "*СОДЕРЖИМОЕ ЗАКАЗА* \n";
	  $items_message = "";
    foreach ($order->get_items() as $item_id => $item) {
        $product_name = $item->get_name(); // Название товара
        $quantity = $item->get_quantity(); // Количество
        $line_total = $order->get_item_total($item, false, true); // Сумма за позицию без HTML
        
        //Получаем цену за единицу без HTML
        $unit_price = $order->get_item_subtotal($item, false, false);
        
        $items_message .= "\u{2022} {$product_name} \n";
        $items_message .= "   ×{$quantity} × " . strip_tags($unit_price) . " = " . strip_tags($line_total) * $quantity . " \n";
    }
	$message .= $items_message;
    
    // Добавляем стоимость доставки, если есть
    if ($order->get_shipping_total() > 0) {
        $message .= "\n*Доставка:* " . $order->get_shipping_method() . " \n";
        $message .= "*Стоимость доставки:* " . strip_tags(wc_price($order->get_shipping_total())) . " \n";
    }
    
    // Добавляем купоны, если использовались
    $coupons = $order->get_items('coupon');
    if (!empty($coupons)) {
        $message .= "\n*КУПОНЫ* \n";
        foreach ($coupons as $coupon) {
            $message .= "\u{2022} Купон: {$coupon->get_name()} (-" . strip_tags(wc_price($coupon->get_discount())) . ") \n";
        }
    }
    
    // Добавляем общую сумму (на случай если отличается из-за скидок)
    $message .= "\n*ИТОГО:* " . strip_tags($order->get_total()) . " \n";
    
    // Не используем urlencode, так как используем wp_remote_post с массивом данных
    // $message остается в оригинальном виде для корректного отображения кириллицы
    
    // Формируем данные для отправки
    $data = array(
        'chat_id' => $chat_id,
        'text' => $message,
        'parse_mode' => 'Markdown', // Используем Markdown для форматирования
        'disable_web_page_preview' => true // Отключаем превью ссылок
    );
    
    // Отправляем POST запрос через wp_remote_post
    $response = wp_remote_post($url, array(
        'body' => $data,
        'timeout' => 30
    ));

    // Проверяем результат отправки (опционально)
    if (is_wp_error($response)) {
        error_log('Telegram notification failed: ' . $response->get_error_message());
    } else {
        error_log('Telegram notification sent successfully for order #' . $order_id);
    }
}
Открыть

Уведомление об изменении статуса заказа

PHP
add_action('woocommerce_order_status_changed', 'send_telegram_status_change', 10, 4);

function send_telegram_status_change($order_id, $from_status, $to_status, $order) {
    if (!$order_id) return;
    
    if (!$order) return;
    
    $telegram_token = 'YOUR_TELEGRAM_BOT_TOKEN';
    $chat_id = 'YOUR_CHAT_ID';
    $url = "https://api.telegram.org/bot" . $telegram_token . "/sendMessage";
    
    $message = "*ИЗМЕНЕНИЕ СТАТУСА ЗАКАЗА* \n\n";
    $message .= "*Номер заказа:* #{$order->get_order_number()} \n";
    $message .= "*Статус:* {$from_status}{$to_status} \n";
    $message .= "*Сумма:* {$order->get_formatted_order_total()} \n";
    
    $data = array(
        'chat_id' => $chat_id,
        'text' => $message,
        'parse_mode' => 'Markdown', // Используем Markdown для форматирования
        'disable_web_page_preview' => true // Отключаем превью ссылок
    );
    
    $response = wp_remote_post($url, array(
        'body' => $data,
        'timeout' => 30
    ));
}
guest
2 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
1 месяц назад

yguvuvuv