Skip to content

Criar Chat

Cria um novo atendimento (ou reutiliza um chat ativo existente) para um contato e canal.

ENDPOINT PRINCIPAL

Este é um dos endpoints mais importantes da API. Além de criar (ou reutilizar) o chat, na mesma requisição você já pode:

  • enviar uma mensagem inicial (initialMessage)
  • enviar um template WhatsApp (whatsappTemplate)
  • iniciar um fluxo (flowId) ou agendar fluxo na resposta (responseFlowId)

Existem rotas separadas para enviar mensagem e enviar template em um chat já existente — use-as quando o chat já foi criado. Para o caso mais comum (abrir atendimento e falar com o contato), prefira Criar Chat e faça tudo em uma única chamada.

Endpoint

http
POST /api/{organizationId}/chat/create

Base URL: https://v1.api.interflow.chat

Autenticação

API Key no header (um dos formatos):

http
x-api-key: ak_sua_api_key

ou

http
Authorization: Bearer ak_sua_api_key

Parâmetros

URL

ParâmetroTipoObrigatórioDescrição
organizationIdstring (UUID)SimID da organização — em ConfiguraçõesAPI Keys

Body

CampoTipoObrigatórioDescrição
channelIdstring (UUID)SimID do canal ativo — menu lateral Canais (copiar no card)
customerIdstring (UUID)NãoCliente existente — Clientes → ações (⋮) → Copiar ID; se omitido, busca/cria automaticamente
customerobjectSim*Dados do cliente. O identificador do chat vem daqui, conforme o canal
teamIdstring (UUID)NãoEquipe do atendimento — menu Equipes (copiar no card)
initialMessagestring | objectNãoMensagem inicial (texto ou mídia)
whatsappTemplateobjectNãoTemplate Meta (somente canal WhatsApp Oficial) — Canais → Templates → Copiar ID
flowIdstring (UUID)NãoInicia o fluxo imediatamente — menu Fluxos (copiar no card)
flowVariablesarrayNãoVariáveis do fluxo: [{ "name": "...", "value": "..." }]
contextMessagestringNãoContexto usado com flowId ou responseFlowId
responseFlowIdstring (UUID)NãoFluxo ao responder o cliente — mesmo ID em Fluxos (copiar no card)
keepPendingbooleanNãoSe true, mantém o chat em pending mesmo com initialMessage / whatsappTemplate (não atende nem auto-atribui)
utmobjectNãoAtribuição UTM / Facebook Lead Ads (Make). Gravado em customers.utm_metadata

*Obrigatório: channelId e o campo de customer do canal (whatsapp/phone, email, instagram ou facebook).

customer

CampoTipoDescrição
namestringNome do cliente. Se o cadastro já existir e o nome estiver vazio, preenche
whatsappstringNúmero WhatsApp. Obrigatório em canal WhatsApp se não vier phone
phonestringTelefone. No WhatsApp, usado se não vier whatsapp. Senão vira contato extra
emailstringE-mail. Obrigatório em canal e-mail. Nos outros, contato extra
instagramstringInstagram ID. Obrigatório em canal Instagram
facebookstringFacebook ID. Obrigatório em canal Facebook
documentstringCPF/CNPJ (ou outro documento). Só preenche se o campo estiver vazio
salePrice / sale_pricenumber | stringValor de compra/venda (customers.sale_price). Só preenche se estiver vazio
tagsstring[] | stringNomes das tags (cadastro ou existente). Não cria tag nova
customFieldsobject | arrayCampos personalizados por slug: { "investimento": "Até 15 mil" } ou [{ "slug": "investimento", "value": "Até 15 mil" }]
forceUpdateobjectQuais campos sobrescrever mesmo se já tiverem valor. Veja a tabela abaixo

customer.forceUpdate

Sem forceUpdate, cliente existente só preenche o que estiver vazio. Marque true nos campos que devem ser sobrescritos:

ChaveEfeito
nameSobrescreve o nome
emailSobrescreve o e-mail principal
phoneAtualiza o contato telefone existente
whatsappAtualiza o contato WhatsApp existente
instagramAtualiza o Instagram ID
facebookAtualiza o Facebook ID
documentSobrescreve o documento
sale_priceSobrescreve o valor de compra
customFieldstrue força todos os slugs enviados; ou lista (["investimento"]) / slug ("investimento")

