Cómo enviar notificaciones de pedidos de WooCommerce a Telegram

Integrar WooCommerce con Telegram puede ser una excelente forma de recibir actualizaciones instantáneas sobre nuevos pedidos en tu tienda en línea. En este artículo, te mostramos cómo configurar un sistema automatizado para enviar notificaciones de pedidos directamente a tu cuenta de Telegram.

Requisitos previos

Antes de comenzar, asegúrate de cumplir con estos requisitos:

  1. Una tienda en línea basada en WordPress y WooCommerce.
  2. Acceso al tema hijo de tu sitio (child theme).
  3. Una cuenta de Telegram con un bot configurado. Puedes crear uno fácilmente con el BotFather en Telegram siguiendo su guía oficial.

Guía para Implementar Notificaciones de Pedidos de WooCommerce en Telegram

Para recibir notificaciones automáticas de WooCommerce en Telegram, sigue estos pasos. Este tutorial detalla cómo configurar un bot de Telegram, obtener los datos necesarios y personalizar el código.

Crear un bot en Telegram

  1. Habla con @BotFather:
    • Abre Telegram y busca @BotFather.
    • Inicia un chat y usa el comando /start
    • /newbot
  2. Configura tu bot:
    • Ingresa un nombre para tu bot (por ejemplo, MiBotWooCommerce).
    • Asigna un nombre de usuario único que termine en bot (por ejemplo, MiBotWoo_bot).
  3. Guarda el token:
    • BotFather te dará un token de API, algo como:
      7907194569:A3AFXzDHSg9M9XEZWv8ozDHah5X8ThIOEU-Q23.
    • ¿No te acuerdas del token? Habla con @BotFather /mybots
    • Selecciona el bot y haz clic en «API Token»

 

Obtener tu Chat ID

  1. Envía un mensaje a tu bot:
    • Busca tu bot recién creado en Telegram y envíale un mensaje (por ejemplo, «Hola»).
  2. Usa la API para obtener tu Chat ID:
    • Abre esta URL en tu navegador, reemplazando TU_TOKEN con el token del bot:
https://api.telegram.org/botTU_TOKEN/getUpdates

3. Configurar el código PHP

  1. Reemplaza los valores en el código:
    • Sustituye:
      • 'TU_BOT_TOKEN' con el token de tu bot.
      • 'TU_CHAT_ID' con el Chat ID obtenido.
  2. Guarda el archivo en tu tema hijo:
    • Crea un archivo telegram-notifications.php dentro de la carpeta includes de tu tema hijo.
    • Copia y pega el código proporcionado anteriormente.
  3. Registra el archivo en el tema hijo:
    • Abre el archivo functions.php de tu tema hijo y añade este fragmento:

 

function send_telegram_order_notification($order_id) {
    // Verifica si el pedido existe
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Configuración del bot
    $bot_token = '7907194569:A3AFXzDHSg9M9XEZWv8ozDHah5X8ThIOEU-Q23';
    $chat_id = '15337997823';
    
    // Obtiene los detalles del pedido
    $order_total = $order->get_total();
    $order_status = $order->get_status();
    $customer_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
    
    // Obtiene los detalles de envío
    $shipping_address = $order->get_shipping_address_1();
    $shipping_city = $order->get_shipping_city();
    $shipping_postcode = $order->get_shipping_postcode();
    
    // Obtiene el método de pago
    $payment_method = $order->get_payment_method_title();
    
    // Prepara el mensaje de los productos
    $items_message = "\n📝 PRODUCTOS:\n";
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        $items_message .= "• " . $item->get_name();
        if ($item->get_quantity() > 1) {
            $items_message .= " (x" . $item->get_quantity() . ")";
        }
        $items_message .= " - €" . number_format($item->get_total(), 2) . "\n";
    }

    // Prepara el mensaje principal
    $message = "🛍️ ¡Nuevo pedido #" . $order_id . "!\n\n";
    $message .= "📊 Estado: " . ucfirst($order_status) . "\n";
    $message .= "👤 Cliente: " . $customer_name . "\n";
    $message .= "📞 Teléfono: " . $order->get_billing_phone() . "\n";
    $message .= "📧 Email: " . $order->get_billing_email() . "\n\n";
    
    // Añade dirección de envío si existe
    if ($shipping_address) {
        $message .= "📦 DIRECCIÓN DE ENVÍO:\n";
        $message .= $shipping_address . "\n";
        $message .= $shipping_postcode . " " . $shipping_city . "\n\n";
    }
    
    // Añade los productos
    $message .= $items_message . "\n";
    
    // Añade los totales
    $message .= "💰 TOTALES:\n";
    $message .= "Subtotal: €" . number_format($order->get_subtotal(), 2) . "\n";
    if ($order->get_shipping_total() > 0) {
        $message .= "Envío: €" . number_format($order->get_shipping_total(), 2) . "\n";
    }
    if ($order->get_total_discount() > 0) {
        $message .= "Descuento: -€" . number_format($order->get_total_discount(), 2) . "\n";
    }
    $message .= "TOTAL: €" . number_format($order_total, 2) . "\n\n";
    
    // Añade método de pago
    $message .= "💳 Método de pago: " . $payment_method;

    // URL de la API de Telegram
    $telegram_api_url = "https://api.telegram.org/bot{$bot_token}/sendMessage";

    // Prepara los datos para la API de Telegram
    $data = array(
        'chat_id' => $chat_id,
        'text' => $message,
        'parse_mode' => 'HTML'
    );

    // Realiza la petición a la API de Telegram
    $response = wp_remote_post($telegram_api_url, array(
        'body' => $data,
        'timeout' => 30
    ));

    // Registra errores si los hay
    if (is_wp_error($response)) {
        error_log('Error enviando notificación Telegram: ' . $response->get_error_message());
    }
}

// Solo hook para pedidos en processing
add_action('woocommerce_order_status_processing', 'send_telegram_order_notification', 10, 1);

// Función para registrar los hooks en el child theme
function register_telegram_notification_hooks() {
    if (!function_exists('send_telegram_order_notification')) {
        require_once get_stylesheet_directory() . '/includes/telegram-notifications.php';
    }
}
add_action('after_setup_theme', 'register_telegram_notification_hooks');
// --------------------------------------