Esta página é para quando você quer mandar uma mensagem nova para o cliente dentro de um atendimento seja um texto de chat, um WhatsApp com modelo pronto, um e-mail, um SMS ou até só um "está digitando..." Todos os endpoints aqui partem de um caso já existente.
Todas as requisições exigem o cabeçalho Authorization veja Autenticação e Segurança se ainda não souber como conseguir e usar o token.
Se o que você precisa é consultar o que já foi trocado com o cliente (histórico de conversa, conteúdo de e-mail, anexos, gravações de voz), isso fica em Canais e Mensagens, não aqui.
Índice desta página
Enviar mensagem no canal de chat ativo (v1)
As quatro variações abaixo (texto, solicitação de localização, botões e botões interativos) usam o mesmo endpoint, diferenciadas pelo conteúdo do campo payload. O canal de chat ativo por último ou que recebeu a última mensagem é o escolhido automaticamente para o envio. Canais possíveis: WhatsApp, Webchat, Instagram, Messenger e Telegram, desde que o caseId esteja ativo.
Request
POST https://api.cvortex.com/v1/message/chat/send
Header: Authorization
O corpo é enviado como multipart/form-data, com um campo payload (texto/JSON) e, opcionalmente, um campo file (arquivo).
|
Campo |
Tipo |
Content-Type |
Obrigatório |
Descrição |
|---|---|---|---|---|
|
|
text (JSON) |
|
Sim |
Ver estrutura por variação abaixo |
|
|
file |
Auto |
Não |
Arquivo a enviar junto com a mensagem (jpg, pdf, doc, docx) |
Texto
payload contém message, caseId e, opcionalmente, fileUrl (URL de imagem/arquivo a enviar use fileUrl ou o campo file, nunca os dois).
message: Conteúdo da mensagem de texto.
caseId: Identificador do caso (atendimento).
fileUrl: URL de uma imagem ou arquivo que será enviado ao contato.
Exemplo
curl --location 'https://api.cvortex.com/v1/message/chat/send' \
--header 'Authorization: Bearer {token}' \
--form 'payload="{\"message\": \"Olá tudo bem!\", \"caseId\": \"3273\"}";type=application/json'
Response
{
"identifier": "e887f7f1-3cdd-4b01-bc3a-5421d29d153a"
}
Solicitar localização (WhatsApp)
payload contém message, caseId e messageType: "LOCATION_REQUEST".
message: Conteúdo da mensagem de texto.
caseId: Identificador do caso (atendimento).
messageType: "LOCATION_REQUEST" indica o envio de uma mensagem de solicitação de localização.
Exemplo
curl --location 'https://api.cvortex.com/v1/message/chat/send' \
--header 'Authorization: Bearer {token}' \
--form 'payload="{\"message\": \"Olá, me envia sua localização por favor.\", \"caseId\": \"3305\", \"messageType\": \"LOCATION_REQUEST\"}";type=application/json'
Botões (WhatsApp)
payload contém message, caseId e action (lista de opções limite de 10 botões). Os campos headerAction e footerAction são opcionais.
Estrutura de cada item de action:
{
"payload": "opção 1",
"text": "opção 1",
"type": "reply",
"description": "Descrição 1"
}
Exemplo
curl --location 'https://api.cvortex.com/v1/message/chat/send' \
--header 'Authorization: Bearer {token}' \
--form 'payload="{\"message\": \"Outra imagem\", \"caseId\": \"3305\", \"actions\": [{\"payload\": \"opção 1\", \"text\": \"opção 1\", \"type\": \"reply\", \"description\": \"Descrição 1\"}, {\"payload\": \"opção 2\", \"text\": \"opção 2\", \"type\": \"reply\", \"description\": \"Descrição 2\"}, {\"payload\": \"opção 3\", \"text\": \"opção 3\", \"type\": \"reply\", \"description\": \"Descrição 3\"}, {\"payload\": \"opção 4\", \"text\": \"opção 4\", \"type\": \"reply\", \"description\": \"Descrição 4\"}]}";type=application/json'
Botões interativos, com imagem (WhatsApp)
Igual ao anterior, mas com fileUrl (imagem/arquivo) e limite de 3 botões.
Exemplo
curl --location 'https://api.cvortex.com/v1/message/chat/send' \
--header 'Authorization: Bearer {token}' \
--form 'payload="{\"message\": \"Outra imagem\", \"caseId\": \"3305\", \"fileUrl\":\"https://exemplo.com/imagem.png\", \"actions\": [{\"payload\": \"opção 1\", \"text\": \"opção 1\", \"type\": \"reply\", \"description\": \"Descrição 1\"}, {\"payload\": \"opção 2\", \"text\": \"opção 2\", \"type\": \"reply\", \"description\": \"Descrição 2\"}]}";type=application/json'
Enviar mensagem no canal de chat ativo (v2)
Endpoint mais novo para enviar mensagens, com suporte a um tipo de conteúdo mais rico que a v1 abaixo: mensagem de pagamento (com boleto e Pix). A diferença técnica principal é que aqui o corpo é enviado como JSON puro (Content-Type: application/json), e não como multipart/form-data como na v1.
Request
POST https://api.cvortex.com/v2/message/chat/send
Header: Authorization, Content-Type: application/json
Campos comuns a qualquer tipo de mensagem v2
|
Campo |
Tipo |
Obrigatório |
Descrição |
|---|---|---|---|
|
|
string |
Sim |
Identificador do caso (atendimento) |
|
|
string |
Sim |
Conta do provedor de WhatsApp usada para o envio |
|
|
string |
Não |
Texto que acompanha o conteúdo especial (aceita quebra de linha com |
O tipo da mensagem é definido por qual campo extra você inclui no corpo, além dos três acima:
|
Campo extra incluído |
Tipo de mensagem resultante |
|---|---|
|
nenhum (só |
Texto simples |
|
|
Arquivo / imagem |
|
|
Botões (até 3 itens) ou lista (mais de 3 itens) |
|
|
Pagamento boleto / Pix |
Texto (v2)
Mensagem de texto simples: basta enviar os três campos comuns, sem nenhum campo extra.
Exemplo
{
"caseId": "44657",
"providerAccountKeyId": "486b5be8-8748-4fe9-9aaa-b1adec2f67ee",
"message": "Teste"
}
Arquivo / Imagem (WhatsApp)
Envia um arquivo ou imagem através do campo extra fileUrl funciona de forma parecida com o fileUrl já visto na v1.
|
Campo |
Tipo |
Descrição |
|---|---|---|
|
|
string |
URL pública do arquivo ou imagem a ser enviado |
Exemplo
{
"caseId": "44657",
"providerAccountKeyId": "486b5be8-8748-4fe9-9aaa-b1adec2f67ee",
"fileUrl": "https://exemplo.com/arquivos/imagem.jpg"
}
Botões / Lista de opções (WhatsApp)
Envia uma mensagem com opções de resposta rápida, através do campo extra actions. A quantidade de itens em actions decide como a mensagem aparece pro cliente:
|
Quantidade de itens em |
Como aparece no WhatsApp |
|---|---|
|
Até 3 |
Botões |
|
Mais de 3 |
Lista |
|
Campo |
Tipo |
Descrição |
|---|---|---|
|
|
array |
Opções apresentadas ao cliente até 3 viram botões, mais de 3 viram lista |
|
|
string |
Tipo da opção no exemplo, sempre |
|
|
string |
Valor interno da opção (o que volta quando o cliente escolhe) |
|
|
string |
Texto da opção, exibido ao cliente |
Exemplo mais de 3 itens (vira lista)
{
"caseId": "44657",
"providerAccountKeyId": "486b5be8-8748-4fe9-9aaa-b1adec2f67ee",
"message": "Agora, escolha o seu *banco* na lista de parceiros.",
"actions": [
{ "type": "reply", "payload": "1", "text": "Banco Bradesco" },
{ "type": "reply", "payload": "2", "text": "Banco do Brasil" },
{ "type": "reply", "payload": "3", "text": "Banco Itau S/A" },
{ "type": "reply", "payload": "4", "text": "Banco Santander" },
{ "type": "reply", "payload": "5", "text": "Banrisul" },
{ "type": "reply", "payload": "6", "text": "Nubank" },
{ "type": "reply", "payload": "7", "text": "Nenhum desses bancos" }
]
}
Exemplo até 3 itens (vira botões)
{
"caseId": "44657",
"providerAccountKeyId": "486b5be8-8748-4fe9-9aaa-b1adec2f67ee",
"message": "Confirma o cancelamento do seu pedido?",
"actions": [
{ "type": "reply", "payload": "1", "text": "Sim, cancelar" },
{ "type": "reply", "payload": "2", "text": "Não, manter pedido" }
]
}
Pagamento boleto / Pix (WhatsApp)
Envia, no WhatsApp, um cartão de cobrança com o resumo do pedido e um ou mais botões de pagamento (por exemplo, "copiar código Pix" e "copiar linha digitável do boleto").
O campo extra que ativa esse tipo é payment:
|
Campo |
Tipo |
Descrição |
|---|---|---|
|
|
string |
Moeda da cobrança (ex: |
|
|
object |
Cabeçalho visual do cartão de pagamento |
|
|
string |
Tipo de cabeçalho no exemplo, |
|
|
object |
Presente quando |
|
|
string |
URL pública do arquivo mostrado no cabeçalho (ex: PDF da fatura) |
|
|
string |
Nome do arquivo exibido ao cliente |
|
|
object |
Detalhes do pedido/cobrança |
|
|
array |
Itens da cobrança |
|
|
string |
Descrição do item |
|
|
number |
Quantidade |
|
|
string |
Código interno do item/produto no seu sistema |
|
|
object |
Valor do item ver "Como funciona |
|
|
string |
Status do pedido (ex: |
|
|
object |
Subtotal do pedido (mesma estrutura de |
|
|
object |
Valor de imposto/taxa (mesma estrutura de |
|
|
array |
Formas de pagamento oferecidas ao cliente pode ter mais de uma |
|
|
string |
Identifica a forma de pagamento daquele item: |
|
|
object |
Presente quando |
|
|
string |
Código Pix "copia e cola" |
|
|
string |
Chave Pix do recebedor |
|
|
string |
Tipo da chave Pix (ex: |
|
|
string |
Nome do recebedor, exibido ao cliente |
|
|
object |
Presente quando |
|
|
string |
Linha digitável do boleto (o número por trás do botão "copiar código de barras") |
|
|
string |
País/modelo de pagamento no exemplo, |
|
|
string |
Identificador do pedido/cobrança no seu sistema |
|
|
object |
Valor total cobrado (mesma estrutura de |
|
|
string |
Tipo do pedido dentro do pagamento no exemplo, |
Como funciona value/offset: todo valor monetário (amount, subtotal, tax, totalAmount) vem como { "value": número, "offset": número }. O valor real é value ÷ offset. No exemplo abaixo, value: 5000 e offset: 100 resultam em R$ 50,00 que bate com o "Valor: R$50,00" escrito no texto da mensagem.
Exemplo
curl --location 'https://api.cvortex.com/v2/message/chat/send' \
--header 'Authorization: Bearer {token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"caseId": "44608",
"providerAccountKeyId": "486b5be8-8748-4fe9-9aaa-b1adec2f67ee",
"message": "Certo. Aqui está o resumo da sua conta:\n\nInternet do CEP: 00000-000\nVencimento: 18/01/21\nValor: R$50,00",
"payment": {
"currency": "BRL",
"header": {
"type": "document",
"document": {
"link": "https://exemplo.com/arquivos/fatura.pdf",
"filename": "fatura.pdf"
}
},
"order": {
"items": [
{
"amount": { "offset": 100, "value": 5000 },
"name": "Internet do CEP: 00000-000",
"quantity": 1,
"retailerId": "PLANO-FIBRA-012021"
}
],
"status": "pending",
"subtotal": { "offset": 100, "value": 5000 },
"tax": { "offset": 100, "value": 0 }
},
"paymentSettings": [
{
"pixDynamicCode": {
"code": "00020126580014br.gov.bcb.pix0136123e4567-e89b-12d3-a456-426614174000",
"key": "pagamentos@empresas.com",
"keyType": "EMAIL",
"merchantName": "Empresa Exemplo Ltda"
},
"type": "pix_dynamic_code"
},
{
"type": "boleto",
"boleto": {
"digitableLine": "00000000000000000000000000000000000000000000000"
}
}
],
"paymentType": "br",
"referenceId": "PED-20260605-0042",
"totalAmount": { "offset": 100, "value": 5000 },
"type": "digital-goods"
}
}'
Flow (WhatsApp)
Abre um formulário interativo (Flow) já cadastrado na conta do WhatsApp Business, para o cliente preencher dentro da própria conversa.
|
Campo |
Tipo |
Descrição |
|---|---|---|
|
|
string |
ID Hash do atendimento |
|
|
string |
Texto principal da mensagem |
|
|
string |
Texto do cabeçalho da mensagem |
|
|
string |
Ação do Flow no exemplo, |
|
|
string |
Texto do botão que abre o Flow |
|
|
string |
Token de contexto do Flow no exemplo, carrega |
|
|
string |
ID do Flow cadastrado na conta do WhatsApp Business |
|
|
string |
Tela inicial do Flow a ser aberta |
|
|
object |
Dados usados para pré-preencher a tela inicial do Flow |
Exemplo
{
"assetId": "7bb33ad4-43ab-4c72-9044-d076539bed7d",
"body": "Clique no botão abaixo para confirmar o seu produto:",
"flow": {
"flowAction": "navigate",
"flowCTA": "Ver meus produtos",
"flowToken": "idcaso=12345;cpf=01234567889",
"flowId": "123456789012345",
"flowScreen": "CONFIRMAR_DOCUMENTO",
"flowScreenData": {
"cpf": "01234567889"
}
},
"header": "Empresa"
}
Enviar HSM WhatsApp (Template)
Envia um Highly Structured Message (Template), usado no WhatsApp, para iniciar conversas fora da janela de 24 horas.
Request
POST https://api.cvortex.com/v1/message/chat/hsm/send
Header: Authorization
Parâmetros de body
|
Campo |
Tipo |
Obrigatório |
Descrição |
|---|---|---|---|
|
|
string |
Sim |
Identificador do caso (atendimento) |
|
|
string |
Sim |
ID do template pré-aprovado |
|
|
string |
Sim |
Número do destinatário (ex: |
|
|
string |
Sim |
Namespace do provedor do template |
|
|
string |
Sim |
Identificador da conta do provedor (ex: Twilio, Meta) |
|
|
string[] |
Não |
Argumentos variáveis para preencher o template |
Exemplo
{
"caseId": "123",
"templateId": "welcome_tpl",
"to": "+5534999999999",
"templateNamespace": "namespace_example",
"providerAccountKeyId": "prov-1",
"templateArgs": ["Nome", "Suporte XPTO"]
}
O templateId usado acima precisa já existir e estar aprovado veja como cadastrar e consultar templates logo abaixo.
Atualizar template de WhatsApp
Permite atualizar as configurações de um template de WhatsApp, como categoria, template de fallback (o modelo alternativo usado quando o principal falha) e validações.
Request
PUT https://api.cvortex.com/v1/whatsapp/templates
Header: Authorization
Parâmetros de body
|
Campo |
Tipo |
Descrição |
Obrigatório |
|---|---|---|---|
|
|
string |
Categoria desejada para o template |
Sim |
|
|
string |
Nome ou identificador do template de reserva (fallback) |
Sim |
|
|
boolean |
Define se este template é um template de fallback |
Sim |
|
|
string |
Código do idioma do template (ex: |
Sim |
|
|
string |
Identificador da conta no provedor |
Sim |
|
|
boolean |
Se verdadeiro, remove o template de fallback associado |
Sim |
|
|
string |
Identificador único do template |
Sim |
|
|
boolean |
Se verdadeiro, valida a categoria selecionada |
Sim |
Exemplo de Payload
{
"desiredCategory": "string",
"fallbackTemplate": "string",
"isFallbackTemplate": true,
"language": "string",
"providerAccountId": "string",
"removeFallbackTemplate": true,
"templateId": "string",
"validateDesiredCategory": true
}
Responses
|
Código |
Descrição |
|---|---|
|
200 |
Sucesso na atualização. Retorna o objeto do template atualizado, com detalhes de auditoria ( |
|
201 |
Recurso criado com sucesso |
|
401 |
Token de autorização ausente ou inválido |
|
403 |
Sem permissão para acessar este recurso |
|
404 |
Template não encontrado |
{
"active": true,
"businessUnit": "string",
"category": "string",
"createdAt": 0,
"createdBy": "string",
"deleted": true,
"desiredCategory": "string",
"fallbackTemplate": "string",
"id": "string",
"isFallbackTemplate": true,
"language": "string",
"namespace": "string",
"newCategory": "string",
"phone": "string",
"providerAccount": "string",
"score": "string",
"status": "string",
"syncWitMeta": true,
"templateId": "string",
"templatePreview": "string",
"templateType": "string",
"tenantId": "string",
"updatedAt": 0,
"updatedBy": "string",
"updatedCategory": true,
"updatedCategoryAt": 0,
"validateDesiredCategory": true,
"version": "string"
}
Consultar templates de WhatsApp
Permite buscar e filtrar templates de WhatsApp existentes usando critérios como categoria, status, idioma e unidade de negócio.
Request
GET https://api.cvortex.com/v1/whatsapp/templates/search
Header: Authorization
Parâmetros de URI
|
Campo |
Tipo |
Descrição |
Obrigatório |
|---|---|---|---|
|
|
string |
Identificador da unidade de negócio |
Não |
|
|
string |
Categoria atual do template (ex: |
Não |
|
|
string |
Categoria desejada para o template |
Não |
|
|
string |
Status do template (ex: |
Não |
|
|
string |
Código do idioma (ex: |
Não |
|
|
string |
Número de telefone associado |
Não |
|
|
integer |
Limite de resultados por página |
Não |
Exemplo
GET https://api.cvortex.com/v1/whatsapp/templates/search?businessUnit=c81a4adb-7dee-4cc4-b24c-008de39e949a&category=MARKETING&desiredCategory=UTILITY&fallbackTemplate=1512a78d-dc32-4eb2-80b2-039bb577d01f&isFallbackTemplate=false&hasFallbackTemplate=true&language=pt_BR&namespace=ede088be_723f_4247_919a_dff5b910367b&phone=5534999999999&providerAccountId=b66c6352-b582-4ca1-b53d-05bf0a980bf7&status=APPROVED&templateId=cvortexwebhook&validateDesiredCategory=true&updatedCategory=false&limit=300
Response
[
{
"active": true,
"businessUnit": "string",
"category": "string",
"createdAt": 0,
"createdBy": "string",
"deleted": true,
"desiredCategory": "string",
"fallbackTemplate": "string",
"id": "string",
"isFallbackTemplate": true,
"language": "string",
"namespace": "string",
"newCategory": "string",
"phone": "string",
"providerAccount": "string",
"score": "string",
"status": "string",
"syncWitMeta": true,
"templateId": "string",
"templatePreview": "string",
"templateType": "string",
"tenantId": "string",
"updatedAt": 0,
"updatedBy": "string",
"updatedCategory": true,
"updatedCategoryAt": 0,
"validateDesiredCategory": true,
"version": "string"
}
]
Enviar mensagem com CTA (WhatsApp)
Envia uma mensagem do tipo CTA (call-to-action, com botão de link) para um caso com canal de WhatsApp ativo.
Request
POST https://api.cvortex.com/v1/case/send-message-cta
Header: Authorization
Parâmetros de body
|
Nome |
Tipo |
Descrição |
Obrigatório |
|---|---|---|---|
|
|
string |
ID Hash do atendimento |
Sim |
|
|
string |
Texto do corpo da mensagem (máx. 1.024 caracteres) |
Sim |
|
|
string |
Texto do botão CTA (máx. 20 caracteres) |
Sim |
|
|
string |
URL para onde o cliente será direcionado |
Sim |
|
|
string |
Texto do rodapé da mensagem (máx. 60 caracteres) |
Sim |
|
|
string |
Texto do cabeçalho da mensagem (máx. 60 caracteres) |
Sim |
Exemplo
{
"assetId": "95b5f027-0ae8-4ac5-88e5-9042b2003bf2",
"body": "Agora, para fazer seu pedido, basta acessar o nosso portal de pedidos através do botão abaixo. Clique para acessar.",
"buttonText": "Acessar Pedidos",
"buttonURL": "https://exemplo.com/pedidos",
"footer": "",
"header": "Perfeito! Localização confirmada com sucesso"
}
Enviar e-mail com anexos
Envia um e-mail com ou sem anexos. O campo subject é obrigatório.
Request
POST https://api.cvortex.com/v1/message/email/send
Header: Authorization
Parâmetros de body
|
Campo |
Tipo |
Obrigatório |
Descrição |
|---|---|---|---|
|
|
string |
Sim |
Identificador do caso (atendimento) |
|
|
string |
Sim |
Corpo do e-mail (HTML ou texto) |
|
|
string |
Sim |
Assunto do e-mail |
|
|
string |
Sim |
Conta do provedor de e-mail a ser utilizada |
|
|
string[] |
Sim |
Lista de destinatários |
|
|
string |
Não |
ID da conversa (para respostas em thread) |
|
|
string |
Não |
ID digital para rastreamento |
|
|
file |
Não |
Arquivo a enviar junto com a mensagem (jpg, pdf, doc, docx) |
Exemplo
{
"message": "Olá",
"subject": "Teste",
"providerAccountKeyId": "mail-01",
"to": ["email@empresas.com"],
"caseId": "55"
}
O material de origem também trazia um exemplo mais completo, com corpo em HTML:
{
"message": "<!doctype html><html><body><h2>Boas-vindas!</h2><p>Obrigado por testar nosso e-mail em HTML.</p><a href='https://exemplo.com'>Visitar</a></body></html>",
"caseId": "283201",
"subject": "Teste Envio Email External",
"providerAccountKeyId": "5a4a23ed-bde7-41c3-8655-061ad3d9d4de",
"to": ["email@empresas.com"]
}
Enviar SMS
Envia uma mensagem de texto simples (SMS) para um número de telefone.
Request
POST https://api.cvortex.com/v1/message/sms/send
Header: Authorization
Parâmetros de body
|
Campo |
Tipo |
Obrigatório |
Descrição |
|---|---|---|---|
|
|
string |
Sim |
Conta do provedor de SMS |
|
|
string |
Sim |
Número do destinatário (ex: |
|
|
string |
Sim |
Conteúdo da mensagem |
|
|
string |
Sim |
Identificador do caso (atendimento) |
Exemplo
{
"providerAccountKeyId": "sms-provider",
"to": "+5534999999999",
"message": "Seu atendimento foi atualizado.",
"caseId": "789"
}
Response
{
"status": "SUCCESS",
"messageId": "a1b2c3d4",
"details": "Message queued successfully"
}
Enviar sinalização de "digitando" (WhatsApp)
Permite enviar a sinalização de lido e de "está digitando uma resposta" ao cliente.
Disponível apenas para WhatsApp via 360Dialog.
Request
POST https://api.cvortex.com/v1/message/chat/read
Header: Authorization
Parâmetros de body
|
Campo |
Tipo |
Obrigatório |
Descrição |
|---|---|---|---|
|
|
string |
Sim |
ID da |
|
|
boolean |
Sim |
|
Exemplo
{
"messageId": "87d3dd5c-2c8e-4212-b2ba-5380c585fdea",
"sendTyping": true
}