WhatsApp Business API para respuesta en sesión — consulta de precio
Este escenario envía un mensaje de texto libre de WhatsApp con sendMessage dentro de la ventana de atención al cliente de 24 horas después de que el cliente pregunte cuánto cuesta un producto o servicio.
Descripción del caso de uso
Este escenario envía un mensaje de texto libre de WhatsApp con sendMessage dentro de la ventana de atención al cliente de 24 horas después de que el cliente pregunte cuánto cuesta un producto o servicio.
Ejemplo de plantilla
Hola, {{1}}! El precio de «{{2}}» es {{3}}. Si necesitas una cotización personalizada o descuento por volumen, responde aquí y nuestro gerente te ayudará.
sendMessage funciona solo cuando la ventana de sesión de 24 horas está abierta.
Variables y propósito
{{1}}— nombre del cliente{{2}}— nombre del producto o servicio{{3}}— precio formateado con moneda
Ejemplo completado
Hola, Alejandro! El precio de «Plan Premium (anual)» es 49.900 ARS. Si necesitas una cotización personalizada o descuento por volumen, responde aquí y nuestro gerente te ayudará.
Cuándo usarlo
- precios de ventas
Valor para el negocio
- Client price question arrives via webhook inside the 24-hour session window
- CRM or pricing service resolves the SKU and current list price
- Session text message delivers the quote with product and amount placeholders
- Client can ask follow-up questions or proceed to purchase in the same thread
- Lead stage updates in CRM from the automated price response timestamp
Flujo de trabajo
- Llega un mensaje entrante del cliente con una pregunta de precio vía webhook.
- Tu backend obtiene el SKU del producto y el precio de lista actual.
- Un mensaje de texto en sesión envía la cotización con nombre del producto y monto formateado.
- El cliente continúa el diálogo para descuentos o checkout en la misma sesión.
- El progreso de entrega se reporta de forma asíncrona — típicamente
sent, luegodelivered(o failed/undelivered). - Tu sistema recibe el estado vía webhook (
hooks[]) o consulta el estado de entrega y maneja fallos si es necesario.
Implementación técnica
Requisitos previos
- Ventana de sesión de WhatsApp abierta (el cliente escribió primero o respondió dentro de 24 horas).
- Canal 1MSG con acceso a sendMessage y una fuente de precios mapeada en tu backend.
Ejemplos de código
Node.js
#!/usr/bin/env node
// === Configuration (replace "___" placeholders) ===
const API_BASE_URL = "https://api.1msg.io"; // production 1MSG API base URL
const CHANNEL_ID = "___"; // channel ID from 1MSG dashboard
const API_TOKEN = "___"; // channel JWT token (Bearer)
// === Test data ===
const TEST_PHONE = "___"; // client phone in international format · requires open 24-hour session window
const TEST_CUSTOMERNAME = "___"; // {{1}} customer name
const TEST_PRODUCTORSERVICENAME = "___"; // {{2}} product or service name
const TEST_PAYMENTAMOUNT = "___"; // {{3}} payment amount
function normalizePhone(phone) {
return String(phone).replace(/\D/g, "");
}
function assertConfigured(values) {
for (const [key, value] of Object.entries(values)) {
if (value === "___" || value === "" || value === undefined || value === null) {
throw new Error(`Missing configuration value: ${key}`);
}
}
}
async function sendSessionTextMessage({ phone, customerName, productOrServiceName, paymentAmount }) {
assertConfigured({
CHANNEL_ID,
API_TOKEN,
phone,
customerName,
productOrServiceName,
paymentAmount,
});
const url = `${API_BASE_URL}/${CHANNEL_ID}/sendMessage`;
const requestBody = {
phone: normalizePhone(phone),
body: `Hello, ${customerName}! The price for «${productOrServiceName}» is ${paymentAmount}. If you need a custom quote or volume discount, reply here and our manager will help.`,
};
const res = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_TOKEN}`,
},
body: JSON.stringify(requestBody),
});
const raw = await res.text();
let data;
try {
data = JSON.parse(raw);
} catch {
data = null;
}
if (!res.ok || !data || data.sent !== true) {
console.error("Send failed. API response:");
console.error(raw);
process.exit(1);
}
console.log("Message sent to client.");
console.log("API response:", raw);
return data;
}
if (require.main === module) {
sendSessionTextMessage({
phone: TEST_PHONE,
customerName: TEST_CUSTOMERNAME,
productOrServiceName: TEST_PRODUCTORSERVICENAME,
paymentAmount: TEST_PAYMENTAMOUNT,
}).catch((err) => {
console.error("Execution failed:", err.message);
process.exit(1);
});
}
module.exports = { sendSessionTextMessage };
Respuesta inmediata de la API (síncrona)
- HTTP 2xx y JSON
"sent": truesignifican que 1MSG aceptó el mensaje para envío — no que ya llegó al teléfono del cliente. - Guarda el campo `id` de la respuesta (valor tipo
wamid.…). Úsalo para correlacionar callbacks de entrega o polling. - La respuesta también puede incluir
messageydescription— solo informativos.
Estado de entrega (asíncrono)
- Registra un webhook (
POST …/webhook) para que 1MSG envíe actualizaciones de entrega a tu endpoint HTTPS en un payload `hooks[]` separado (sent,delivered,read, o failed/undelivered cuando aplique). - Opcionalmente consulta:
GET {base}/{channel}/hookInfo?messageId=<id de sendTemplate>. - En la práctica, la entrega suele completarse en pocos segundos — pero eso no está garantizado por el contrato de la API.
Errores frecuentes
- Ventana de sesión cerrada (sin mensaje del cliente en 24 horas)
- Número de teléfono inválido o no normalizado
- Cuerpo del mensaje / URL de media ausente o inválida
- Fallo de entrega — revisa el webhook de estado y la política de reintentos
Preguntas frecuentes
- ¿Necesito una plantilla? No — este escenario usa un mensaje de sesión dentro de la ventana de atención de 24 horas.
- ¿Cuándo se cierra la ventana de sesión? Si el cliente no escribió ni respondió en 24 horas, sendMessage fallará hasta que una plantilla reabra el chat.
- ¿Cómo verifico la entrega?
sent: truesolo confirma aceptación. Rastrea la entrega vía webhookhooks[]o polling. - ¿Qué pasa si no se entrega? Registra el hook failed/undelivered, verifica la ventana de sesión, luego reintenta o usa una plantilla.
- ¿Puedo conectarlo a mi CRM o backend? Sí — dispara la llamada a la API desde tu webhook entrante o motor de flujos.
CTA
¿Listo para usar respuesta en sesión — consulta de precio? Conecta tu canal 1MSG y ejecuta los ejemplos de código de arriba.
Recursos relacionados
Build WhatsApp automation in minutes
Use 1MSG to automate this workflow and try it with our free demo.
