SEND_LOCATION - Enviar Localização
O que é este Node?
O SEND_LOCATION é o node responsável por enviar localização geográfica (latitude/longitude) via WhatsApp Business API.
Por que este Node existe?
Localização é informação essencial. O SEND_LOCATION existe para:
- Endereço comercial: Compartilhar localização da loja/empresa
- Ponto de encontro: Definir local de reunião/entrega
- Rastreamento: Mostrar onde pedido/entregador está
- Eventos: Compartilhar local de eventos
- Serviços: Indicar onde serviço será realizado
Como funciona internamente?
Quando o SEND_LOCATION é executado, o sistema:
- Valida coordenadas: Verifica locationLat e locationLng
- Extrai opcionais: Nome e endereço da localização
- Constrói payload: Cria objeto tipo 'location'
- Envia para API: POST com coordenadas
- Retorna message_id: Confirma envio
Código interno (whatsapp-meta-executor.service.ts:466-494):
private async sendLocation(data: WhatsAppMetaNodeData): Promise<any> {
const locationObject: any = {
latitude: data.locationLat,
longitude: data.locationLng
};
if (data.locationName) locationObject.name = data.locationName;
if (data.locationAddress) locationObject.address = data.locationAddress;
const payload = {
messaging_product: 'whatsapp',
to: data.recipientPhone,
type: 'location',
location: locationObject
};
const response: AxiosResponse = await axios.post(
`${this.WHATSAPP_API_BASE}/${data.phoneNumberId}/messages`,
payload,
{
headers: {
'Authorization': `Bearer ${data.accessToken}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "send_location" |
| accessToken | string | Sim | Token de acesso da WhatsApp Business API |
| phoneNumberId | string | Sim | ID do número WhatsApp Business |
| recipientPhone | string | Sim | Número do destinatário |
| locationLat | number | Sim | Latitude (-90 a 90) |
| locationLng | number | Sim | Longitude (-180 a 180) |
| locationName | string | Não | Nome do local |
| locationAddress | string | Não | Endereço completo |
Exemplo Completo: Localização da Loja
{
"name": "Enviar Localização Loja - SEND_LOCATION",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Apresentação",
"parameters": {
"message": "📍 Nossa Localização\n\nVenha nos visitar! Estamos te esperando."
}
}
},
{
"id": "whatsapp_1",
"type": "whatsapp_meta",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Enviar Localização",
"parameters": {
"operation": "send_location",
"accessToken": "EAAxxxxxxxx",
"phoneNumberId": "123456789",
"recipientPhone": "5511999999999",
"locationLat": -23.561684,
"locationLng": -46.655981,
"locationName": "Loja Empresa XYZ",
"locationAddress": "Av. Paulista, 1000 - Bela Vista, São Paulo - SP, 01310-100"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Informações",
"parameters": {
"message": "⏰ Horário de funcionamento:\nSeg-Sex: 9h às 18h\nSáb: 9h às 13h\n\n📞 Telefone: (11) 3456-7890"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "whatsapp_1" },
{ "source": "whatsapp_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Exemplo 2: Rastreamento de Entrega
{
"name": "Rastreamento Entrega - SEND_LOCATION",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Dados da Entrega",
"parameters": {
"variableName": "delivery",
"value": {
"customerPhone": "5511999999999",
"orderId": "PED-789",
"driverName": "João Motorista",
"currentLat": -23.550520,
"currentLng": -46.633308,
"estimatedTime": "15 minutos"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Notificar",
"parameters": {
"message": "🚚 Seu pedido está a caminho!\n\nPedido: {{delivery.orderId}}\nEntregador: {{delivery.driverName}}\nPrevisão: {{delivery.estimatedTime}}\n\nLocalização atual:"
}
}
},
{
"id": "whatsapp_1",
"type": "whatsapp_meta",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Enviar Localização",
"parameters": {
"operation": "send_location",
"accessToken": "EAAxxxxxxxx",
"phoneNumberId": "123456789",
"recipientPhone": "{{delivery.customerPhone}}",
"locationLat": "{{delivery.currentLat}}",
"locationLng": "{{delivery.currentLng}}",
"locationName": "Entregador - {{delivery.driverName}}",
"locationAddress": "Localização atual da entrega"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "message_1" },
{ "source": "message_1", "target": "whatsapp_1" },
{ "source": "whatsapp_1", "target": "end_1" }
]
}
Resposta do Node
{
"messaging_product": "whatsapp",
"contacts": [
{
"input": "5511999999999",
"wa_id": "5511999999999"
}
],
"messages": [
{
"id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNBMzYxNzQyQ0JGRjREMTU0QzFEAA=="
}
]
}
Boas Práticas
✅ SIM: - Valide coordenadas antes de enviar (lat: -90 a 90, lng: -180 a 180) - Inclua locationName para contexto - Adicione locationAddress completo - Envie mensagem de texto antes explicando
❌ NÃO: - Não envie coordenadas inválidas - Não envie localização sem contexto - Não omita name e address (ajudam usuário)
Dicas
💡 Google Maps: Use Google Maps API para obter coordenadas precisas 💡 Precision: Use 6 casas decimais para precisão (ex: -23.561684) 💡 Nome: Inclua sempre locationName para identificação rápida 💡 Endereço: locationAddress ajuda usuário a entender melhor
Próximo Node
→ SEND_CONTACT - Enviar contato → SEND_MESSAGE - Enviar texto