Identificador pelo canal

O Interflow lê o destinatário em customer, conforme o tipo do canal:

Tipo do canalCampo em customer
whatsapp_official, whatsapp_wapi, whatsapp_zapi, whatsapp_waha, whatsapp_evowhatsapp (senão phone)
emailemail
instagraminstagram
facebookfacebook

initialMessage

String (texto) ou objeto:

CampoTipoDescrição
typestringtext, image, video, audio ou document
contentstringTexto (obrigatório se type = text) ou legenda
urlstringURL HTTPS da mídia (obrigatório para tipos de mídia)
namestringNome do arquivo (opcional)
mimetypestringMIME type (opcional)
forwardobjectMetadados de encaminhamento (opcional)

whatsappTemplate

CampoTipoDescrição
id ou templateIdstring (UUID)ID Interflow do template — Canais → canal → Templates do WhatsAppCopiar ID
variablesobject | arrayVariáveis do template (opcional)

utm (Make / Facebook Lead Ads)

Pode ser o bundle inteiro do módulo Facebook Lead Ads — New Lead no Make, ou um objeto já mapeado. O Interflow grava em customers.utm_metadata (JSONB), preenche customers.ad_source_id com o ID externo (ad_id / sourceID) e tenta vincular o anúncio no hub (utm_campaign_ad_id) pelo mesmo ID.

Campo aceitoAliases (Make / Meta)Destino
lead_idLead ID, idutm_metadata.meta_leadgen_id
form_idForm IDutm_metadata.form_id
ad_idAd ID, sourceID, source_id, ad_source_idcustomers.ad_source_id + utm_metadata.sourceID + lookup do anúncio
ad_nameAd nameutm_metadata.ad_name / adTitle
adset_idAd set ID, Ad group IDutm_metadata.adset_id
adset_nameAdset nameutm_metadata.adset_name
campaign_idCampaign IDutm_metadata.campaign_id_meta (ID da Meta, não UUID interno)
campaign_nameCampaign nameutm_metadata.campaign_name
page_idPage IDutm_metadata.page_id
is_organicIs organicutm_metadata.is_organic
platformPlatformutm_metadata.platform
created_timeDate createdutm_metadata.created_time
field_dataField data (array Meta ou objeto Make)utm_metadata.field_data (perguntas do formulário)
utm_source / utm_medium / utm_campaign / utm_term / utm_contentespelhados em utm_metadata
utm_campaign_id / utm_campaign_ad_idUUIDs internos (opcional)FKs do customer, se o anúncio ainda não estiver syncado

Perguntas do Instant Form em utm.field_data ficam só no JSON de UTM. Custom fields do CRM vão em customer.customFields (chave = slug).

Cliente já existente: nome, e-mail, documento, UTM/anúncio e customer.customFields só preenchem o que estiver vazio — valor já gravado não é sobrescrito (already_filled), salvo se customer.forceUpdate marcar o campo. Contatos extras (telefone, WhatsApp, Instagram, Facebook) são adicionados se ainda não existirem; com forceUpdate o contato daquele tipo é atualizado. Cadastro novo grava todos os slugs enviados. Slug inexistente ou valor inválido é ignorado (customFieldsSkipped).

ESTÁGIO DO CLIENTE

Ao criar um cliente novo, o sistema usa o estágio padrão configurado no canal (settings.defaultStageId), se válido.

Comportamento

  • Se já existir chat ativo (pending, in_progress ou await_closing) para o mesmo contato/canal, ele é reutilizado (existing: true).
  • Sem keepPending, enviar initialMessage ou whatsappTemplate tende a atender o chat (in_progress) ou adicionar colaborador.
  • Com keepPending: true, a mensagem/template é enviada e o chat permanece pending (também ignora auto-assign na criação).
  • flowId e responseFlowId são independentes: o primeiro inicia na hora; o segundo aguarda a resposta do cliente.

Exemplos

Criação básica

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_sua_api_key" \
  -d '{
    "channelId": "uuid-do-canal",
    "customer": { "whatsapp": "5511999999999" },
    "customerName": "Nome do cliente"
  }'

