---
title: "Envio de mensagens/criação de conversas por serviços externos"
method: POST
path: "/mensagem/{origem}/{servico}"
tags: ["Envio de Mensagens"]
---

# Envio de mensagens/criação de conversas por serviços externos

`POST /mensagem/{origem}/{servico}`

## Request

- Base URL: `https://integracao.cvcrm.com.br/api/v1/comunicador`
- URL: `https://integracao.cvcrm.com.br/api/v1/comunicador/mensagem/{origem}/{servico}`
- Auth: HTTP bearer

> 🔒 **Autenticação necessária**
>
> Esta API utiliza **Bearer Token** no header Authorization.
> Consulte o tutorial completo antes de fazer sua primeira chamada:
> [Como autenticar nas APIs do CV CRM (v3+ — Bearer Token)](https://desenvolvedor.cvcrm.com.br/docs/como-autenticar-nas-apis-do-cv-crm-com-bearer-token)

Envio de mensagens por serviços externos

**Chat aguardando pesquisa de satisfação:** quando o contato tem, no canal, um chat encerrado
que ficou aguardando a resposta da pesquisa, a mensagem é entregue à pesquisa antes de qualquer
identificação do cliente. Se for resposta, é gravada na pesquisa e não entra em nenhum chat
ativo (o retorno vem com `sucesso: true` e `identificador` vazio). Se não for, a pesquisa é
abandonada, o chat encerrado não é reaberto e a mensagem segue o fluxo normal, que cria um
chat novo. O contrato da requisição e da resposta não muda.

**Eco do app WhatsApp Business (API oficial em Coexistence):** o webhook da Meta com
`field: smb_message_echoes` (mensagens que a empresa enviou, editou ou apagou pelo app do
celular) também chega nesta rota. A mensagem é gravada no chat do destinatário (`to`) como
enviada pela empresa, sem reabrir a janela de 24h nem notificar o atendente; contato sem
chat no canal ganha chat, como numa conversa nova. Edição (`edit`) troca o texto e marca a
mensagem como editada; revogação (`revoke`) marca como apagada. Eco já gravado (mesmo
`id`) é ignorado. A resposta segue o mesmo contrato.

## Path parameters

- `origem` string, required
- `servico` string, required

## Request body

- union
  - MensagemCanalTerceiros: Corpo aceito pelo canal com `servico = terceiros`. Suporta dois formatos, escolhidos pela chave enviada: `mensagem` para uma mensagem única e `mensagens` para um histórico. **Identificação do destino em canal de pós-venda:** `informacoes.idpessoa` e `informacoes.idatendimento` são **mutuamente exclusivos** — enviar os dois resulta em HTTP 400. Nenhum dos dois é obrigatório: sem identificador, o destino da conversa é resolvido pelo telefone ou pelo `link_id` do cliente. Quando `identificador_chat` é informado a conversa já existe e nenhum dos dois é necessário. **Canal configurado com chatbot** fica fora dessa regra: ele abre a conversa por `informacoes.atendimento`, que cria o atendimento junto com o chat.
    - `identificador_chat` string, nullable: Identificador do chat aberto no CV, devolvido na resposta da primeira mensagem. Vazio ou ausente abre uma conversa nova.
    - `mensagem` MensagemCanalTerceirosItem
      - `idmensagem` string, required: Identificador da mensagem no sistema de origem. Usado para casar o status enviado depois. Obrigatório. Se vier vazio, o CV aceita a mensagem por compatibilidade e gera um identificador próprio, mas ela não recebe status nem pode ser citada em `reply`.
      - `texto` string, nullable: Conteúdo textual. Obrigatório quando não há `midia`.
      - `data` string, required: Data e hora da mensagem, no formato `YYYY-MM-DD HH:MM:SS`.
      - `emissor` 'C' | 'A': Quem enviou a mensagem: `C` para cliente e `A` para atendente. Usado apenas no formato de histórico (`mensagens`).
      - `reply` string, nullable: Identificador da mensagem respondida, quando a mensagem é uma resposta.
      - `cliente` object: Dados do cliente. Necessários quando a conversa não é endereçada por pessoa nem por atendimento.
        - `nome` string, nullable: Nome exibido no chat. Sem valor, o CV grava `Sem nome`.
        - `telefone` string, nullable: Telefone do cliente com DDI e DDD, apenas dígitos ou no formato E.164.
        - `link_id` string, nullable: LID do WhatsApp. Opcional; quando informado, é usado preferencialmente ao telefone para identificar o cliente.
      - `midia` object, nullable: Anexo da mensagem. Obrigatório quando não há `texto`.
        - `url` string, uri: URL pública do arquivo.
        - `tipo` string: Tipo da mídia.
        - `nome` string, nullable: Nome do arquivo exibido no chat.
        - `duracao` integer, nullable: Duração em segundos, para áudio e vídeo.
    - `mensagens` MensagemCanalTerceirosItem[]: Histórico de mensagens. Alternativa a `mensagem`, usada para importar de uma vez a conversa já ocorrida do lado do integrador.
      - `idmensagem` string, required: Identificador da mensagem no sistema de origem. Usado para casar o status enviado depois. Obrigatório. Se vier vazio, o CV aceita a mensagem por compatibilidade e gera um identificador próprio, mas ela não recebe status nem pode ser citada em `reply`.
      - `texto` string, nullable: Conteúdo textual. Obrigatório quando não há `midia`.
      - `data` string, required: Data e hora da mensagem, no formato `YYYY-MM-DD HH:MM:SS`.
      - `emissor` 'C' | 'A': Quem enviou a mensagem: `C` para cliente e `A` para atendente. Usado apenas no formato de histórico (`mensagens`).
      - `reply` string, nullable: Identificador da mensagem respondida, quando a mensagem é uma resposta.
      - `cliente` object: Dados do cliente. Necessários quando a conversa não é endereçada por pessoa nem por atendimento.
        - `nome` string, nullable: Nome exibido no chat. Sem valor, o CV grava `Sem nome`.
        - `telefone` string, nullable: Telefone do cliente com DDI e DDD, apenas dígitos ou no formato E.164.
        - `link_id` string, nullable: LID do WhatsApp. Opcional; quando informado, é usado preferencialmente ao telefone para identificar o cliente.
      - `midia` object, nullable: Anexo da mensagem. Obrigatório quando não há `texto`.
        - `url` string, uri: URL pública do arquivo.
        - `tipo` string: Tipo da mídia.
        - `nome` string, nullable: Nome do arquivo exibido no chat.
        - `duracao` integer, nullable: Duração em segundos, para áudio e vídeo.
    - `informacoes` MensagemCanalTerceirosInformacoes: Contexto do CV ao qual a conversa deve ser vinculada.
      - `idpessoa` integer, nullable: Pessoa do CV que recebe a conversa. **Mutuamente exclusivo com `idatendimento`**: enviar os dois juntos na abertura de conversa em canal de pós-venda resulta em HTTP 400. Opcional — sem ele o destino é resolvido pelos dados do cliente. Quando a conversa é endereçada por pessoa, o chat nasce sem atendimento vinculado.
      - `idatendimento` integer, nullable: Atendimento do CV que recebe a conversa. **Mutuamente exclusivo com `idpessoa`**: enviar os dois juntos na abertura de conversa em canal de pós-venda resulta em HTTP 400. Opcional — sem ele o destino é resolvido pelos dados do cliente.
      - `atendimento` object, nullable: Dados para o CV abrir o atendimento junto com a conversa. Formato usado apenas pelo canal configurado com chatbot, que por isso não envia `idpessoa` nem `idatendimento`.
        - `idpessoa` integer, nullable: Pessoa do CV que responde pelo atendimento.
        - `documento` string, nullable: CPF/CNPJ usado para localizar a pessoa quando `idpessoa` não é enviado.
        - `nome_cliente` string, nullable: Nome do cliente, para atendimento de cliente avulso.
        - `email_cliente` string, nullable: E-mail do cliente, para atendimento de cliente avulso.
        - `idassunto` integer: Assunto do atendimento. É o campo que dispara a criação do atendimento.
        - `idsubassunto` integer, nullable: Subassunto do atendimento.
        - `titulo` string, nullable: Título do atendimento.
        - `descricao` string, nullable: Descrição do atendimento.
      - `idlead` integer, nullable: Lead do CV que recebe a conversa, em canal de pré-venda.
      - `idempreendimento` integer, nullable: Empreendimento usado para direcionar a conversa.
  - ChatInfo: O exemplo abaixo é um exemplo de body no padrão Botmaker
    - `lastName` string
    - `chatPlatform` string
    - `whatsappNickName` string
    - `customerCreationTime` string, date-time
    - `contactId` string
    - `sessionId` string
    - `type` string
    - `whatsappNumber` string
    - `firstName` string
    - `sessionCreationTime` string, date-time
    - `v` string
    - `customerId` string
    - `messages` Message[]
      - `date` string, date-time
      - `hasAttachment` boolean
      - `fromName` string
      - `_id_` string
      - `from` string
      - `audio` string, uri
      - `clientPayload` string
      - `operatorId` string
      - `fromCustomer` boolean
    - `chatChannelId` string

## Response `200`

Sucesso

- object

## Other responses

- `400`: Identificador de destino inválido em canal de terceiros de pós-venda sem chatbot. Ocorre quando a abertura de conversa traz `informacoes.idpessoa` e `informacoes.idatendimento` ao mesmo tempo.
- `422`: Erro interno!

---

[API](https://skmtc.dev/cvcrm/apis/comunicador.md) - [All operations](https://skmtc.dev/cvcrm/apis/comunicador/llms.txt) - [OpenAPI document](https://skmtc.dev/cvcrm/apis/comunicador/revisions/83f3c9ab22fa?raw)
