Ejemplos de integración con MiSender API

Ejemplos prácticos en PHP, Node.js y Python para enviar mensajes y consultar estados.

PHP con cURL

$payload = [
    "to" => "5215555555555",
    "type" => "text",
    "text" => ["body" => "Tu pedido está listo.", "preview_url" => false],
    "external_id" => "pedido-84721"
];

$ch = curl_init("https://misender.com/api/v1/messages");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("MISENDER_API_KEY"),
        "Content-Type: application/json",
        "Idempotency-Key: pedido-84721-listo"
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Node.js con fetch

const response = await fetch("https://misender.com/api/v1/messages", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MISENDER_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "pedido-84721-listo"
  },
  body: JSON.stringify({
    to: "5215555555555",
    type: "text",
    text: {body: "Tu pedido está listo.", preview_url: false},
    external_id: "pedido-84721"
  })
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.code || "misender_error");

Python con requests

import os, requests

response = requests.post(
    "https://misender.com/api/v1/messages",
    headers={
        "Authorization": f"Bearer {os.environ['MISENDER_API_KEY']}",
        "Content-Type": "application/json",
        "Idempotency-Key": "pedido-84721-listo"
    },
    json={
        "to": "5215555555555",
        "type": "text",
        "text": {"body": "Tu pedido está listo.", "preview_url": False},
        "external_id": "pedido-84721"
    },
    timeout=15
)
response.raise_for_status()
print(response.json())

Patrón recomendado

  1. Genera una Idempotency-Key desde el evento de negocio.
  2. Envía desde tu backend.
  3. Guarda el msg_... devuelto.
  4. Actualiza tu registro con webhooks.
  5. Usa la consulta GET sólo para conciliación o diagnóstico.
Resultado profesional

Tu sistema conserva su identificador en external_id, MiSender conserva el mensaje en Inbox y ambos sistemas pueden correlacionar el estado sin exponer IDs internos.

¿Este artículo te resultó útil?

Tu respuesta nos ayuda a mejorar el centro de ayuda.