Template WhatsApp + manter pending + fluxo ao responder

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_sua_api_key" \
  -d '{
    "channelId": "uuid-do-canal",
    "customer": { "whatsapp": "5511999999999" },
    "customerName": "Nome do cliente",
    "keepPending": true,
    "responseFlowId": "uuid-do-fluxo",
    "whatsappTemplate": {
      "id": "uuid-do-template"
    }
  }'

Mensagem inicial (texto)

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_sua_api_key" \
  -d '{
    "channelId": "uuid-do-canal",
    "customer": { "whatsapp": "5511999999999" },
    "initialMessage": "Olá! Como posso ajudar?"
  }'

Make — Facebook Lead Ads (bundle no utm)

No Make, mapeie o módulo New Lead inteiro em utm. Use Full name / WhatsApp number (ou telefone) nos campos de contato:

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_sua_api_key" \
  -d '{
    "channelId": "uuid-do-canal",
    "customer": {
      "name": "Nome do lead",
      "email": "lead@email.com",
      "phone": "551133334444",
      "whatsapp": "5511999999999",
      "document": "12345678901",
      "tags": ["Lead Facebook", "Móveis"],
      "customFields": {
        "investimento": "Até 15 mil",
        "loja": "Loja X",
        "bairro-cidade": "Pinheiros"
      },
      "forceUpdate": {
        "name": true,
        "document": true,
        "customFields": ["investimento"]
      }
    },
    "utm": {
      "lead_id": "1234567890",
      "form_id": "987654321",
      "ad_id": "111222333",
      "ad_name": "Ad Planejados SP",
      "adset_id": "444555666",
      "adset_name": "Conjunto SP",
      "campaign_id": "777888999",
      "campaign_name": "Campanha Móveis",
      "page_id": "1122334455",
      "is_organic": false,
      "platform": "fb",
      "created_time": "2026-08-17T16:20:00+0000"
    }
  }'

Fluxo imediato

bash
curl -X POST "https://v1.api.interflow.chat/api/{organizationId}/chat/create" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ak_sua_api_key" \
  -d '{
    "channelId": "uuid-do-canal",
    "customer": { "whatsapp": "5511999999999" },
    "flowId": "flow-uuid",
    "contextMessage": "Bem-vindo!",
    "flowVariables": [
      { "name": "origem", "value": "api" }
    ]
  }'

Resposta

Sucesso (200)

json
{
  "success": true,
  "chatId": "chat-uuid",
  "formattedContact": "5511999999999",
  "existing": false,
  "flowInitiated": false,
  "keepPending": true,
  "responseFlowScheduled": true,
  "responseFlowId": "uuid-do-fluxo",
  "responseFlowName": "Nome do fluxo",
  "templateSent": true,
  "templateMessageId": "message-uuid"
}
CampoDescrição
chatIdID do chat criado ou reutilizado
formattedContactContato formatado pelo sistema
existingtrue se reutilizou chat ativo
flowInitiatedtrue se flowId foi solicitado
keepPendingEco do keepPending enviado
responseFlowScheduledtrue se responseFlowId foi configurado
templateSent / initialMessageSentResultado do envio (quando aplicável)
templateError / initialMessageErrorErro de envio sem falhar a criação do chat
customerIdCliente criado ou reutilizado
utmAppliedtrue se utm foi gravado em customers.utm_metadata
customFieldsAppliedSlugs gravados no customer
customFieldsSkippedSlugs ignorados (not_found / invalid)
tagsAppliedTags associadas (alreadyExists: true se já tinha)
tagsSkippedNomes ignorados (not_found)
contactsAppliedE-mail/telefone extras gravados
contactsSkippedIgnorados (same_as_contact / already_filled)

Erros comuns

HTTPSituação
400Parâmetros inválidos / template em canal não oficial
404Canal inativo ou responseFlowId inexistente
401API Key inválida
json
{
  "success": false,
  "error": "Parâmetros obrigatórios: channelId e customer.whatsapp / customer.email / customer.instagram / customer.facebook (conforme o canal)"
}

Próximos passos

Documentação em constante atualização