Filtre, reduza e remodele uma requisição,
sem escrever código.
Um pipeline é uma lista curta de etapas: descartar uma requisição que não corresponda, remover ou adicionar campos, remontar o corpo a partir de um template, definir headers. Monte um no console ou pela API, teste-o, mantenha as versões dele, execute-o pela API ou referencie-o pelo id a partir do produto que envia.
Monte, teste, depois execute onde for preciso.
Um pipeline é um documento JSON, verificado por inteiro ao ser salvo. Nenhuma etapa roda código seu, então nenhuma consegue entrar em loop, esperar ou fazer chamadas externas.
Montar um pipeline
Adicione etapas no formulário do console, cole-as em JSON ou comece a partir de um template: mensagens do Slack, do Discord e do Teams, Keep only these fields, Drop personal data. Um documento que nunca conseguiria rodar é recusado ao ser salvo, com a etapa, o caminho e o motivo.
Testar
Execute o que está no editor numa requisição que você colar e veja o corpo e os headers que ele enviaria, a etapa que a descartou ou por que falhou. Um teste não salva nada e não entra em nenhuma contagem.
Manter as versões
Salvar conteúdo novo cria uma versão, e uma versão nunca muda. Salvar o mesmo conteúdo de novo não cria nenhuma, e restaurar uma versão antiga é salvar o conteúdo dela de novo.
Executar
Chame a API com uma requisição e leia o que o pipeline fez, ou referencie o pipeline pelo id a partir do Webhooks, que o executa no próprio processo antes de cada entrega.
O Transforms não envia nada por conta própria e não guarda nada do que processa. Ele não é um relay: quem entrega eventos é o Webhooks, quem encaminha requisições é o Request Bins, e o Transforms executa o pipeline e responde o que ele fez.
Seis etapas, que rodam na ordem em que você as escreve.
Elas cobrem o que a maioria das transformações existe para fazer. Um pipeline não tem loops, relógio nem rede, então o mesmo pipeline sempre faz a mesma coisa com a mesma requisição.
Filter
Mantenha uma requisição só se ela corresponder, ou descarte-a se corresponder. Teste campos, objetos aninhados e arrays, com operadores como $gte, $in e $contains, e combine-os com $and, $or e $not.
Remove fields
Remova campos do corpo pelo caminho. * corresponde a um nível e ** a qualquer profundidade, então **.email remove todos os campos email, onde quer que estejam.
Set fields
Adicione ou sobrescreva campos com valores de uma pequena linguagem de templates: {{ data.id }} insere um valor como texto, e {"$ref": "data.amount"} o insere com o tipo dele.
Reshape the body
Substitua o corpo por um que você escreve, com filtros como money(), date(), truncate() e join(). É assim que um template monta uma mensagem do Slack, do Discord ou do Teams.
Headers
Defina, remova e renomeie headers, com valores de template. Uma credencial não entra aqui, onde uma leitura do pipeline a mostraria: para isso serve a próxima etapa.
Credential
Indique que um bearer token, autenticação básica ou uma chave de API vai na requisição, e de qual slot essa credencial vem. As etapas de credencial rodam por último, então nenhuma outra etapa consegue ler uma credencial.
Templates
Mensagens do Slack, do Discord e do Teams que o texto do evento não consegue formatar nem fechar antes da hora, Keep only these fields e Drop personal data. Salvar um deles cria uma cópia que é sua.
Limites fixos
20 etapas, um corpo de 256 KiB e 100,000 valores lidos ou copiados numa execução, em todos os planos. Acima de um limite, a execução falha com um motivo claro. Ela nunca trava.
Envie uma requisição. Leia o que o pipeline fez.
Este pipeline mantém as faturas pagas de $1,000 ou mais, remove o e-mail do cliente e qualquer número de telefone, e adiciona dois campos e um header. A execução responde com o resultado e não guarda nada dele.
O pipeline
{
"version": 1,
"steps": [
{ "filter": { "type": "invoice.paid", "data": { "amount": { "$gte": 100000 } } } },
{ "drop": ["data.customer.email", "**.phone"] },
{ "set": {
"event_type": "{{ type }}",
"amount_display": "{{ data.amount | money(data.currency) }}"
} },
{ "headers": { "set": { "X-Event-Type": "{{ type }}" } } }
]
}A execução
# Execute o pipeline salvo numa requisição
curl -X POST "https://transforms.nimbusnexus.net/v1/pipelines/$PIPELINE_ID/run" \
-H "Authorization: Bearer $TRANSFORMS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"body":{"type":"invoice.paid","data":{"id":"in_42","amount":150000,"currency":"usd","customer":{"name":"Ana Silva","email":"[email protected]","phone":"+1 202 555 0142"}}}}'A resposta
{
"status": "ok",
"version": 3,
"body": {
"type": "invoice.paid",
"data": {
"id": "in_42",
"amount": 150000,
"currency": "usd",
"customer": { "name": "Ana Silva" }
},
"event_type": "invoice.paid",
"amount_display": "1,500.00 USD"
},
"body_changed": true,
"headers": { "X-Event-Type": "invoice.paid" },
"query": {},
"step": null,
"note": null,
"reason": null,
"error": null,
"duration_ms": 0.4
}O Transforms não guarda credenciais. Quem guarda é o produto que envia.
Um pipeline pode dizer que uma credencial vai na requisição, e uma leitura do pipeline não mostra nenhum valor, porque ele não tem nenhum. Para enviar uma, execute o pipeline por referência a partir do produto que envia.
Um slot, não um valor
Uma etapa de credencial diz que tipo de credencial vai para onde e indica um slot pelo nome. O documento traz esse nome e nada mais, então um pipeline lido de volta nunca mostra uma credencial.
Preenchido por quem envia
Um produto que executa o pipeline por referência associa o slot a um segredo no próprio armazenamento, sob a própria chave, e o envia às próprias URLs. Fora desse produto, o slot não significa nada.
Aqui ela aparece mascarada
O Test e a API de execução mostram o que a etapa adicionaria, como Authorization: Bearer ••••. Nenhum dos dois consegue enviar uma credencial, porque o Transforms não tem nenhuma para enviar.
Onde ele roda aparece primeiro
A leitura de um pipeline lista os produtos que o executam por referência e a versão que cada um executa. Uma versão nova com uma etapa de credencial, ou a exclusão do pipeline, precisa indicar cada um deles antes.
As tarefas para as quais ele existe, e nenhuma precisa de script.
A API de um parceiro espera um bearer token ou uma chave de API. Uma etapa de credencial diz isso, e o produto que envia a preenche a partir dos próprios segredos.
Um CRM quer três campos, com os nomes dele. Uma etapa de remodelagem monta exatamente esse corpo a partir do evento, mantendo o tipo de cada valor.
Uma inscrição faz a correspondência pelo tipo do evento. Um filtro também lê o payload, então “faturas pagas de $1,000 ou mais” é uma etapa só.
Cada template é uma etapa de remodelagem e um header. Ele funciona com qualquer evento, e nada no evento consegue formatar a mensagem, mencionar alguém ou fechar um bloco de código antes da hora.
Remova dados pessoais em qualquer profundidade antes que um fornecedor de analytics os veja, e aproveite para adicionar o tipo do evento a um header.
Referencie o pipeline pelo id a partir do Webhooks. Os endpoints executam a versão atual dele no próprio processo do Webhooks, e cada versão nova chega a eles sem mudar nenhum endpoint.
Pipelines em todos os planos, inclusive no Free.
Todo plano tem as seis etapas, os templates, o Test, a API de execução e a execução por referência. Um plano pago comporta mais pipelines e slots de credencial, mantém mais versões e executa mais por minuto.
Free
O suficiente para montar, testar e executar os seus primeiros pipelines.
$0
- 5 pipelines
- 5 slots de credencial
- 10 versões mantidas por pipeline
- 60 execuções por minuto
Starter
Para um produto que executa pipelines em produção.
$9/ mês
$86.40 / ano — economize 20%
- 25 pipelines
- 25 slots de credencial
- 25 versões mantidas por pipeline
- 600 execuções por minuto
Pro
Mais pipelines, mais versões, espaço para um time inteiro.
$29/ mês
$278.40 / ano — economize 20%
- 100 pipelines
- 100 slots de credencial
- 50 versões mantidas por pipeline
- 3,000 execuções por minuto
Custom
Compromissos de volume, limites sob medida e condições à altura.
Sob consulta
- 1,000 pipelines
- 1,000 slots de credencial
- 100 versões mantidas por pipeline
- 12,000 execuções por minuto
- Exige uma conta de time
As execuções são contadas, não cobradas, e o console e GET /v1/usage mostram as do mês. Uma execução acima do limite por minuto do plano responde 429 com o tempo de espera, e o Test divide esse limite. Uma execução num produto que referencia o pipeline conta no uso desse produto. Uma versão que um produto fixa é mantida além do número do plano, assim como as cinco versões anteriores que um produto foi visto executando mais recentemente nos últimos 30 dias.
- As seis etapas
- Templates para Slack, Discord e Teams
- Keep only these fields, Drop personal data
- Teste antes de salvar
- Versões que nunca mudam
- A API de execução
- Execução por referência a partir do Webhooks
- Isolamento por workspace
Antes de montar o seu primeiro pipeline.
Relacionado
Para onde ir a seguir
Monte um pipeline e veja o que ele faz com uma requisição.
O Free inclui 5 pipelines e 60 execuções por minuto, com todas as etapas e todos os templates. Experimente um no playground primeiro, sem conta.