WhatsApp Business API para actualización de entrega — compartir ubicación de retiro
Este escenario envía una ubicación en mapa con sendLocation durante la ventana de servicio al cliente de 24 horas.
Descripción del caso de uso
Este escenario envía una ubicación en mapa con sendLocation durante la ventana de servicio al cliente de 24 horas. Coordenadas, nombre del lugar y dirección ayudan al comprador a navegar sin copiar texto.
Ejemplo de plantilla
Tu punto de retiro está listo. Toca el pin del mapa de abajo para navegar.
Latitud, longitud, nombre y dirección están fijados en el contrato de integración para este punto de retiro.
Cuándo usarlo
- pedidos click-and-collect
Valor para el negocio
- Order or delivery event triggers while the WhatsApp session remains open
- Backend resolves pickup coordinates and human-readable location labels
- sendLocation delivers the map pin with name and address fields
- Client opens navigation to the pickup point from WhatsApp
- Delivery status is logged in the ecommerce or logistics platform
Flujo de trabajo
- Un cambio de estado del pedido indica que el paquete está listo para retiro.
- Tu backend carga coordenadas, nombre del lugar y dirección.
- sendLocation entrega el pin al cliente en la sesión activa.
- El cliente abre navegación en mapas desde la tarjeta de ubicación compartida.
- 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.
- Canal 1MSG con acceso a sendLocation y latitud/longitud válidas para el punto de retiro.
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
function normalizePhone(phone) {
return String(phone).replace(/\D/g, "");
}
async function sendLocationMessage({ phone }) {
const url = `${API_BASE_URL}/${CHANNEL_ID}/sendLocation`;
const requestBody = {
phone: normalizePhone(phone),
lat: "41.40338", // latitude and longitude (code_contract)
lng: "2.17403",
name: "Pickup point",
address: "Example street 1",
};
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.");
console.error(raw);
process.exit(1);
}
console.log("Message sent to client.");
return data;
}
if (require.main === module) {
sendLocationMessage({ phone: TEST_PHONE }).catch((err) => {
console.error("Execution failed:", err.message);
process.exit(1);
});
}
module.exports = { sendLocationMessage };
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 actualización de entrega — compartir ubicación de retiro? 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.
