Plugin maintainer reference

API saliente del canal

Los plugins de canal deben exponer el comportamiento de mensajes salientes desde openclaw/plugin-sdk/channel-outbound. Usa openclaw/plugin-sdk/channel-inbound para la orquestación de recepción/contexto/despacho.

El núcleo es responsable de las colas, la durabilidad, la política genérica de reintentos, los hooks, los recibos y la herramienta compartida message. El plugin es responsable de las llamadas nativas de enviar/editar/eliminar, la normalización del destino, los hilos de la plataforma, las citas seleccionadas, las marcas de notificación, el estado de la cuenta y los efectos secundarios específicos de la plataforma.

Adaptador

La mayoría de los plugins definen un adaptador message:

ts
   defineChannelMessageAdapter,  createMessageReceiptFromOutboundResults,} from "openclaw/plugin-sdk/channel-outbound"; export const demoMessageAdapter = defineChannelMessageAdapter({  id: "demo",  durableFinal: {    capabilities: {      text: true,      replyTo: true,      thread: true,      messageSendingHooks: true,    },  },  send: {    text: async ({ cfg, to, text, accountId, replyToId, threadId, signal }) => {      const sent = await sendDemoMessage({        cfg,        to,        text,        accountId: accountId ?? undefined,        replyToId: replyToId ?? undefined,        threadId: threadId == null ? undefined : String(threadId),        signal,      });       return {        receipt: createMessageReceiptFromOutboundResults({          results: [{ channel: "demo", messageId: sent.id, conversationId: to }],          kind: "text",          threadId: threadId == null ? undefined : String(threadId),          replyToId: replyToId ?? undefined,        }),      };    },  },});

Declara solo las capacidades que el transporte nativo realmente preserva. Cubre cada capacidad declarada de envío, recibo, vista previa en vivo y confirmación de recepción con los helpers de contrato exportados desde esta subruta.

Adaptadores Salientes Existentes

Si el canal ya tiene un adaptador outbound compatible, deriva el adaptador de mensajes en lugar de duplicar el código de envío:

ts
 export const messageAdapter = createChannelMessageAdapterFromOutbound({  id: "demo",  outbound,  durableFinal: {    capabilities: {      text: true,      media: true,    },  },});

Envíos Duraderos

Los helpers de envío en runtime también viven en channel-outbound:

  • sendDurableMessageBatch(...)
  • withDurableMessageSendContext(...)
  • deliverInboundReplyWithMessageSendContext(...)
  • helpers de streaming/progreso de borradores como resolveChannelDraftStreamingChunking(...)

sendDurableMessageBatch(...) devuelve un resultado explícito:

  • sent: se entregó al menos un mensaje visible de la plataforma.
  • suppressed: ningún mensaje de la plataforma debe tratarse como faltante.
  • partial_failed: se entregó al menos un mensaje de la plataforma antes de que fallara un payload o efecto secundario posterior.
  • failed: no se produjo ningún recibo de plataforma.

Usa payloadOutcomes cuando un lote mezcla payloads enviados, suprimidos y fallidos. No infieras la cancelación de un hook a partir de un resultado vacío heredado de entrega directa.

Despacho de Compatibilidad

El despacho de respuestas entrantes debe ensamblarse mediante dispatchChannelInboundReply(...) desde channel-inbound. Mantén la entrega de la plataforma en el adaptador de entrega; usa channel-outbound para adaptadores de mensajes, envíos duraderos, recibos, vista previa en vivo y opciones de la canalización de respuestas.

Was this useful?
On this page

On this page