Bird vs Prelude
Bird vs Prelude para Verify
Prelude é construído em torno de um veredito de risco sobre o qual se pode ramificar, e Bird não tem equivalente. As duas APIs são, de resto, suficientemente semelhantes para que a migração seja sobretudo uma renomeação. Esta página é sobre qual destes dois factos importa mais para o que está a construir.
Em que Prelude é excelente.
Em que Bird é diferente.
Em que Prelude é excelente
Um veredito sobre o qual pode ramificar. A chamada de criação aceita sinais de IP, dispositivo e fingerprint e responde com um veredito de encaminhamento de success, retry, challenged, blocked ou shadow_blocked, com uma razão quando recusa. A criação de Bird responde com a verificação em si: não há veredito, não há objeto de sinais nem shadow block. Um registo que dependa dessa decisão tem de a tomar antes de chamar Bird.},{
Canais que Bird não alcança. Chamada de voz, RCS, Viber, Zalo e autenticação silenciosa de rede, em mais de 230 países. Ambas as plataformas suportam SMS, WhatsApp e Telegram, por isso a diferença são esses cinco canais e não todo o conjunto: um número que Prelude alcançava via Viber ou Zalo recorre aqui a SMS, o que é uma questão de taxa de entrega que vale a pena medir num piloto em vez de descobrir a volume total.
A mensagem e o fallback são seus para moldar. Um template com variáveis, um locale, o seu próprio sender ID e um código personalizado são todos por pedido, e max_auto_fallbacks e force_challenge afinam a escalação por chamada. Em Bird, o texto do código é de Bird e o fallback é o plano de canal do país; os remetentes são configurados por canal em vez de por pedido, e apenas o de email pode ser um endereço seu.
Em que Bird é diferente
Uma verificação falhada diz que tipo de falha foi. Prelude junta um código errado e tentativas esgotadas num único estado de falha. Bird responde com uma razão de incorrect_code, expired ou attempts_exhausted, e retorna attempts_remaining ao lado, para que o ecrã possa dizer ao utilizador quantas tentativas restam sem que tenha de as contar.
Os eventos de entrega são uma subscrição de workspace, assinada. Prelude envia para um callback_url que define por verificação. Os endpoints de Bird são registados uma vez, cada um subscrito aos tipos de evento que pretende, e cada entrega é assinada segundo Standard Webhooks, pelo que o URL sai do corpo do pedido e o recetor tem algo para verificar.
Um agente pode executar o fluxo. O servidor MCP alojado de Bird dá a um agente três ferramentas de verificação contra um workspace real: iniciar uma, verificar um código e avançar para o canal seguinte. Não pode reconfigurar a política por trás delas, o que é deliberado e não uma omissão.
A matriz
Capacidade a capacidade.
As duas APIs têm uma forma semelhante, por isso a maioria das linhas é equilibrada e as diferenças são estreitas. Leia a linha de tentativas seguras em comparação com a página do Twilio Verify: é uma vitória de Bird em ambos, porque nenhum dos creates documenta uma chave de idempotência. A camada de risco de Prelude é uma concessão acima e não uma linha, porque Bird não oferece nada com que a comparar.
| Capability | Bird | Prelude | Who wins? |
|---|---|---|---|
| Pedido de criação | JSON para /v1/verify/verifications com uma chave bearer. O destinatário é to.phone_number ou to.email, e chamar create novamente para um destinatário ativo faz retry em vez de iniciar uma nova verificação. | JSON para um endpoint de verificação v2 com uma chave bearer. O destinatário é target.type e target.value, e chamar create novamente para um destinatário ativo faz retry da mesma forma. | |
| Tentativas seguras | Um cabeçalho Idempotency-Key no create torna uma tentativa segura. | A referência do create deles não documenta chave de idempotência nem cabeçalho próprio, por isso uma tentativa após timeout pode emitir um segundo código. dispatch_id não o é: Prelude define-o como o identificador do dispatch que veio do SDK de front-end, que é o que permite à camada de fraude associar os sinais capturados a esta verificação. | |
| O que uma verificação falhada lhe diz | success é false com uma razão de incorrect_code, expired ou attempts_exhausted, e attempts_remaining ao lado. | Um status de failure abrange tanto um código errado como tentativas esgotadas, com expired_or_not_found como valor separado. Os dois tipos de falha não são distinguidos. | |
| Canais por onde um código pode chegar | Email, SMS, WhatsApp e Telegram. Voz está indicada como Rolling out em vez de disponível. | O mix de canais publicado inclui SMS, voz, RCS, WhatsApp, Telegram, Viber, Zalo e autenticação silenciosa de rede, em mais de 230 países, com fallback automático entre eles. | |
| Eventos de entrega | Um webhook de workspace subscrito aos tipos de evento de verify que indicar, como verify.verification.verified e verify.attempt.delivered, assinado segundo Standard Webhooks. | Um callback_url definido por verificação no pedido de criação, para que o destino viaje com cada chamada. | |
| Controlo de fallback | O plano de canal do país define a ordem e é percorrido automaticamente, com um temporizador de entrega por tentativa a avançá-lo quando não chega um estado de entrega. Uma chamada de next-channel também avança uma verificação a pedido. | max_auto_fallbacks e force_challenge afinam a escalação no próprio pedido de criação. | |
| Servidor MCP alojado | Três ferramentas de verificação no servidor alojado em mcp.bird.com: iniciar uma verificação, verificar um código e avançar para o canal seguinte. A configuração não está entre elas. | Prelude publica SDKs de backend para Node.js, Python, Go, Kotlin/Java, Ruby, PHP e C#, e SDKs de frontend para Web, Android, iOS, React Native e Flutter, pelo que a história do agente é uma biblioteca que o seu próprio runtime chama. | |
| Comprimento do código | options.code_length no create, caso contrário o padrão do workspace. | options.code_size no create. |
A mesma verificação
Iniciar uma verificação.
As estruturas são semelhantes o suficiente para que isto seja, na sua maioria, uma renomeação: target passa a to e code_size passa a code_length. O que não tem equivalente em Bird é o objeto signals, o dispatch_id entre os elementos que o alimentam, e não há verdict na resposta para ramificar. O que aparece apenas do lado do Bird é o header Idempotency-Key.
Prelude
const signupId = crypto.randomUUID();
const response = await fetch("https://api.prelude.dev/v2/verification", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PRELUDE_API_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
target: { type: "phone_number", value: "+15551234567" },
dispatch_id: signupId,
options: { code_size: 6 },
}),
});
const verification = await response.json();
console.log(verification.id, verification.status);
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const signupId = crypto.randomUUID();
const { data, error } = await bird.verify.verifications
.create(
{
to: { phone_number: "+15551234567" },
options: { code_length: 6 },
},
{ idempotencyKey: signupId },
)
.safe();
if (error) console.error(error.message);
else console.log(data.id, data.status);
Custo de migração
Baixo, a menos que use a camada de risco.
Ambas as APIs baseiam-se no destinatário em vez de num ID de verificação, por isso as chamadas migram quase tal como estão: target.value passa a to.phone_number ou to.email, code_size passa a code_length, e o callback_url por verificação torna-se um webhook de workspace subscrito aos tipos de evento verify que indicar. dispatch_id não tem para onde ir, porque pertence à camada de risco abaixo e não à mecânica da chamada de create, e o create do Bird aceita um header Idempotency-Key que o do Prelude não documenta.
A camada de risco é a parte que não é de todo uma migração direta. Se ramifica com base no verdict do Prelude, envia signals com o create, ou depende de um shadow block, não existe nada do lado do Bird para onde mover essa lógica e a decisão tem de acontecer antes da chamada. Dimensione essa lacuna primeiro, porque tudo o resto aqui é uma tarde de trabalho.
Perguntas que as pessoas realmente fazem
O Bird é uma boa alternativa ao Prelude?
O que acontece aos signals e ao verdict do Prelude?
Perco retries seguros ao migrar?
Que canais perco?
Próximos passos
O guia de migração é o ponto de partida: mapeia a API campo a campo.