Saltar al contenido principal

Entrega por webhook

Un canal con Entrega por webhook activada entrega cada publicación a una dirección que usted elige, como una solicitud firmada, y su propio sistema sigue desde ahí, sin nadie en medio. (Para que Reelwire la publique en la propia plataforma, consulte Publicado por conector de plataforma.) Esta página trata lo que todos esos sistemas comparten: la configuración, qué llega, cómo confiar en ello y cómo decirle a Reelwire qué pasó. Lo que su sistema hace después con cada publicación es una de tres cosas:

GuíaCuándo conviene
Publicar mediante las API de las plataformasSu propio script publica cada canal a través de la API de desarrollador de la propia plataforma: Instagram, TikTok, YouTube, Facebook, LinkedIn y las demás.
Que una sesión de IA lo publiqueSu propio script inicia una sesión de un asistente de IA por cada publicación, que maneja un navegador y la publica por usted, sin supervisión.
Publicar mediante la API de un servicio de publicaciónSu script o una automatización (Make, n8n, Zapier) pasa cada publicación a la API de un servicio de publicación, que la publica en las plataformas.

Reelwire no entrega ni ejecuta ninguno de ellos. Lo que sigue es la forma que tienen todos los receptores, y el contrato en sí está en Webhooks.

Configuración​

  1. En la pantalla Webhook (en Conexiones), escriba la dirección en la que escucha su receptor en Dirección del webhook y pulse Guardar. Debe empezar por https:// y ser accesible desde internet. Establecerla requiere el permiso Administración.
  2. Dé a su receptor el secreto de firma. La pantalla solo muestra su principio y su final: pulse Copiar el secreto, escriba la contraseña con la que inicia sesión y muestra el secreto entero con Copiar. Guárdelo en un lugar que su receptor pueda leer; es todo lo que su receptor necesita. Rotar el secreto, junto a él, crea uno nuevo y detiene el antiguo al instante, así que rótelo solo cuando pueda dar el nuevo a su receptor.
  3. Escriba el receptor, o empiece por el de la misma pantalla: la tarjeta Obtener su código (Webhook) tiene un receptor que funciona en Node.js, Python, PHP y C# que comprueba la firma, rechaza una solicitud obsoleta, omite una entrega que ya ha tratado e informa de cada publicación. Ponga su secreto de firma en lugar de YOUR_SIGNING_SECRET, y una clave de API con escritura en Publicaciones en lugar de YOUR_API_KEY.
  4. Pulse Probar la entrega. Su receptor recibe una solicitud firmada con "event": "ping", y la pantalla muestra lo que respondió. Úselo hasta que pase la comprobación de la firma.
  5. En cada canal cuyas publicaciones deban llegarle, active Entrega por webhook en sus Ajustes (Canales). Deje también activada Entrega por correo si una persona debe recibir además cada publicación.

Qué llega​

Cuando toca una publicación, una solicitud por entrega: una publicación que va a tres canales con Entrega por webhook activada y que no necesitan aprobación llega una vez, con los tres en channels; un canal que necesita aprobación llega por su cuenta una vez aprobado. Un canal con el webhook desactivado nunca está en channels, aunque salga en la misma entrega por correo o por su conector de plataforma. Cada canal lleva su video (y su imagen de portada), su texto tal como lo admite esa plataforma (en cuatro longitudes, en captions, en un canal en Sin plataforma específica), sus ajustes de publicación en posting y los ID con los que informar de vuelta. Los canales de la misma publicación que quedan fuera de esta solicitud se nombran en omitted, con el motivo y si siguen.

Una llamada firmada por entrega, cuyas cabeceras y cuerpo llevan la publicación de cada canal con su video, imagen fija y textos

Más tarde, la misma dirección recibe post.update cuando alguien cambia una publicación entregada, y post.delete cuando alguien pide retirarla, cada vez con Webhook activado en el diálogo de la solicitud en Publicaciones. La cabecera x-reelwire-event dice cuál. Reenviar solicitud de publicación envía allí la publicación de nuevo como un post.publish nuevo, con un ID de entrega nuevo, de modo que su receptor actúa de nuevo sobre ella.

Confíe en ello​

  • Compruebe la firma sobre el cuerpo sin procesar, antes de analizarlo: x-reelwire-signature es t=<unix seconds>,v1=<hex>, y v1 es el HMAC-SHA256 de <t>.<raw body> con su secreto de firma. Compare en tiempo constante.
  • Rechace una marca de tiempo obsoleta: a más de 300 segundos de su reloj es una repetición.
  • Actúe una sola vez por entrega: x-reelwire-delivery es igual en cada reintento de una misma entrega. Regístrela solo cuando haya terminado con ella, para que un fallo a medias deje pasar el reintento.
  • Verifique el video tras descargarlo con su sha256. Los enlaces funcionan siete días desde cada envío.

En Node, la comprobación son unas pocas líneas:

import { createHmac, timingSafeEqual } from "node:crypto";

export const fromReelwire = (rawBody, header, secret) => {
const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
const expected = createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
return parts.v1?.length === expected.length && timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected));
};

Responder y luego trabajar​

Responda enseguida con cualquier 2xx y publique después. La respuesta solo dice que la solicitud llegó: no publica nada, y una que tarde más de 30 segundos cuenta como fallo y se envía de nuevo. Lo mismo ocurre con una redirección: Reelwire no la sigue, así que dé la dirección que responde por sí misma. Una solicitud que falla se reintenta tras 10 segundos, un minuto, cinco minutos, un cuarto de hora, una hora y dos horas, y luego se abandona; una publicación que ninguna vía sacó aparece entonces como PUBLICACIÓN FALLIDA en Publicaciones, con el motivo, y Reenviar solicitud de publicación, en Más, la intenta de nuevo allí. Lo que salió en la pantalla Actividad muestra cada intento, Detalles muestra lo que llevaba una solicitud y lo que volvió, y Entregar de nuevo envía una otra vez, con el mismo ID de entrega.

Diga lo que pasó​

Reelwire muestra la publicación de un canal como Entregada hasta que alguien dice qué fue de ella. Su receptor lo dice, por canal, con una clave de API, creada en la pantalla Claves de API, que tenga escritura en Publicaciones:

POST https://app.reelwire.io/v1/posts/{postId}/report
Authorization: Bearer rw_...
Content-Type: application/json

{ "status": "published", "url": "https://www.youtube.com/shorts/...", "platformPostId": "..." }

Reelwire llama a su flujo de trabajo, que responde al instante, pasa la publicación a un servicio de publicación y la informa como publicada con su enlace; una llamada sin respuesta en 30 segundos se reintenta tras 10 segundos, 1, 5 y 15 minutos, 1 y 2 horas

postId es channels[].postId de la solicitud. El estado es uno de:

EstadoCuándo
publishedEstá en línea. Envíe su url, y el ID propio de la plataforma como platformPostId si lo tiene: ambos le vuelven en un post.update o post.delete posterior, como permalink y platformPostId, para que pueda volver a encontrar la publicación.
skippedDecidió no publicarla.
failedNo se pudo publicar. Envíe un reason: la pantalla Publicaciones lo muestra, y una persona puede publicarla a mano.
deletedLa retiró tras un post.delete.

Decir lo mismo dos veces no pasa nada. Todo lo que el estado de la publicación no permite se responde con 409 y el estado en el que está, como omitir una publicación que ya se informó como publicada.