CRM — Upsert Contact
A integração CRM permite criar ou atualizar contatos automaticamente durante a conversa, sem intervenção humana. A operação é sempre um "upsert" — se o contato já existe (pelo telefone ou e-mail), é atualizado; caso contrário, é criado.
Configuração
{
"type": "CRM",
"subtype": "UPSERT_CONTACT",
"name": "nomeDoCliente",
"phone": "telefoneDoCliente",
"email": "emailDoCliente",
"company": "empresaDoCliente"
}Campos Disponíveis
Todos os campos são opcionais individualmente, mas recomenda-se ao menos name e phone ou email para identificação.
Dados de Identificação
| Campo | Tipo | Descrição |
|---|---|---|
name |
string | Nome completo do contato |
identity |
string | CPF, CNPJ ou documento de identificação |
phone |
string | Telefone (usado como chave de busca no upsert) |
email |
string |
Dados Profissionais
| Campo | Tipo | Descrição |
|---|---|---|
company |
string | Nome da empresa onde trabalha |
position |
string | Cargo/função |
Dados Pessoais
| Campo | Tipo | Descrição |
|---|---|---|
birthday |
string | Data de nascimento (ex: 1990-05-20) |
Endereço
| Campo | Tipo | Descrição |
|---|---|---|
zipCode |
string | CEP |
country |
string | País |
state |
string | Estado (UF) |
city |
string | Cidade |
district |
string | Bairro |
street |
string | Logradouro |
number |
string | Número |
complement |
string | Complemento |
Substituição de Parâmetros
Os valores dos campos devem ser o nome exato do parâmetro definido no gatilho — sem $, sem {{}}. A plataforma substitui automaticamente.
Definição do trigger:
{
"name": "registrar_lead",
"parameters": {
"properties": {
"nomeCliente": { "type": "string", "description": "Nome completo do cliente" },
"emailCliente": { "type": "string", "description": "E-mail" },
"empresaCliente": { "type": "string", "description": "Empresa" },
"cargoCliente": { "type": "string", "description": "Cargo/função" }
},
"required": ["nomeCliente", "emailCliente"]
}
}Configuração da ação CRM:
{
"type": "CRM",
"subtype": "UPSERT_CONTACT",
"name": "nomeCliente",
"email": "emailCliente",
"company": "empresaCliente",
"position": "cargoCliente"
}Note que nomeCliente (sem $) faz referência ao parâmetro extraído pelo LLM.
Exemplo Completo: Captura de Lead em Vendas
Prompt do assistente:
Você é um assistente de pré-vendas. Após entender a necessidade do cliente,
colete nome completo, e-mail corporativo e o nome da empresa.
Depois de coletar, registre automaticamente no CRM.Gatilho:
{
"name": "registrar_lead_qualificado",
"description": "Registra o lead no CRM após coletar os dados necessários. Use quando tiver nome, e-mail e empresa do cliente.",
"parameters": {
"properties": {
"nome": { "type": "string" },
"email": { "type": "string" },
"empresa": { "type": "string" },
"interesse": {
"type": "string",
"enum": ["starter", "growth", "enterprise"]
}
},
"required": ["nome", "email", "empresa"]
},
"action": {
"type": "CRM",
"subtype": "UPSERT_CONTACT",
"name": "nome",
"email": "email",
"company": "empresa"
},
"interpretResponse": false
}O campo interesse é extraído pelo LLM mas não vai para o CRM — seria enviado via webhook separado ou usado na resposta.
Combinando com Webhook
Para aproveitar melhor os dados, use o CRM junto com um Webhook num mesmo gatilho ou em gatilhos sequenciais:
- Gatilho 1:
CRM / UPSERT_CONTACT— registra o contato - Gatilho 2:
WEBHOOK— notifica o time de vendas via Slack/e-mail
Isso é possível configurando o MaxInteractions = 2 no assistente.