Plugin maintainer reference
Kanal giden API'si
Kanal Plugin’leri, giden ileti davranışını
openclaw/plugin-sdk/channel-outbound üzerinden sunar. Alma/bağlam/sevk
orkestrasyonu için openclaw/plugin-sdk/channel-inbound kullanın.
Çekirdek; kuyruğa alma, dayanıklılık, genel yeniden deneme politikası, kancalar, alındılar ve
paylaşılan message aracının sahibidir. Plugin ise yerel gönderme/düzenleme/silme çağrılarının,
hedef normalleştirmenin, platform ileti dizilerinin, seçili alıntıların, bildirim
bayraklarının, hesap durumunun ve platforma özgü yan etkilerin sahibidir.
Adaptör
Çoğu Plugin bir message adaptörü tanımlar:
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, }), }; }, },});Yalnızca yerel aktarımın gerçekten koruduğu yetenekleri bildirin. Bildirilen her gönderme, alındı, canlı önizleme ve alma onayı yeteneğini bu alt yoldan dışa aktarılan sözleşme yardımcılarıyla kapsayın.
Düz metin temizleme
Bir giden adaptörün desteklenen HTML biçimlendirme etiketlerini hafif metin
işaretlemesine dönüştürmesi gerektiğinde sanitizeForPlainText(...) kullanın.
Varsayılan ayar, mevcut sohbet tarzı kalın ve üstü çizili işaretlerini korur.
Yalnızca kanal sonucu Markdown olarak yeniden ayrıştırıyorsa
{ style: "markdown" } geçirin:
const chatText = sanitizeForPlainText(text);const markdownText = sanitizeForPlainText(text, { style: "markdown" });Markdown stili **bold** ve ~~strikethrough~~ kullanır; italik ve satır içi
kod, her iki stilde de _italic_ ve ters tırnak işaretlerini korur. İşaret metnini
temizlemeden sonra yeniden yazmak yerine stili kanal sınırında seçin.
Teslimat Kanıtı
Bir MessageReceipt, kanal adaptörü tarafından döndürülen sonucu kaydeder. Somut
platform ileti tanımlayıcıları, platformun gönderme yolunun iletiyi kabul ettiğini
gösterir; alıcının cihazında görüntülendiğini veya okunduğunu kanıtlamaz.
Platform ileti tanımlayıcıları olmayan alındılar yalnızca yerel alındı meta verileridir.
Okundu bilgisi veya cihaz teslimat durumu olan kanallar, bu olguları
kanala özgü ayrı bir yol üzerinden izlemelidir.
Bir kanal adaptörü, hatayı yeniden denemenin alıcı tarafından görülebilen bir
gönderimi çoğaltamayacağını ve sonuçlandırma yapabilen hiçbir çağrının başlamadığını
kanıtlayabiliyorsa openclaw/plugin-sdk/error-runtime üzerinden
new PlatformMessageNotDispatchedError("...", { cause: error }) oluşturup fırlatın.
Böylece çekirdek, eski gönderme girişimi kanıtını temizleyebilir ve kuyruğa alınan amacı
güvenle yeniden deneyebilir. Bu iddiayı yalnızca son sevk sınırının sahibi olan adaptör
öne sürebilir. İşaretleyiciyi sonuçlandırma/gönderme çağrısı başladıktan veya belirsiz
bir sonuç döndürdükten sonra asla kullanmayın; yanlış işaretleme iletileri çoğaltabilir.
Mevcut giden adaptörler
Kanalda zaten uyumlu bir outbound adaptörü varsa gönderme kodunu yinelemek
yerine ileti adaptörünü bundan türetin:
export const messageAdapter = createChannelMessageAdapterFromOutbound({ id: "demo", outbound, durableFinal: { capabilities: { text: true, media: true, }, },});Dayanıklı gönderimler
Çalışma zamanı gönderme yardımcıları da channel-outbound üzerinde bulunur:
sendDurableMessageBatch(...)withDurableMessageSendContext(...)deliverInboundReplyWithMessageSendContext(...)resolveChannelDraftStreamingChunking(...)gibi taslak akışı/ilerleme yardımcıları
sendDurableMessageBatch(...) tek bir açık sonuç döndürür:
| Sonuç | Anlamı |
|---|---|
sent |
platform gönderme yolu tarafından en az bir görünür platform iletisi kabul edildi |
suppressed |
hiçbir platform iletisi eksik olarak değerlendirilmemelidir |
partial_failed |
sonraki bir yük veya yan etki başarısız olmadan önce en az bir platform iletisi kabul edildi |
failed |
hiçbir platform alındısı üretilmedi |
Bir toplu işlem gönderilen, engellenen ve başarısız yükleri bir arada içeriyorsa
payloadOutcomes kullanın. Eski doğrudan teslimat sonucunun boş olmasından
kanca iptalini çıkarsamayın.
Ertelenmiş teslimat kabulü
Çözümlenmiş bir hesap çekirdek tarafından yönetilen giden veya ertelenmiş teslimatı
güvenle kabul edemiyorsa message.durableFinal.admitDeferredDelivery(...) kullanın.
Çekirdek, kuyruk kalıcılığını atlayan yollar da dahil olmak üzere canlı giden işlerden
önce ve kurtarılan bir amacı yeniden oynatmadan önce bu kancayı eşzamanlı olarak çağırır.
Bağlam; cfg, channel, to, accountId ve live veya recovery değerli bir
phase içerir.
Devam etmek için { status: "allowed" } döndürün. Teslimatın kalıcılaştırılmaması,
doğrudan gönderilmemesi veya yeniden oynatılmaması gerektiğinde
{ status: "permanent_rejection", reason } döndürün. Canlı ret; kuyruk oluşturma,
ileti kancaları veya platform işlerinden önce başarısız olur. Kurtarma reddi, kuyruğa
alınmış kaydı başarısız olarak işaretler ve uzlaştırma ile yeniden oynatmayı atlar.
Kancanın belirtilmemesi izin verildiği anlamına gelir.
Bu kanca, gönderme yolu değil eşzamanlı bir kabul kararıdır. Yalnızca önceden
yüklenmiş yapılandırmayı veya çalışma zamanı durumunu okuyun; ağ, dosya sistemi
veya başka eşzamansız G/Ç işlemleri gerçekleştirmeyin. Sözleşme testleri, her iki
aşamayı ve her iki sonuç çeşidini openclaw/plugin-sdk/channel-outbound üzerinden
ChannelMessageDurableFinalAdapter aracılığıyla sınamalıdır.
Uyumluluk sevki
Gelen yanıt sevkini channel-inbound içindeki
dispatchChannelInboundReply(...) üzerinden oluşturun. Platform teslimatını teslimat
adaptöründe tutun; ileti adaptörleri, dayanıklı gönderimler, alındılar, canlı
önizleme ve yanıt işlem hattı seçenekleri için channel-outbound kullanın.