API · Atualizado em 12/10/2026
Compatibilidade com a Blip: comandos e envelopes
Use comandos, mensagens e notificações no formato da Blip na API do Pipe, com Authorization Key, e veja o que é igual, o que muda e o que não existe.
Se você já tem uma integração com a Blip, boa parte dela funciona no Pipe trocando o endereço e a chave. A API aceita o envelope de comando da Blip e entende os caminhos mais usados de tickets, contatos, contexto, agendamentos e relatórios.
Quando usar
- Para migrar uma integração que hoje chama
POST https://{contrato}.http.msging.net/commands. - Para manter um cliente HTTP ou SDK que já fala o formato de comandos da Blip.
Pré-requisitos
- Uma chave de fluxo criada com Compatível com a Blip. Ela traz os escopos padrão mais
comandos:executar,contexto:escrever,relatorios:lereatendentes:escrever. Veja Autenticação e chaves de API. - Cada comando exige, além de
comandos:executar, o escopo da rota que ele usa.
Rotas
| Método | Rota | Escopo | O que faz |
|---|---|---|---|
| POST | /commands | comandos:executar | Executa um comando no formato da Blip, com resposta completa no envelope |
| POST | /v1/commands | comandos:executar | Os mesmos comandos, com erros em HTTP padrão do Pipe |
| POST | /messages | mensagens:escrever | Envia uma mensagem de atendente a um ticket ativo, ou um modelo |
| POST | /notifications | mensagens:ler | Registra uma notificação sobre uma mensagem |
As três rotas da raiz ficam no mesmo endereço da API pública (https://http.pipebr.app). Só valem chaves de fluxo ou de roteador, com Bearer ou Key.
Passo a passo: primeiro comando
- Monte o cabeçalho
Keycom o identificador do fluxo e a chave:
KEY=$(printf %s "meu-fluxo:$PIPE_CHAVE" | base64 -w0)
- Envie um comando de consulta:
curl -s -X POST https://http.pipebr.app/commands \
-H "Authorization: Key $KEY" \
-H "Content-Type: application/json" \
-d '{"id": "1", "to": "postmaster@desk.msging.net", "method": "get", "uri": "/teams"}'
- A resposta traz o envelope completo, com
status: "success"e oresource:
{
"id": "1",
"from": "postmaster@desk.msging.net",
"to": "meu-fluxo@msging.net",
"method": "get",
"status": "success",
"type": "application/vnd.lime.collection+json",
"resource": { "total": 1, "items": [ { "...": "dados da equipe" } ] },
"metadata": { "#command.uri": "lime://meu-fluxo@msging.net/teams" }
}
O conteúdo de resource segue o formato dos recursos da Blip. Quando falha, a resposta traz status: "failure" e reason com code e description, e o detalhe em português fica em metadata["#pipe.error"].
Códigos de falha
| Código | Significado |
|---|---|
| 1 | Comando que existe na tabela do motor mas não é executado por HTTP (no perfil /v1/commands, também URI desconhecida) |
| 62 | URI que nenhuma rota atende (só em /commands) |
| 63 | URI atendida, mas com um método que ela não aceita (só em /commands) |
| 64 | Argumento inválido, como campo desconhecido num filtro |
| 66 | Não permitido: escopo ausente, conta em somente leitura ou id de envelope repetido com outro conteúdo |
| 67 | Não encontrado, inclusive tudo que está fora do fluxo da chave |
Diferenças entre /commands e /v1/commands
| Situação | POST /commands (estilo Blip) | POST /v1/commands |
|---|---|---|
| Escopo ausente | HTTP 200, failure 66 | HTTP 403 without_scope |
Envelope sem id, method ou uri | HTTP 400 sem corpo | HTTP 200 com failure 64 |
| Chave da organização | 401, em Bearer e em Key | Vale com Bearer |
| Chave de roteador e o Desk | Não vê os tickets dos serviços | Vê o Desk de todos os serviços |
Repetição pelo id do envelope | Sim, por 24 horas | Não |
Mensagens e notificações
POST /messages envia texto para o ticket ativo do contato, como mensagem do sistema, ou um modelo aprovado:
curl -s -X POST https://http.pipebr.app/messages \
-H "Authorization: Key $KEY" \
-H "Content-Type: application/json" \
-d '{"id": "msg-1", "to": "5511955550101%40wa.gw.msging.net@desk.msging.net", "type": "text/plain", "content": "Seu pedido saiu para entrega."}'
| Situação | Resposta |
|---|---|
| Aceita | HTTP 202, sem corpo |
| Recusada por regra (sem ticket ativo, janela fechada, texto acima de 4096, sem escopo, modelo não aprovado) | HTTP 200 com notificação failed e reason.code. Nada é enviado |
| Envelope malformado | HTTP 400 |
| Sem chave ou chave inválida | HTTP 401 |
Limite excedido (10 por segundo em /messages, 20 em /notifications) | HTTP 429 com Retry-After |
| Bot falando com o cliente fora de ticket | HTTP 501 |
Modelos no formato application/json com type: "template" seguem a mesma regra de mensagens ativas. Mídia por link (media-link) é recusada com 64: use POST /v1/attachments. O id do envelope repetido com o mesmo conteúdo em 24 horas devolve a resposta guardada, sem enviar de novo.
POST /notifications aceita os eventos accepted, dispatched, received, consumed e failed. Ele não altera estado de mensagem no Pipe: o evento de uma mensagem do seu fluxo é aceito (202) e fica só nos registros.
Comandos suportados
Todos exigem comandos:executar, mais o escopo da coluna.
| Método | Destino e URI | Escopo |
|---|---|---|
| get | desk /tickets, /tickets/{id} | conversas:ler |
| get | desk /tickets/{id}/messages, core /threads/{identity} | mensagens:ler |
| get | desk /tickets/history/metadata, /monitoring/*, /analytics/reports/* | relatorios:ler |
| set | desk /tickets (abrir), /tickets/change-status, /tickets/{id}/close, /tickets/{id}/transfer, /tickets/{id}/change-tags | conversas:escrever |
| get | desk /teams, /attendance-queues, /rules, /priority-rules | filas:ler |
| get | desk /attendants | atendentes:ler |
| set | desk /attendants/change-status | atendentes:escrever |
| get | desk /tags, /tags/active | conversas:ler |
| get | desk /replies | mensagens:ler |
| get, set, merge | crm ou core /contacts | contatos:ler ou contatos:escrever |
| get, set, delete | builder ou core /contexts/{identity}/{variável} | contatos:ler ou contexto:escrever |
| get, set, delete | scheduler /schedules | mensagens:ler ou mensagens:escrever |
| get | wa.gw /message-templates | mensagens:ler |
Escritas em cadastros (/tags, /replies, /attendance-queues, /attendants, /rules, /priority-rules) são recusadas com failure 62 e nada é gravado.
O que não existe como comando
Campanhas da Blip (activecampaign), listas de transmissão (broadcast), event-track, /buckets, /resources, túneis, rastreador de cliques, chaves da conta e os relatórios attendancetime e tags respondem failure 62 ou 1. No Pipe, campanhas têm rota própria: veja Mensagens ativas e campanhas.
Resultado esperado
Sua integração antiga chama o Pipe com o mesmo envelope e recebe respostas no mesmo formato, e você sabe quais comandos precisam ser trocados por rotas /v1.
Problemas comuns
- 401 na raiz: a chave é da organização, ou o identificador não é o do fluxo dono da chave.
- HTTP 200 com
failure66: faltacomandos:executarou o escopo da rota, ou a conta está em somente leitura. Crie uma chave com Compatível com a Blip. failure67 para um ticket que existe: ele é de outro fluxo, ou a chave é de roteador e pediu o Desk de um serviço.failure62: a URI não é atendida por nenhuma rota. Confira a tabela acima.
Boas práticas
- Use um
idde envelope novo e estável por operação: ele protege contra repetição. - Migre aos poucos para
/v1as chamadas que mais usa. Os erros ficam mais claros. - Leia as notas de versão ao atualizar.
Próximos passos
- Compare com as rotas
/v1em API do Pipe: visão geral. - Veja o que ainda falta em Limitações da API.
Perguntas frequentes
Posso reaproveitar minha integração da Blip?
Em boa parte, sim. A rota POST /commands na raiz do endereço aceita o envelope de comando da Blip com Authorization: Key, e POST /messages e POST /notifications aceitam envelopes de mensagem e notificação. Troque o endereço e a chave.
Que chave devo usar?
Uma chave de fluxo criada com a opção Compatível com a Blip. A chave da organização não vale na raiz, nem no formato Key.
Por que um comando recusado volta com HTTP 200?
Na raiz, o Pipe imita a Blip: recusas por escopo e por conta em somente leitura voltam com HTTP 200 e status failure com reason.code 66. Em /v1/commands, o escopo ausente é um 403 normal.
Tudo da Blip existe no Pipe?
Não. Campanhas da Blip, listas de transmissão, buckets, resources e túneis, entre outros, não existem como comando. Esses caminhos respondem failure 62 ou 1.
Esse artigo foi útil?
Obrigado pelo retorno!