Pular para conteúdo

SEND_CONTACT - Enviar Contato

O que é este Node?

O SEND_CONTACT é o node responsável por enviar cartão de contato (vCard) via WhatsApp Business API.

Por que este Node existe?

Compartilhar contatos é essencial. O SEND_CONTACT existe para:

  1. Networking: Compartilhar contatos profissionais
  2. Atendimento: Enviar contato de suporte/vendas
  3. Indicação: Recomendar profissionais/empresas
  4. Organização: Facilitar salvar contato do remetente
  5. Múltiplos dados: Email, telefone, empresa em um card

Como funciona internamente?

Quando o SEND_CONTACT é executado, o sistema:

  1. Valida obrigatórios: Verifica contactName e contactPhone
  2. Constrói contato: Cria objeto vCard com dados
  3. Adiciona opcionais: Email e organização se fornecidos
  4. Envia para API: POST com tipo contacts
  5. Retorna message_id: Confirma envio

Código interno (whatsapp-meta-executor.service.ts:496-544):

private async sendContact(data: WhatsAppMetaNodeData): Promise<any> {
  const contact = {
    name: {
      formatted_name: data.contactName,
      first_name: data.contactName
    },
    phones: [
      {
        phone: data.contactPhone,
        type: 'MOBILE'
      }
    ]
  };

  if (data.contactEmail) {
    contact['emails'] = [
      {
        email: data.contactEmail,
        type: 'WORK'
      }
    ];
  }

  if (data.contactOrg) {
    contact['org'] = {
      company: data.contactOrg
    };
  }

  const payload = {
    messaging_product: 'whatsapp',
    to: data.recipientPhone,
    type: 'contacts',
    contacts: [contact]
  };

  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_contact"
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
contactName string Sim Nome do contato
contactPhone string Sim Telefone do contato (com código país)
contactEmail string Não Email do contato
contactOrg string Não Nome da empresa/organização

Exemplo 1: Contato de Suporte

{
  "name": "Enviar Contato Suporte - SEND_CONTACT",
  "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": "👤 Contato do Suporte\n\nSalve nosso contato para falar conosco quando precisar!"
        }
      }
    },
    {
      "id": "whatsapp_1",
      "type": "whatsapp_meta",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Enviar Contato",
        "parameters": {
          "operation": "send_contact",
          "accessToken": "EAAxxxxxxxx",
          "phoneNumberId": "123456789",
          "recipientPhone": "5511999999999",
          "contactName": "Suporte Empresa XYZ",
          "contactPhone": "5511988887777",
          "contactEmail": "suporte@empresaxyz.com",
          "contactOrg": "Empresa XYZ Ltda"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Instruções",
        "parameters": {
          "message": "✅ Contato salvo!\n\nEstamos disponíveis:\nSeg-Sex: 8h às 18h\nSáb: 8h às 12h"
        }
      }
    },
    {
      "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: Indicação de Profissional

{
  "name": "Indicação Profissional - SEND_CONTACT",
  "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 do Profissional",
        "parameters": {
          "variableName": "professional",
          "value": {
            "clientPhone": "5511888888888",
            "proName": "Dr. Carlos Oliveira",
            "proPhone": "5511977776666",
            "proEmail": "carlos.oliveira@clinica.com",
            "proCompany": "Clínica Saúde Total"
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Apresentação",
        "parameters": {
          "message": "👨‍⚕️ Indicação de Especialista\n\nComo solicitado, segue o contato do profissional recomendado:"
        }
      }
    },
    {
      "id": "whatsapp_1",
      "type": "whatsapp_meta",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Enviar Contato",
        "parameters": {
          "operation": "send_contact",
          "accessToken": "EAAxxxxxxxx",
          "phoneNumberId": "123456789",
          "recipientPhone": "{{professional.clientPhone}}",
          "contactName": "{{professional.proName}}",
          "contactPhone": "{{professional.proPhone}}",
          "contactEmail": "{{professional.proEmail}}",
          "contactOrg": "{{professional.proCompany}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Finalizar",
        "parameters": {
          "message": "📞 Entre em contato diretamente!\n\nMencione que foi indicado por nós."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "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": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Resposta do Node

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "5511999999999",
      "wa_id": "5511999999999"
    }
  ],
  "messages": [
    {
      "id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNBMzYxNzQyQ0JGRjREMTU0QzFEAA=="
    }
  ]
}

Boas Práticas

SIM: - Inclua código do país no telefone (ex: 5511999999999) - Preencha contactOrg para contexto profissional - Adicione email quando disponível - Use nome completo e descritivo

NÃO: - Não omita código do país no telefone - Não envie contato sem contexto prévio - Não use nomes genéricos ("Vendedor", "Suporte")

Dicas

💡 Formato telefone: Sempre com código país (55 para Brasil) 💡 Nome descritivo: Use "Dr. João - Cardiologia" ao invés de só "João" 💡 Email: Sempre inclua para facilitar comunicação alternativa 💡 Empresa: contactOrg ajuda identificar contexto profissional

Próximo Node

SEND_LOCATION - Enviar localização → SEND_MESSAGE - Enviar texto