Programa Builders

Construa com a gente por um mês inteiro. Uso e add-ons ilimitados, chamadas semanais e seu próprio canal no Slack.

Saiba mais
Polymorfa

Funções

Código que roda onde seus números estão

As Funções rodam o seu TypeScript ou JavaScript no servidor da Polymorfa que guarda os seus números e mensagens hospedadas. Sem ida e volta até um servidor seu, e os dados das mensagens ficam onde estão.

Tempo de execução padrão, até 30 s
10 s
Memória em cada execução
256 MB
Invocações por mês em um número Pro
1.000.000
Corpos de requisição ou resposta guardados
0

Ao lado dos seus números

Sem ida e volta até o seu servidor

Uma etapa de fluxo encaminhada para o seu servidor atravessa a internet e espera a resposta. Uma função responde do servidor que já guarda o número e as mensagens hospedadas dele.

Encaminhada para o seu servidor. A requisição sai da Polymorfa, chega ao seu endpoint HTTPS e volta antes de o WhatsApp mostrar a próxima tela.
Executada como função. Descriptografe, execute e responda em um só servidor. O seu código recebe a requisição sem que ela atravesse a internet.

Fluxos do WhatsApp

Endpoints de fluxo, chaves incluídas

O WhatsApp criptografa cada troca de dados de um fluxo. A Polymorfa guarda a chave do número, descriptografa cada requisição e nunca armazena o conteúdo.

Um endpoint de dados gerenciado
  • Execute uma função com o JSON da requisição
  • Ou encaminhe para a sua URL HTTPS, assinada
  • Ou traga a sua própria chave, e a Polymorfa nunca descriptografa
Chaves com rotação segura. Uma rotação registra no WhatsApp uma nova chave RSA de 2048 bits para o número. A chave anterior continua descriptografando por 24 horas.
Ler o guia de fluxos

Isolamento

Um sandbox novo a cada execução

Cada invocação inicia um sandbox novo, sem rede própria. As requisições de saída passam por um broker que só permite as origens HTTPS que você listar.

Nada compartilhado entre execuções. Cada execução recebe 256 MB de memória e um sistema de arquivos somente leitura, e o sandbox termina junto com ela.
Só as origens que você permite. As requisições chegam a origens HTTPS públicas listadas no deploy. Endereços IP, portas personalizadas e hosts da Polymorfa são recusados.
Assinado, e executado uma vez. O runtime verifica a assinatura de cada artefato e invocação, e recusa uma invocação que já executou.

Deploy

Faça o deploy, teste e depois promova

Os deploys são imutáveis e fixam as versões dos segredos. Teste um e depois promova; chamadas fixadas em um deploy mais antigo continuam usando esse deploy.

Deploys imutáveis. Cada deploy guarda o hash do código-fonte. A promoção confere a revisão que você viu por último, então duas pessoas nunca sobrescrevem o trabalho uma da outra.
Segredos só de escrita. Os valores são criptografados e nunca mais aparecem. Uma nova versão não mexe nos deploys em execução; revogar uma versão impede novas execuções que a usem.
Ações sem código. Encadeie uma requisição, uma condição e uma resposta sem escrever uma função. Entradas, segredos e resultados anteriores preenchem os valores.
Recibos, não cargas. Cada execução registra o gatilho, o resultado e o tamanho da resposta. Requisições, respostas e a saída de log não são guardadas.

No seu código

Uma etapa de fluxo em vinte linhas

Escreva o handler, faça o deploy com os segredos e as origens permitidas e depois promova. O SDK e a CLI cobrem as mesmas operações do Console.

table-availability.ts
import { defineFunction } from "@polymorfa/functions";

export default defineFunction({
  async handler(request, event, ctx) {
    if (ctx.trigger.kind !== "flow") {
      return new Response("Not found", { status: 404 });
    }

    // The Flow data exchange, already decrypted.
    const { data } = await request.json();

    const res = await fetch(`https://api.acme.com/tables?date=${data.date}`, {
      headers: { authorization: `Bearer ${ctx.env.ACME_API_KEY}` },
      signal: ctx.signal,
    });
    const { times } = await res.json();

    return Response.json({ screen: "PICK_TIME", data: { times } });
  },
});

Planos e limites

Invocações incluídas em todo número

As franquias renovam todo mês. Acima delas, as invocações custam 100 créditos por milhão.

Invocações de Função incluídas por número a cada mês
NúmeroInvocações por mês
Free1.000
Standard250.000
Pro1.000.000
Limites de cada execução de Função
LimiteValor
Tempo de execução10 s por padrão, no máximo 30 s
Tamanho da resposta1 MiB
Memória256 MB
Requisições de saída10 por execução
Código-fonte256 KiB
Origens permitidas32 por deploy

Superfície da API

A API de Funções

Gerencie Funções, deploys, segredos e invocações pela Platform API. Os endpoints e as chaves de fluxo ficam ao lado.

Funções

  • POST/platform/functionsCria uma Função
  • POST/platform/functions/{functionId}/deploymentsFaz o build de um deploy imutável
  • PUT/platform/functions/{functionId}/promotionPromove um deploy
  • POST/platform/functions/{functionId}/secretsAdiciona uma versão de segredo
  • POST/platform/functions/{functionId}/invocationsExecuta com uma chave de idempotência
  • GET/platform/functions/{functionId}/invocationsLê os recibos

Fluxos do WhatsApp

  • PUT/platform/flows/{flowId}/endpointExecuta uma função, encaminha ou vai direto
  • GET/platform/flows/{flowId}/endpoint/receiptsRecibos do endpoint de dados
  • GET/platform/flow-encryption-keysA custódia da chave de fluxo de um número
  • POST/platform/flow-encryption-keys/rotateFaz a rotação da chave gerenciada

Comece com um número grátis

Seu primeiro número real é grátis. Adicione mais números no Pay-As-You-Go.