POST
https://www.allpost.com.br/api/v1/chat/{idPedido}/mensagem

Envia mensagem no chat com a transportadora de um pedido; aceita anexo(s) via multipart/form-data (campo anexo ou anexo[]) junto ao texto obrigatório, com limites de 2 MB por anexo e 5 anexos por conversa

Módulo: Transportadora

Descrição

Envia uma mensagem no chat com a transportadora de um pedido, opcionalmente com anexo(s).
Exemplo:
- https://www.allpost.com.br/api/v1/chat/665f1c2a3fdb9612b7f43261/mensagem

Além do id interno do pedido, é possível identificar o pedido pelo número do pedido, número do pedido no canal ou chave da NF-e, informando o parâmetro chave na querystring (ver "Parâmetros de Path").

Dois formatos de envio:
- Só-texto (application/json): corpo com apenas o campo mensagem.
- Com anexo(s) (multipart/form-data): campo mensagem (texto obrigatório) mais o campo anexo (um arquivo) ou anexo[] (vários arquivos).

O texto da mensagem é sempre obrigatório, inclusive ao anexar: o anexo nunca é enviado sozinho (uma mensagem vazia é rejeitada com 400).

Anexos: tipos aceitos: doc, docx, pdf, xls, xlsx, csv, jpg/jpeg, png e gif. Tamanho máximo de 2 MB por anexo e limite de 5 anexos por conversa (somando os anexos de todas as mensagens já enviadas). Se qualquer arquivo violar a whitelist, o tamanho ou o limite de quantidade, nada é persistido (a mensagem e os arquivos são descartados) e o retorno é 400.
Quando há anexo(s), a resposta inclui a lista anexos (com url, nome, data e o autor). Os anexos ficam vinculados à mensagem e são retornados no histórico pelo endpoint GET api/v1/chat/{idPedido}.

O tipoPedido (envio/reversa) e a transportadora são derivados automaticamente do próprio pedido, não sendo necessário enviá-los.
A mensagem é sempre registrada com origem "loja" (qualquer valor de origem enviado no corpo é ignorado). Caso o pedido ainda não possua conversa, uma nova conversa é criada automaticamente com situação "aberto".
Tags HTML e atributos de evento inline são removidos da mensagem antes do armazenamento.

Dica: antes de habilitar o chat, consulte o endpoint GET api/v1/chat/{idPedido}/elegivel para verificar se a transportadora do pedido está liberada para conversa.

Códigos de retorno:
- 200: mensagem registrada.
- 400: dados inválidos (mensagem vazia ou acima de 2000 caracteres, chat finalizado, tipo de arquivo não permitido, anexo acima de 2 MB ou limite de 5 anexos por conversa atingido).
- 401: token ausente, expirado ou inválido.
- 403: o pedido não pertence à loja autenticada, ou a transportadora não está liberada para chat nesta loja.

Parâmetros de Path

Campo Descrição Tipo Obrigatório
idPedido Identificador do pedido no allPost. Por padrão é o id interno do pedido; combinado com o parâmetro chave (querystring) pode ser também o número do pedido, o número do pedido no canal ou a chave da NF-e. string sim
chave Querystring opcional que define como o valor de idPedido deve ser interpretado. Quando ausente, usa o id interno do pedido. Valores aceitos: id/documento (id interno, padrão), pedido/numeropedido (número do pedido), numeropedidocanal (número do pedido no canal — exige canal), chavenf/chavenfe (chave da NF-e). string não
canal Querystring obrigatória apenas quando chave=numeropedidocanal. Identifica o canal de venda do pedido. string não

Exemplos:
- por número do pedido: api/v1/chat/PED-10023/mensagem?chave=pedido
- por número do pedido no canal: api/v1/chat/12345/mensagem?chave=numeropedidocanal&canal=mercadolivre
- por chave da NF-e: api/v1/chat/32000000000000000000000000000000000000000000/mensagem?chave=chavenf

Parâmetros de Entrada

Campo Descrição Tipo Tamanho Obrigatório
mensagem Conteúdo da mensagem. Tags HTML são removidas antes do armazenamento. Sempre obrigatório, inclusive quando há anexo(s) — o anexo nunca é enviado sozinho. string 2000 sim
anexo Arquivo enviado como multipart/form-data (um arquivo por campo). Tipos aceitos: doc, docx, pdf, xls, xlsx, csv, jpg/jpeg, png e gif. Só utilizado quando se deseja anexar um único arquivo à mensagem. file (form-data) 2 MB não
anexo[] Múltiplos arquivos enviados como multipart/form-data. Use esta forma para anexar vários arquivos na mesma mensagem. Mesma whitelist e limites do campo anexo. file[] (form-data) 2 MB não

Envio só-texto (retrocompatível): corpo JSON contendo apenas o campo mensagem (application/json).
Envio com anexo(s): use multipart/form-data com o campo mensagem (texto obrigatório) mais o campo anexo (um arquivo) ou anexo[] (vários arquivos).

Limites do chat: 2 MB por anexo e 5 anexos por conversa (contando todos os anexos já enviados nas mensagens da conversa). Se qualquer arquivo violar a whitelist, o tamanho ou o limite de quantidade, nada é persistido (nem a mensagem, nem os arquivos) e a resposta é HTTP 400.

O tipo do pedido (envio/reversa) e a transportadora são obtidos automaticamente do próprio pedido (o número do pedido já identifica se é envio ou reversa e qual a transportadora do envio). A mensagem é sempre no sentido loja → transportadora.

Body

// Envio só-texto (application/json):
{
    "mensagem": "Bom dia, qual o status da coleta?"
}

// Envio com anexo(s) — multipart/form-data (NÃO é JSON):
//   mensagem : "Segue o comprovante em anexo"   (texto OBRIGATÓRIO)
//   anexo    : (arquivo)                         → um arquivo
//   anexo[]  : (arquivo), (arquivo)              → vários arquivos
//
// Exemplo com curl:
//   curl -X POST "https://www.allpost.com.br/api/v1/chat/665f1c2a3fdb9612b7f43261/mensagem" \
//        -H "Authorization: Bearer SEU_TOKEN" \
//        -F "mensagem=Segue o comprovante em anexo" \
//        -F "anexo[]=@comprovante.pdf" \
//        -F "anexo[]=@foto.jpg"

Response

// Envio só-texto:
{
    "id": "a1b2c3d4",
    "data": "2025-01-15T10:32:00",
    "origem": "loja"
}

// Envio com anexo(s): a resposta inclui a lista "anexos":
{
    "id": "a1b2c3d4",
    "data": "2025-01-15T10:32:00",
    "origem": "loja",
    "anexos": [
        {
            "url": "chat/anexos/665f1c2a/comprovante.pdf",
            "nome": "comprovante.pdf",
            "data": "2025-01-15T10:32:00",
            "idUsuario": 87,
            "nomeUsuario": "Atendente HelpyGo",
            "idTransportadora": null
        }
    ]
}