Kanal Eklentileri Oluşturma
Bu kılavuz, OpenClaw’u bir mesajlaşma platformuna bağlayan bir kanal eklentisi oluşturmayı adım adım açıklar. Sonunda DM güvenliği, eşleştirme, yanıt iş parçacığı oluşturma ve giden mesajlaşma özelliklerine sahip çalışan bir kanalınız olacak.Daha önce hiç OpenClaw eklentisi oluşturmadıysanız, temel paket
yapısı ve manifest kurulumu için önce Getting Started bölümünü okuyun.
Kanal eklentileri nasıl çalışır
Kanal eklentilerinin kendi send/edit/react araçlarına ihtiyacı yoktur. OpenClaw, çekirdekte tek bir ortakmessage aracını tutar. Eklentiniz şunların sahibidir:
- Config — hesap çözümleme ve kurulum sihirbazı
- Security — DM politikası ve allowlist’ler
- Pairing — DM onay akışı
- Session grammar — sağlayıcıya özgü konuşma kimliklerinin temel sohbetlere, iş parçacığı kimliklerine ve üst fallback’lerine nasıl eşlendiği
- Outbound — platforma metin, medya ve anket gönderme
- Threading — yanıtların nasıl iş parçacığına bağlandığı
:thread: kayıt tutmaya ve dağıtıma sahiptir.
Platformunuz konuşma kimlikleri içinde ek kapsam depoluyorsa, bu ayrıştırmayı
eklenti içinde messaging.resolveSessionConversation(...) ile tutun. Bu,
rawId değerini temel konuşma kimliğine, isteğe bağlı iş parçacığı
kimliğine, açık baseConversationId değerine ve herhangi bir parentConversationCandidates
değerine eşlemek için kanonik hook’tur.
parentConversationCandidates döndürdüğünüzde, bunları en dar üstten en geniş/temel konuşmaya
doğru sıralı tutun.
Kanal kayıt defteri başlatılmadan önce aynı ayrıştırmaya ihtiyaç duyan paketlenmiş eklentiler,
eşleşen bir resolveSessionConversation(...) dışa aktarımıyla üst düzey bir
session-key-api.ts dosyası da sunabilir. Çekirdek bu bootstrap açısından güvenli yüzeyi
yalnızca çalışma zamanı eklenti kayıt defteri henüz kullanılabilir değilken kullanır.
messaging.resolveParentConversationCandidates(...), bir eklentinin yalnızca
genel/raw kimliğin üstüne parent fallback’lerine ihtiyaç duyduğu eski uyumluluk fallback’i olarak kullanılmaya devam eder.
Her iki hook da varsa, çekirdek önce
resolveSessionConversation(...).parentConversationCandidates kullanır ve yalnızca bu kanonik hook
bunları atladığında resolveParentConversationCandidates(...) değerine fallback yapar.
Onaylar ve kanal yetenekleri
Çoğu kanal eklentisinin onaya özel koda ihtiyacı yoktur.- Çekirdek aynı sohbette
/approve, ortak onay düğmesi payload’ları ve genel fallback teslimini yönetir. - Kanal onaya özgü davranış gerektiriyorsa, kanal eklentisinde tek bir
approvalCapabilitynesnesi tercih edin. ChannelPlugin.approvalskaldırıldı. Onay teslimi/yerel işleme/auth bilgileriniapprovalCapabilityiçine koyun.plugin.authyalnızca login/logout içindir; çekirdek artık bu nesneden onay auth hook’larını okumaz.approvalCapability.authorizeActorActionveapprovalCapability.getActionAvailabilityState, kanonik onay-auth bağlantı yüzeyidir.- Aynı sohbette onay auth kullanılabilirliği için
approvalCapability.getActionAvailabilityStatekullanın. - Kanalınız yerel exec onayları sunuyorsa, başlatan yüzey/yerel istemci durumu aynı sohbet onay auth’undan farklı olduğunda
approvalCapability.getExecInitiatingSurfaceStatekullanın. Çekirdek bu exec’e özgü hook’uenablediledisableddurumunu ayırt etmek, başlatan kanalın yerel exec onaylarını destekleyip desteklemediğine karar vermek ve kanalı yerel istemci fallback rehberliğine dahil etmek için kullanır.createApproverRestrictedNativeApprovalCapability(...)bunu yaygın durum için doldurur. - Yinelenen yerel onay istemlerini gizlemek veya teslimattan önce yazıyor göstergeleri göndermek gibi kanala özgü payload yaşam döngüsü davranışları için
outbound.shouldSuppressLocalPayloadPromptveyaoutbound.beforeDeliverPayloadkullanın. approvalCapability.deliveryyalnızca yerel onay yönlendirmesi veya fallback bastırma için kullanılmalıdır.approvalCapability.nativeRuntimedeğerini kanala ait yerel onay bilgileri için kullanın. Çekirdek onay yaşam döngüsünü oluşturabilsin diye bunu sıcak kanal giriş noktalarındacreateLazyChannelApprovalNativeRuntimeAdapter(...)ile tembel tutun; bu, çalışma zamanı modülünüzü gerektiğinde içe aktarabilir.approvalCapability.renderyalnızca bir kanal ortak işleyici yerine gerçekten özel onay payload’larına ihtiyaç duyuyorsa kullanılmalıdır.- Kanal, devre dışı bırakılmış yoldaki yanıtta yerel exec onaylarını etkinleştirmek için gereken tam yapılandırma düğmelerini açıklamak istiyorsa
approvalCapability.describeExecApprovalSetupkullanın. Hook{ channel, channelLabel, accountId }alır; adlandırılmış hesap kanalları üst düzey varsayılanlar yerinechannels.<channel>.accounts.<id>.execApprovals.*gibi hesap kapsamlı yollar göstermelidir. - Bir kanal mevcut yapılandırmadan kararlı owner benzeri DM kimliklerini çıkarabiliyorsa, onaya özgü çekirdek mantığı eklemeden aynı sohbette
/approveerişimini kısıtlamak içinopenclaw/plugin-sdk/approval-runtimeiçindencreateResolvedApproverActionAuthAdapterkullanın. - Kanal yerel onay teslimine ihtiyaç duyuyorsa, kanal kodunu hedef normalizasyonu ile taşıma/sunum bilgilerine odaklı tutun.
openclaw/plugin-sdk/approval-runtimeiçindencreateChannelExecApprovalProfile,createChannelNativeOriginTargetResolver,createChannelApproverDmTargetResolvervecreateApproverRestrictedNativeApprovalCapabilitykullanın. Kanala özgü bilgileriapprovalCapability.nativeRuntimearkasına, ideal olarakcreateChannelApprovalNativeRuntimeAdapter(...)veyacreateLazyChannelApprovalNativeRuntimeAdapter(...)üzerinden koyun; böylece çekirdek işleyiciyi birleştirebilir ve istek filtreleme, yönlendirme, tekilleştirme, süre sonu, gateway aboneliği ve başka yere yönlendirildi bildirimlerine sahip olabilir.nativeRuntimebirkaç küçük bağlantı yüzeyine ayrılmıştır: availability— hesabın yapılandırılmış olup olmadığı ve bir isteğin işlenip işlenmemesi gerektiğipresentation— ortak onay görünüm modelini bekleyen/çözümlenen/süresi dolan yerel payload’lara veya son eylemlere eşlemetransport— hedefleri hazırlama ve yerel onay mesajlarını gönderme/güncelleme/silmeinteractions— yerel düğmeler veya tepkiler için isteğe bağlı bind/unbind/clear-action hook’larıobserve— isteğe bağlı teslim tanılama hook’ları- Kanalın istemci, token, Bolt uygulaması veya webhook alıcısı gibi çalışma zamanı sahipli nesnelere ihtiyacı varsa, bunları
openclaw/plugin-sdk/channel-runtime-contextüzerinden kaydedin. Genel runtime-context kayıt defteri, çekirdeğin onaya özgü sarmalayıcı glue eklemeden kanal başlangıç durumundan yetenek odaklı işleyicileri bootstrap etmesini sağlar. - Yalnızca yetenek odaklı bağlantı yüzeyi henüz yeterince ifade edici değilse daha alt düzey
createChannelApprovalHandlerveyacreateChannelNativeApprovalRuntimekullanımına başvurun. - Yerel onay kanalları, hem
accountIdhem deapprovalKinddeğerini bu yardımcılar üzerinden yönlendirmelidir.accountId, çok hesaplı onay politikasını doğru bot hesabına kapsamlı tutar;approvalKindise exec ile eklenti onayı davranışını çekirdekte sabit dallanmalar olmadan kanal için kullanılabilir kılar. - Çekirdek artık onay yeniden yönlendirme bildirimlerinin de sahibidir. Kanal eklentileri,
createChannelNativeApprovalRuntimeiçinden kendi “onay DM’lere / başka bir kanala gitti” takip mesajlarını göndermemelidir; bunun yerine ortak onay yetenek yardımcıları üzerinden doğru origin + approver-DM yönlendirmesini sunmalı ve çekirdeğin başlatan sohbete herhangi bir bildirim göndermeden önce gerçek teslimleri toplamasına izin vermelidir. - Teslim edilen onay kimliği türünü uçtan uca koruyun. Yerel istemciler, exec ile eklenti onay yönlendirmesini kanal yerel durumundan tahmin etmemeli veya yeniden yazmamalıdır.
- Farklı onay türleri kasıtlı olarak farklı yerel yüzeyler sunabilir.
Mevcut paketlenmiş örnekler:
- Slack, hem exec hem de eklenti kimlikleri için yerel onay yönlendirmesini kullanılabilir tutar.
- Matrix, aynı yerel DM/kanal yönlendirmesini ve reaction UX’ini exec ve eklenti onayları için korurken auth’un onay türüne göre farklılaşmasına yine de izin verir.
createApproverRestrictedNativeApprovalAdapterhâlâ bir uyumluluk sarmalayıcısı olarak vardır, ancak yeni kod capability oluşturucuyu tercih etmeli ve eklentideapprovalCapabilitysunmalıdır.
openclaw/plugin-sdk/approval-auth-runtimeopenclaw/plugin-sdk/approval-client-runtimeopenclaw/plugin-sdk/approval-delivery-runtimeopenclaw/plugin-sdk/approval-gateway-runtimeopenclaw/plugin-sdk/approval-handler-adapter-runtimeopenclaw/plugin-sdk/approval-handler-runtimeopenclaw/plugin-sdk/approval-native-runtimeopenclaw/plugin-sdk/approval-reply-runtimeopenclaw/plugin-sdk/channel-runtime-context
openclaw/plugin-sdk/setup-runtime,
openclaw/plugin-sdk/setup-adapter-runtime,
openclaw/plugin-sdk/reply-runtime,
openclaw/plugin-sdk/reply-dispatch-runtime,
openclaw/plugin-sdk/reply-reference ve
openclaw/plugin-sdk/reply-chunking yollarını tercih edin.
Özellikle kurulum için:
openclaw/plugin-sdk/setup-runtime, runtime-safe kurulum yardımcılarını kapsar: import-safe kurulum yama bağdaştırıcıları (createPatchedAccountSetupAdapter,createEnvPatchedAccountSetupAdapter,createSetupInputPresenceValidator), lookup-note çıktısı,promptResolvedAllowFrom,splitSetupEntriesve devredilen setup-proxy oluşturucularopenclaw/plugin-sdk/setup-adapter-runtime,createEnvPatchedAccountSetupAdapteriçin dar, ortam farkında bağdaştırıcı bağlantı yüzeyidiropenclaw/plugin-sdk/channel-setup, isteğe bağlı kurulum setup oluşturucularını ve setup-safe birkaç ilkel yapıyı kapsar:createOptionalChannelSetupSurface,createOptionalChannelSetupAdapter,
channelEnvVars ile bildirin. Kanal runtime envVars
veya yerel sabitlerini yalnızca operatöre dönük kopya için tutun.
createOptionalChannelSetupWizard, DEFAULT_ACCOUNT_ID,
createTopLevelChannelDmPolicy, setSetupChannelEnabled ve
splitSetupEntries
- yalnızca daha ağır ortak kurulum/config yardımcılarına da ihtiyacınız varsa daha geniş
openclaw/plugin-sdk/setupbağlantı yüzeyini kullanın; örneğinmoveSingleAccountChannelSectionToDefaultAccount(...)
createOptionalChannelSetupSurface(...) tercih edin. Oluşturulan
adapter/sihirbaz config yazımlarında ve sonlandırmada güvenli şekilde başarısız olur ve aynı yükleme-gerekli iletisini doğrulama, sonlandırma ve docs-link
metni boyunca yeniden kullanır.
Diğer sıcak kanal yolları için de, daha geniş eski
yüzeyler yerine dar yardımcıları tercih edin:
- çok hesaplı config ve
varsayılan hesap fallback’i için
openclaw/plugin-sdk/account-core,openclaw/plugin-sdk/account-id,openclaw/plugin-sdk/account-resolutionveopenclaw/plugin-sdk/account-helpers - gelen rota/zarf ve
record-and-dispatch bağlantısı için
openclaw/plugin-sdk/inbound-envelopeveopenclaw/plugin-sdk/inbound-reply-dispatch - hedef ayrıştırma/eşleştirme için
openclaw/plugin-sdk/messaging-targets - medya yükleme ile giden
kimlik/gönderim delegeleri için
openclaw/plugin-sdk/outbound-mediaveopenclaw/plugin-sdk/outbound-runtime - iş parçacığı bağı yaşam döngüsü
ve bağdaştırıcı kaydı için
openclaw/plugin-sdk/thread-bindings-runtime - yalnızca eski bir agent/media
payload alan düzeni hâlâ gerekliyse
openclaw/plugin-sdk/agent-media-payload - Telegram özel komut
normalizasyonu, yinelenen/çakışma doğrulaması ve fallback açısından kararlı komut
config sözleşmesi için
openclaw/plugin-sdk/telegram-command-config
Gelen mention politikası
Gelen mention işlemeyi iki katmana ayrılmış tutun:- eklentiye ait kanıt toplama
- ortak politika değerlendirmesi
openclaw/plugin-sdk/channel-inbound kullanın.
Eklentiye yerel mantık için iyi uyum sağlayan alanlar:
- bota yanıt algılama
- bottan alıntı algılama
- iş parçacığına katılım denetimleri
- hizmet/sistem mesajı hariç tutmaları
- bot katılımını kanıtlamak için gereken platform yerel önbellekler
requireMention- açık mention sonucu
- örtük mention allowlist’i
- komut bypass’ı
- son atlama kararı
- Yerel mention bilgilerini hesaplayın.
- Bu bilgileri
resolveInboundMentionDecision({ facts, policy })içine geçirin. - Gelen kapıda
decision.effectiveWasMentioned,decision.shouldBypassMentionvedecision.shouldSkipkullanın.
api.runtime.channel.mentions, çalışma zamanı eklemeye zaten bağlı olan
paketlenmiş kanal eklentileri için aynı ortak mention yardımcılarını sunar:
buildMentionRegexesmatchesMentionPatternsmatchesMentionWithExplicitimplicitMentionKindWhenresolveInboundMentionDecision
resolveMentionGating* yardımcıları
openclaw/plugin-sdk/channel-inbound üzerinde yalnızca uyumluluk dışa aktarımları olarak kalır. Yeni kod
resolveInboundMentionDecision({ facts, policy }) kullanmalıdır.
Adım adım açıklama
Paket ve manifest
Standart eklenti dosyalarını oluşturun.
package.json içindeki channel alanı
bunun bir kanal eklentisi olmasını sağlar. Tam paket meta veri yüzeyi için
Plugin Setup and Config bölümüne bakın:Kanal eklentisi nesnesini oluşturun
ChannelPlugin arayüzü birçok isteğe bağlı bağdaştırıcı yüzeyi içerir. Önce en küçük haliyle —
id ve setup — başlayın ve ihtiyaç duydukça bağdaştırıcılar ekleyin.src/channel.ts oluşturun:src/channel.ts
createChatChannelPlugin size sizin için ne yapar
createChatChannelPlugin size sizin için ne yapar
Alt düzey bağdaştırıcı arayüzlerini elle uygulamak yerine,
bildirimsel seçenekler verirsiniz ve oluşturucu bunları birleştirir:
Tam denetime ihtiyacınız varsa bildirimsel seçenekler yerine ham bağdaştırıcı nesneleri de verebilirsiniz.
| Seçenek | Bağladığı şey |
|---|---|
security.dm | Config alanlarından kapsamlı DM güvenlik çözümleyicisi |
pairing.text | Kod değişimiyle metin tabanlı DM eşleştirme akışı |
threading | Reply-to modu çözümleyicisi (sabit, hesap kapsamlı veya özel) |
outbound.attachedResults | Sonuç meta verisi döndüren gönderim işlevleri (mesaj kimlikleri) |
Giriş noktasını bağlayın
index.ts oluşturun:index.ts
registerCliMetadata(...) içine koyun; böylece OpenClaw
tam kanal çalışma zamanını etkinleştirmeden bunları kök yardımda gösterebilir,
normal tam yüklemeler ise gerçek komut
kaydı için aynı descriptor’ları almaya devam eder. registerFull(...) değerini çalışma zamanına özgü işler için tutun.
Eğer registerFull(...) gateway RPC yöntemleri kaydediyorsa, eklentiye
özgü bir önek kullanın. Çekirdek yönetici ad alanları (config.*,
exec.approvals.*, wizard.*, update.*) ayrılmıştır ve her zaman
operator.admin olarak çözülür.
defineChannelPluginEntry, kayıt modu ayrımını otomatik olarak yönetir. Tüm
seçenekler için Entry Points bölümüne bakın.Bir setup girişi ekleyin
Onboarding sırasında hafif yükleme için OpenClaw, kanal devre dışı olduğunda
veya yapılandırılmadığında tam giriş yerine bunu yükler.
Kurulum akışları sırasında ağır çalışma zamanı kodunu çekmekten kaçınır.
Ayrıntılar için Setup and Config bölümüne bakın.
setup-entry.ts oluşturun:setup-entry.ts
Gelen mesajları işleyin
Eklentinizin platformdan mesaj alması ve bunları
OpenClaw’a iletmesi gerekir. Tipik desen, isteği doğrulayan ve
bunu kanalınızın gelen işleyicisi üzerinden dağıtan bir webhook’tur:
Gelen mesaj işleme kanala özgüdür. Her kanal eklentisi
kendi gelen işlem hattına sahiptir. Gerçek kalıplar için paketlenmiş kanal eklentilerine
(örneğin Microsoft Teams veya Google Chat eklenti paketine) bakın.
Test
Eş konumlu testleri Ortak test yardımcıları için Testing bölümüne bakın.
src/channel.test.ts içine yazın:src/channel.test.ts
Dosya yapısı
Gelişmiş konular
İş parçacığı seçenekleri
Sabit, hesap kapsamlı veya özel yanıt modları
Message aracı entegrasyonu
describeMessageTool ve eylem keşfi
Hedef çözümleme
inferTargetChatType, looksLikeId, resolveTarget
Çalışma zamanı yardımcıları
api.runtime üzerinden TTS, STT, medya, subagent
Bazı paketlenmiş yardımcı bağlantı yüzeyleri, paketlenmiş eklenti bakımı ve
uyumluluk için hâlâ vardır. Bunlar yeni kanal eklentileri için önerilen desen değildir;
o paketlenmiş eklenti ailesini doğrudan sürdürmüyorsanız ortak SDK
yüzeyinden genel channel/setup/reply/runtime alt yollarını tercih edin.
Sonraki adımlar
- Provider Plugins — eklentiniz model de sağlıyorsa
- SDK Overview — tam alt yol içe aktarma başvurusu
- SDK Testing — test yardımcı programları ve sözleşme testleri
- Plugin Manifest — tam manifest şeması