SDKs
WhatsApp na sua linguagem, do frontend ao backend
SDKs escritos à mão para TypeScript, Python, Go, PHP, Rust e C#, cada um com as mesmas 439 operações da API. Verifique webhooks, tente novamente sem duplicar envios e monte a caixa de entrada no seu frontend com um token de curta duração.
- Linguagens com SDK
- 6
- Operações tipadas em cada SDK
- 439
- Bancos de dados com adaptadores de armazenamento
- 9
- Janela da Idempotency-Key
- 24 h
No seu código
A mesma chamada em todas as linguagens.
Cada SDK é escrito à mão para a sua linguagem, com os mesmos recursos, erros e regras para tentar novamente. Repita um envio com a mesma chave e ele sai uma vez só.
import { MessagingClient } from "@polymorfa/sdk";
const messaging = new MessagingClient({
credential: { type: "apiKey", value: process.env.POLYMORFA_KEY! },
});
await messaging.messages.send(
"my-number",
{
conversation: { phoneNumber: "+15550001111" },
content: { text: "Your order has shipped." },
},
{ idempotencyKey: "order-1042-shipped" },
);import os
from polymorfa import AsyncMessagingClient, Credential, RequestOptions
credential = Credential("organization_api_key", os.environ["POLYMORFA_KEY"])
async def notify_shipped():
async with AsyncMessagingClient(credential) as client:
await client.messages.send(
"my-number",
{
"conversation": {"phoneNumber": "+15550001111"},
"content": {"text": "Your order has shipped."},
},
options=RequestOptions(idempotency_key="order-1042-shipped"),
)client, err := polymorfa.NewMessagingClient(polymorfa.Config{
Credential: polymorfa.Credential{
Kind: polymorfa.OrganizationAPIKey,
Value: os.Getenv("POLYMORFA_KEY"),
},
})
if err != nil {
return err
}
text := "Your order has shipped."
_, err = client.Messages().Send(ctx, "my-number", polymorfa.SendMessageRequest{
Conversation: polymorfa.ConversationReference{PhoneNumber: "+15550001111"},
Content: polymorfa.MessageContent{Text: &text},
}, polymorfa.RequestOptions{IdempotencyKey: "order-1042-shipped"})<?php
use Polymorfa\{Credential, MessagingClient, RequestOptions};
$client = new MessagingClient(Credential::organizationApiKey(getenv('POLYMORFA_KEY')));
$client->messages->send('my-number', [
'conversation' => ['phoneNumber' => '+15550001111'],
'content' => ['text' => 'Your order has shipped.'],
], new RequestOptions(idempotencyKey: 'order-1042-shipped'));use polymorfa_sdk::models::{ConversationReference, SendMessageRequest};
use polymorfa_sdk::{ClientOptions, Credential, MessagingClient, RequestOptions};
let key = std::env::var("POLYMORFA_KEY").expect("POLYMORFA_KEY");
let client = MessagingClient::new(Credential::organization_api_key(key)?, ClientOptions::default())?;
let request = SendMessageRequest::text(
ConversationReference::phone("+15550001111"),
"Your order has shipped.",
);
let options = RequestOptions {
idempotency_key: Some("order-1042-shipped".into()),
..Default::default()
};
client.messages().send("my-number", &request, options).await?;using Polymorfa.Sdk;
using var client = new MessagingClient(
Credential.OrganizationApiKey(Environment.GetEnvironmentVariable("POLYMORFA_KEY")!));
await client.Messages.SendAsync(
"my-number",
new SendMessageRequest(
new ConversationReference(PhoneNumber: "+15550001111"),
new TextContent("Your order has shipped.")),
new RequestOptions { IdempotencyKey = "order-1042-shipped" });curl https://api.polymorfa.com/messaging/my-number/messages/send \
-H "Authorization: Bearer $POLYMORFA_KEY" \
-H "Idempotency-Key: order-1042-shipped" \
-H "Content-Type: application/json" \
-d '{
"conversation": { "phoneNumber": "+15550001111" },
"content": { "text": "Your order has shipped." }
}'Frameworks
Cabe na stack que você já usa.
O código do servidor chama a API com a sua chave. O código do frontend recebe um token de cliente de curta duração e os mesmos componentes em todas as linguagens.
TypeScript
@polymorfa/sdk- No seu servidor
- Node
- Runtimes de edge
- Next.js
- Express
- Hono
- No seu frontend
- Navegador
- React
- Web Components
Python
polymorfa-sdk- No seu servidor
- FastAPI
- Django
- No seu frontend
- Django templates
- HTMX
- Inertia
Go
github.com/polymorfa/sdks/packages/go- No seu servidor
- net/http
- Gin
- Echo
- No seu frontend
- templ
- HTMX
PHP
polymorfa/sdk- No seu servidor
- Laravel
- Symfony
- No seu frontend
- Blade
- Livewire
- Inertia
Rust
polymorfa-sdk- No seu servidor
- Axum
- Actix
- No seu frontend
- Leptos
- Yew
C#
Polymorfa.Sdk- No seu servidor
- ASP.NET Core
- No seu frontend
- Blazor WebAssembly
- MAUI
Frontend
Lance a caixa de entrada sem expor uma chave.
Os SDKs recusam credenciais de servidor em builds para navegador e WebAssembly. Seu servidor emite um token de cliente para o usuário conectado, limitado a um número.
Produção
Padrões seguros em todos os SDKs.
Assinaturas verificadas antes da leitura, novas tentativas que nunca duplicam um envio e erros tipados com código e ID da requisição.
Seus dados
Guarde os dados do WhatsApp no seu próprio banco de dados.
Armazene chats, mensagens e contatos onde você quiser. Mídia e histórico vão direto do WhatsApp para o seu código, então não geram custo de armazenamento.
Superfície da API
O que os SDKs chamam por você.
Cada método do SDK corresponde a uma rota REST documentada. A referência mostra cada uma com um exemplo em cURL.
Métodos do SDK
- POST
/messages.sendmessaging/ {number}/ messages/ send - POST
/clientTokens.mint, para código no navegadorplatform/ client-tokens - GET
/events.stream, retoma de um cursorplatform/ projects/ {project}/ events/ stream - GET
/chats.list, para histórico armazenadomessaging/ {number}/ chats - GET
/media.download, para mídia armazenadamessaging/ media/ {id} - POST
/webhooks.test, envia uma entrega de testeplatform/ webhooks/ {id}/ tests
Eventos de webhook tipados
- Eventomessage.receivedAlguém escreveu para o número
- Eventomessage.ackConfirmações de entrega e leitura
- Eventohistory.syncChegou histórico de um número
- Eventocall.receivedUma chamada de WhatsApp está tocando
- Eventosession.statusO número conectou ou desconectou
- Eventocampaign.recipient_repliedUm destinatário de campanha respondeu
Comece com um número grátis
Seu primeiro número real é grátis. Adicione mais números no Pay-As-You-Go.