Pular para conteúdo

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:

  1. Endereço comercial: Compartilhar localização da loja/empresa
  2. Ponto de encontro: Definir local de reunião/entrega
  3. Rastreamento: Mostrar onde pedido/entregador está
  4. Eventos: Compartilhar local de eventos
  5. Serviços: Indicar onde serviço será realizado

Como funciona internamente?

Quando o SEND_LOCATION é executado, o sistema:

  1. Valida coordenadas: Verifica locationLat e locationLng
  2. Extrai opcionais: Nome e endereço da localização
  3. Constrói payload: Cria objeto tipo 'location'
  4. Envia para API: POST com coordenadas
  5. 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