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:
- Networking: Compartilhar contatos profissionais
- Atendimento: Enviar contato de suporte/vendas
- Indicação: Recomendar profissionais/empresas
- Organização: Facilitar salvar contato do remetente
- Múltiplos dados: Email, telefone, empresa em um card
Como funciona internamente?
Quando o SEND_CONTACT é executado, o sistema:
- Valida obrigatórios: Verifica contactName e contactPhone
- Constrói contato: Cria objeto vCard com dados
- Adiciona opcionais: Email e organização se fornecidos
- Envia para API: POST com tipo contacts
- 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