SDKs oficiales
Para no armar los requests HTTP a mano, Arplyx ofrece SDKs oficiales que envuelven la API con tipos, manejo de errores e idempotencia. Hacen lo mismo que la API REST; elegí el de tu lenguaje.
TypeScript / Node.js — @arplyx/sdk
npm install @arplyx/sdk
import { Arplyx, ArplyxError } from '@arplyx/sdk';
const arplyx = new Arplyx({ apiKey: process.env.ARPLYX_API_KEY! });
const msg = await arplyx.sendMessage({
externalId: 'pedido-10045',
to: '+5491155551234',
text: 'Tu pedido fue confirmado.',
channel: 'whatsapp_direct',
whatsappAccountId: 'TU_ACCOUNT_ID',
});
console.log(msg.messageId, msg.status);
Funciona con ESM y CommonJS. Requiere Node.js 18+.
Python — arplyx
pip install arplyx
from arplyx import Arplyx
client = Arplyx(api_key="ak_live_...")
msg = client.send_message(
external_id="pedido-10045",
to="+5491155551234",
text="Tu pedido fue confirmado.",
channel="whatsapp_direct",
whatsapp_account_id="TU_ACCOUNT_ID",
)
print(msg.message_id, msg.status)
Requiere Python 3.8+.
Qué exponen
Ambos SDKs cubren las mismas operaciones que la API:
| Operación | TypeScript | Python |
|---|---|---|
| Enviar mensaje (texto o plantilla) | sendMessage(...) |
send_message(...) |
| Enviar broadcast a una lista | sendBroadcast(...) |
send_broadcast(...) |
| Listar cuentas de WhatsApp | listWhatsappAccounts() |
list_whatsapp_accounts() |
| Consultar estado de un mensaje | getMessage(id) |
get_message(id) |
| Listar mensajes con filtros y cursor | listMessages({...}) |
list_messages(...) |
| ¿Este número ya me escribió? | getInboundSender(phone) / lookupInboundSenders({...}) |
get_inbound_sender(phone) / lookup_inbound_senders([...]) |
| Listar mensajes entrantes (plan Pro) | listInboundMessages({...}) |
list_inbound_messages(...) |
| Gestionar webhook endpoints | createWebhookEndpoint(...), listWebhookEndpoints(), updateWebhookEndpoint(...), deleteWebhookEndpoint(...), rotateWebhookEndpointSecret(...), testWebhookEndpoint(...) |
create_webhook_endpoint(...), list_webhook_endpoints(), … |
| Verificar la firma de un webhook | verifyWebhookSignature(...) / constructWebhookEvent(...) |
verify_webhook_signature(...) / construct_webhook_event(...) |
getMessage acepta tu externalId
No hace falta guardar el messageId de Arplyx: getMessage("turno-4812") funciona igual que con el id propio de Arplyx. Lo mismo aplica a GET /messages/{id} en la API REST.
Recibir webhooks
Los SDKs incluyen la verificación de firma lista para usar — constructWebhookEvent verifica y devuelve el evento parseado en un solo paso (ver el contrato completo):
import express from 'express';
import { constructWebhookEvent, WebhookVerificationError } from '@arplyx/sdk';
app.post('/webhooks/arplyx', express.raw({ type: 'application/json' }), (req, res) => {
let event;
try {
event = constructWebhookEvent(
process.env.ARPLYX_WEBHOOK_SECRET!,
req.body, // Buffer crudo
req.header('x-arplyx-signature')
);
} catch (err) {
if (err instanceof WebhookVerificationError) return res.status(401).end();
throw err;
}
res.status(200).end();
if (event.type === 'message.status') {
console.log(event.data.externalId, '→', event.data.status);
} else if (event.type === 'message.inbound') {
console.log('entrante de', event.data.from, ':', event.data.text);
}
});
from arplyx import construct_webhook_event, WebhookVerificationError
@app.post("/webhooks/arplyx")
async def arplyx_webhook(request: Request):
try:
event = construct_webhook_event(
os.environ["ARPLYX_WEBHOOK_SECRET"],
await request.body(), # bytes crudos
request.headers.get("x-arplyx-signature"),
)
except WebhookVerificationError:
raise HTTPException(status_code=401)
if event["type"] == "message.inbound":
print("entrante de", event["data"]["from"], ":", event["data"]["text"])
return {"ok": True}
Manejo de errores
Las respuestas de error de la API se traducen a una excepción tipada ArplyxError, con status (código HTTP) y code (validation_error, conflict, quota_exceeded, etc. — ver Errores y estados).
try {
await arplyx.sendMessage({ externalId: 'x', to: '+5491155551234', text: 'hola' });
} catch (err) {
if (err instanceof ArplyxError) {
console.error(err.status, err.code, err.details);
}
}
from arplyx import ArplyxError
try:
client.send_message(external_id="x", to="+5491155551234", text="hola")
except ArplyxError as e:
print(e.status, e.code, e.details)
API key
Los SDKs se autentican con tu API key (ak_live_…). Generala desde Portal → API Keys — ver Autenticación. Guardala en una variable de entorno, nunca en el código fuente.
¿Usás un agente de IA?
Si querés que un asistente (Claude, Cursor, etc.) use Arplyx directamente, mirá Conectar por MCP.