Bird vs Twilio
Bird vs Twilio para WhatsApp
Ambos são Meta Business Solution Providers, por isso as mensagens chegam ao WhatsApp da mesma forma e não há argumento de operador a discutir. A diferença está na superfície: a Twilio coloca o WhatsApp atrás de um prefixo na Messages API que já utiliza, e a Bird dá-lhe uma API própria.
No que a Twilio é excelente.
Onde a Bird é diferente.
No que a Twilio é excelente
Uma API para ambos os canais. Um prefixo whatsapp: no To e From envia WhatsApp pela mesma Messages API que o SMS, e o webhook de entrada mantém a estrutura que o seu handler de SMS já processa. Se já usa a Twilio para SMS, adicionar WhatsApp é um prefixo em vez de uma integração.
Quinze anos de respostas. A Messages API é o endpoint mais documentado nesta categoria, por isso quase qualquer pergunta já tem uma resposta pública, e existem bibliotecas auxiliares em mais linguagens do que as que a Bird disponibiliza.
Templates de conteúdo com um builder. Os templates são criados no Content Template Builder e referenciados por ID no envio, para que alguém sem perfil técnico possa escrever e editar a mensagem que o cliente vê sem tocar na integração.
Onde a Bird é diferente
Um agente gere todo o canal, não apenas o envio. O servidor MCP alojado da Bird disponibiliza 43 operações WhatsApp num workspace real: enviar uma mensagem, criar um template e submetê-lo à Meta para aprovação, gerir as suas versões e idiomas, registar um número e configurar o seu perfil, e consultar as estatísticas.
Uma retentativa que não pode enviar duas vezes. Um cabeçalho Idempotency-Key no envio torna a repetição segura. A Messages API da Twilio não anuncia nenhum cabeçalho de idempotência, e uma mensagem WhatsApp duplicada custa uma conversa — e a paciência do cliente.
Um body, todos os tipos de conteúdo. O pedido de envio transporta texto, template, imagem, vídeo, áudio, sticker, documento, localização, cards interativos ou de contacto como campos num único endpoint, por isso adicionar um tipo de conteúdo é um campo e não uma nova chamada.
A matriz
Capacidade a capacidade.
Ambos são Meta BSPs, por isso a entrega não é o eixo de comparação. A Twilio ganha na simetria de canais e na dimensão do seu conjunto público de respostas. A Bird ganha em retentativas seguras, num body único que suporta todos os tipos de conteúdo, e na quantidade do canal que um agente consegue operar. Leia a linha do pedido de envio em comparação com a página de SMS: a mesma arquitetura que torna o WhatsApp da Twilio fácil de adotar é o que torna o seu pedido form-encoded.
| Capability | Bird | Twilio | Who wins? |
|---|---|---|---|
| Pedido de envio | JSON para /v1/whatsapp/messages no seu host regional com uma API key bearer. O WhatsApp tem o seu próprio endpoint em vez de partilhar o de SMS. | Form-encoded PascalCase para o mesmo Messages.json usado para SMS, com um Account SID e auth token via HTTP Basic. O WhatsApp é selecionado por um prefixo whatsapp: no To e From. | |
| Retentativas seguras | Um cabeçalho Idempotency-Key no envio torna a retentativa segura. | A Messages API não anuncia nenhum cabeçalho de idempotência, por isso uma retentativa após um timeout pode enviar duas vezes. | |
| Tipos de conteúdo | Um único body de envio seleciona texto, template, imagem, vídeo, áudio, sticker, documento, localização, cards interativos ou de contacto. | O mesmo Messages create transporta um body e media URLs, com conteúdo mais rico endereçado através de um content template referenciado por ID. | |
| Criação e aprovação de templates | Os templates são criados, versionados por idioma e submetidos à Meta para aprovação via API, e cada um desses passos é também uma ferramenta no servidor MCP. | Os templates são criados no Content Template Builder e referenciados por ID no envio, sendo a consola a superfície principal. | |
| Superfície do agente | 43 operações WhatsApp no servidor alojado em mcp.bird.com, abrangendo envio, ciclo de vida de templates, registo de número e perfil, e estatísticas. | mcp.twilio.com/docs não requer conta e, nas palavras da Twilio, indexa apenas especificações públicas da API, por isso ajuda um agente a escrever código Twilio em vez de operar uma conta. | |
| Eventos de entrada e entrega | Um webhook de workspace subscrito aos tipos de evento WhatsApp que indicar, como whatsapp.delivered, whatsapp.read e whatsapp.received, entregues como JSON assinado conforme Standard Webhooks. | Um webhook no mesmo formato que SMS de entrada, com o To e From definidos como endereços WhatsApp e media em campos MediaUrl numerados. | |
| Grupos nativos WhatsApp | Grupos nativos via API: crie e liste-os, gira participantes e mensagens fixadas, aprove pedidos de adesão e faça a rotação do link de convite. Os envios endereçam um group id e são cobrados e contabilizados como envios de grupo. Ainda não está na referência pública da API nem nos SDKs, e não é uma das ferramentas do agente. | A Conversations API deles gere um chat WhatsApp multi-participante para até 50 pessoas, documentado e utilizável hoje, que o seu próprio exemplo descreve como funcionando através de um remetente WhatsApp em vez de um grupo nativo WhatsApp. A documentação WhatsApp do Programmable Messaging cobre apenas comunicação um-para-um. | |
| Ambos os canais numa única integração | SMS e WhatsApp são endpoints separados sob o mesmo URL base e a mesma chave, por isso o cliente é partilhado, mas os pontos de chamada não. | Um único endpoint envia ambos, por isso uma integração de SMS existente adiciona WhatsApp apenas mudando o prefixo de endereço. |
A mesma mensagem
Enviar um template de WhatsApp.
O prefixo é a diferença arquitetural numa única linha: Twilio endereça o WhatsApp dentro da API de SMS, Bird dá-lhe a sua própria. O envio de Bird também aceita uma Idempotency-Key, o que importa mais no WhatsApp do que no SMS porque um duplicado abre uma segunda conversa faturável.
Twilio
import twilio from "twilio";
const client = twilio(process.env.TWILIO_ACCOUNT_SID!, process.env.TWILIO_AUTH_TOKEN!);
try {
const message = await client.messages.create({
from: "whatsapp:+15557654321",
to: "whatsapp:+15551234567",
contentSid: "HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
contentVariables: JSON.stringify({ 1: "ord_8f21" }),
});
console.log(message.sid, message.status);
} catch (err) {
console.error(err);
}
Bird
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const orderId = "ord_8f21";
const { data, error } = await bird.whatsapp
.send(
{
from: "+13124495648",
to: "+15551234567",
template: {
slug: "order_shipped",
language: "en_US",
components: [{ type: "body", parameters: [{ type: "text", text: orderId }] }],
},
},
{ idempotencyKey: orderId },
)
.safe();
if (error) console.error(error.message);
else console.log(data.id, data.status);
Custo de migração
Moderado.
O envio é uma reescrita e não uma renomeação, porque os formatos diferem genuinamente: form-encoded PascalCase com um prefixo whatsapp: torna-se JSON para um endpoint de WhatsApp, e um template de conteúdo referenciado por ID torna-se um objeto de template no corpo. O seu handler de entrada também muda, do webhook em formato SMS para uma subscrição de workspace nos tipos de evento de WhatsApp.
O fator de agendamento é da Meta e não de qualquer um dos fornecedores. Um número de WhatsApp é registado numa conta empresarial e os seus templates são aprovados pela Meta, por isso planeie tempo de aprovação em ambos os lados da migração e mantenha o caminho antigo ativo até os novos templates serem aprovados.
Perguntas que as pessoas realmente fazem
Bird é uma boa alternativa a Twilio para WhatsApp?
Mudar para Bird significa reaprovar os meus templates?
O que pode um agente de IA realmente fazer com Bird WhatsApp?
Posso continuar a enviar SMS e WhatsApp numa única chamada?
Próximos passos
O guia de envio é o ponto de partida: cobre a chamada de envio e as regras de janela.