Bu sayfa, dağınık kanal turu, yanıt gönderimi, önizleme akışı ve giden teslim yardımcılarını tek bir dayanıklı mesaj yaşam döngüsüyle değiştirmek için hedef tasarımdır. Kısa sürüm:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Çekirdek ilkeller yanıt değil, alma ve gönderme olmalıdır.
- Yanıt, yalnızca giden mesaj üzerindeki bir ilişkidir.
- Tur, teslimin sahibi değil, gelen işleme için bir kolaylıktır.
- Gönderme bağlama dayalı olmalıdır:
begin, işle, önizle veya akışa al, son gönderimi yap, işle, başarısız ol. - Alma da bağlama dayalı olmalıdır: normalleştir, yineleneni ayıkla, yönlendir, kaydet, dağıt, platform onayı, başarısız ol.
- Genel Plugin SDK, tek bir küçük kanal-mesaj yüzeyine indirgenmelidir.
Sorunlar
Geçerli kanal yığını birkaç geçerli yerel ihtiyaçtan büyüdü:- Basit gelen bağdaştırıcılar
runtime.channel.turn.runkullanır. - Zengin bağdaştırıcılar
runtime.channel.turn.runPreparedkullanır. - Eski yardımcılar
dispatchInboundReplyWithBase,recordInboundSessionAndDispatchReply, yanıt yükü yardımcıları, yanıt parçalama, yanıt referansları ve giden çalışma zamanı yardımcılarını kullanır. - Önizleme akışı, kanala özgü dağıtıcılarda yaşar.
- Son teslim dayanıklılığı mevcut yanıt yükü yollarının etrafına ekleniyor.
Hedefler
- Tüm kanal mesajı alma ve gönderme yolları için tek bir çekirdek yaşam döngüsü.
- Bir bağdaştırıcı yeniden oynatma açısından güvenli davranış beyan ettikten sonra yeni mesaj yaşam döngüsünde varsayılan olarak dayanıklı son gönderimler.
- Paylaşılan önizleme, düzenleme, akış, sonlandırma, yeniden deneme, kurtarma ve alındı semantiği.
- Üçüncü taraf Plugin’lerin öğrenip sürdürebileceği küçük bir Plugin SDK yüzeyi.
- Geçiş sırasında mevcut
channel.turnçağıranları için uyumluluk. - Yeni kanal yetenekleri için açık genişletme noktaları.
- Çekirdekte platforma özgü dallanma yok.
- Token-delta kanal mesajları yok. Kanal akışı mesaj önizlemesi, düzenleme, ekleme veya tamamlanmış blok teslimi olarak kalır.
- Operasyonel/sistem çıktısı için yapılandırılmış OpenClaw kökenli meta veri; böylece görünür Gateway hataları, bot etkinleştirilmiş paylaşılan odalara yeni istemler olarak tekrar girmez.
Hedef Olmayanlar
- İlk aşamada
runtime.channel.turn.*kaldırılmayacak. - Her kanal aynı yerel taşıma davranışına zorlanmayacak.
- Çekirdeğe Telegram konuları, Slack yerel akışları, Matrix redaction’ları, Feishu kartları, QQ ses veya Teams etkinlikleri öğretilmeyecek.
- Tüm dahili geçiş yardımcıları kararlı SDK API olarak yayımlanmayacak.
- Yeniden denemeler tamamlanmış idempotent olmayan platform işlemlerini yeniden oynatmayacak.
Referans Model
Vercel Chat iyi bir genel zihinsel modele sahiptir:ChatThreadChannelMessagepostMessage,editMessage,deleteMessage,stream,startTypingve geçmiş getirmeler gibi bağdaştırıcı yöntemleri- yinelenenleri ayıklama, kilitler, kuyruklar ve kalıcılık için bir durum bağdaştırıcısı
- Doğrudan taşıma çağrılarından önce dayanıklı giden gönderim niyetleri.
- Başlatma, işleme ve başarısız olma içeren açık gönderme bağlamları.
- Platform onay politikasını bilen alma bağlamları.
- Yeniden başlatmadan sağ çıkan ve düzenleme, silme, kurtarma ve yinelenen bastırmayı yürütebilen alındılar.
- Daha küçük bir genel SDK. Paketli Plugin’ler dahili çalışma zamanı yardımcılarını kullanabilir, ancak üçüncü taraf Plugin’ler tek ve tutarlı bir mesaj API’si görmelidir.
- Aracıya özgü davranış: oturumlar, transkriptler, blok akışı, araç ilerlemesi, onaylar, medya yönergeleri, sessiz yanıtlar ve grup bahsi geçmişi.
thread.post() tarzı promise’ler OpenClaw için yeterli değildir. Bir gönderimin
kurtarılabilir olup olmadığına karar veren işlem sınırını gizlerler.
Çekirdek Model
Yeni alan adısrc/channels/message/* gibi dahili bir çekirdek ad alanı altında
yaşamalıdır.
Dört kavramı vardır:
receive, gelen yaşam döngüsünün sahibidir.
send, giden yaşam döngüsünün sahibidir.
live, önizleme, düzenleme, ilerleme ve akış durumunun sahibidir.
state, dayanıklı niyet depolama, alındılar, idempotency, kurtarma, kilitler ve
yinelenen ayıklamanın sahibidir.
Mesaj Terimleri
Mesaj
Normalleştirilmiş mesaj platformdan bağımsızdır:Hedef
Hedef, mesajın nerede yaşadığını açıklar:İlişki
Yanıt bir ilişkidir, API kökü değildir:Köken
Köken, bir mesajı kimin ürettiğini ve OpenClaw’ın o mesajın yankılarını nasıl ele alması gerektiğini açıklar. İlişkiden ayrıdır: bir mesaj bir kullanıcıya yanıt olabilir ve yine de OpenClaw kökenli operasyonel çıktı olabilir.allowBots etkinleştirildiğinde paylaşılan odalarda
bot tarafından yazılmış girdi olarak kabul edilmemelidir.
Alındı
Alındılar birinci sınıftır:Alma Bağlamı
Alma, çıplak bir yardımcı çağrısı olmamalıdır. Çekirdeğin yinelenenleri ayıklama, yönlendirme, oturum kaydı ve platform onay politikasını bilen bir bağlama ihtiyacı vardır.- Taşıma onayı: platform webhook’una veya soketine OpenClaw’ın olay zarfını kabul ettiğini söyler. Bazı platformlar bunu dağıtımdan önce gerektirir.
- Polling offset onayı: aynı olayın tekrar getirilmemesi için imleci ilerletir. Bu, kurtarılamayacak işin ötesine ilerlememelidir.
- Gelen kayıt onayı: OpenClaw’ın bir yeniden teslimi yinelenen olarak ayıklamak ve yönlendirmek için yeterli gelen meta veriyi kalıcı hale getirdiğini doğrular.
- Kullanıcıya görünür alındı: isteğe bağlı okundu/durum/yazıyor davranışı; asla bir dayanıklılık sınırı değildir.
ReceiveAckPolicy yalnızca taşıma veya polling onayını kontrol eder. Okundu
alındıları veya durum tepkileri için yeniden kullanılmamalıdır.
Bot yetkilendirmesinden önce, kanal mesaj kökeni meta verisini çözebildiğinde
alma, paylaşılan OpenClaw yankı politikasını uygulamalıdır:
allowBots yetkilendirmesinden geçer.
Onay politikası açıktır:
getUpdates getirme offset’i hâlâ
polling kitaplığı tarafından kontrol edilir; bu yüzden OpenClaw’ın yeniden
başlatma watermark’ının ötesinde platform düzeyi yeniden teslim gerekiyorsa kalan
daha derin değişiklik tam dayanıklı bir polling kaynağıdır. Webhook platformları
anında HTTP onayına ihtiyaç duyabilir, ancak webhook’lar yeniden teslim
edebileceğinden yine de gelen yinelenen ayıklama ve dayanıklı giden gönderim
niyetlerine ihtiyaç duyarlar.
Gönderme Bağlamı
Gönderme de bağlama dayalıdır:unknown_after_send içinde
sürdürülmelidir. Uzlaştırması olmayan kanallar, yinelenen görünür iletilerin o
kanal ve ilişki için kabul edilebilir, belgelenmiş bir ödünleşim olması halinde
yalnızca en az bir kez yeniden oynatmayı seçebilir. Geçerli SDK uzlaştırma köprüsü,
adaptörün reconcileUnknownSend bildirmesini gerektirir, ardından bilinmeyen bir
girdiyi sent, not_sent veya unresolved olarak sınıflandırmak için
durableFinal.reconcileUnknownSend ister; yalnızca not_sent yeniden oynatmaya
izin verir ve çözümlenmemiş girdiler terminal olarak kalır ya da yalnızca
uzlaştırma denetimini yeniden dener.
Dayanıklılık ilkesi açık olmalıdır:
required, core dayanıklı amacı yazamadığında kapalı biçimde başarısız olmalıdır
anlamına gelir. best_effort, kalıcılık kullanılamadığında devam edebilir.
disabled eski doğrudan gönderim davranışını korur. Geçiş sırasında, eski
wrapper’lar ve herkese açık uyumluluk yardımcıları varsayılan olarak disabled
kullanır; bir kanalın genel bir outbound adaptörü olmasından required
çıkarımı yapmamalıdırlar.
Gönderim bağlamları kanal-yerel gönderim sonrası etkilerin de sahibidir.
Dayanıklı teslim, daha önce kanalın doğrudan gönderim yoluna bağlı olan yerel
davranışı atlıyorsa geçiş güvenli değildir. Örnekler arasında self-echo bastırma
önbellekleri, thread katılım işaretleyicileri, yerel düzenleme anchor’ları,
model-signature render etme ve platforma özgü yinelenen ileti korumaları bulunur.
Bu etkiler, ilgili kanal dayanıklı genel nihai teslimi etkinleştirmeden önce
gönderim adaptörüne, render adaptörüne veya adlandırılmış bir gönderim bağlamı
hook’una taşınmalıdır.
Gönderim yardımcıları receipt’leri çağıranlarına kadar geri döndürmelidir.
Dayanıklı wrapper’lar ileti id’lerini yutamaz veya bir kanal teslim sonucunu
undefined ile değiştiremez; buffer’lı dispatcher’lar bu id’leri thread
anchor’ları, sonraki düzenlemeler, önizleme sonlandırma ve yinelenen ileti
bastırma için kullanır.
Fallback gönderimleri tek payload’lar üzerinde değil, batch’ler üzerinde çalışır.
Silent-reply yeniden yazımları, media fallback, card fallback ve chunk projection
birden fazla teslim edilebilir ileti üretebilir; bu nedenle bir gönderim bağlamı
ya projekte edilen batch’in tamamını teslim etmeli ya da neden yalnızca bir
payload’ın geçerli olduğunu açıkça belgelemelidir.
unknown_after_send olarak
işaretlemelidir.
Canlı bağlam
Önizleme, düzenleme, ilerleme ve akış davranışı tek bir isteğe bağlı lifecycle olmalıdır.- Telegram gönderimi ve düzenleme önizlemesi; bayat önizleme yaşından sonra taze final ile.
- Discord gönderimi ve düzenleme önizlemesi; media/hata/açık yanıt durumunda iptal.
- Thread şekline bağlı olarak Slack yerel akışı veya taslak önizlemesi.
- Mattermost taslak gönderi sonlandırması.
- Matrix taslak olay sonlandırması veya uyumsuzlukta redaksiyon.
- Teams yerel ilerleme akışı.
- QQ Bot akışı veya birikmiş fallback.
Adaptör yüzeyi
Herkese açık SDK hedefi tek bir alt yol olmalıdır:origin.decode OpenClaw kökenli
metadata döndürdüğünde paylaşılan OpenClaw echo predicate’ini çalıştırmalıdır.
Alım adaptörü bot yazarı ve oda şekli gibi platform gerçeklerini sağlar; core
drop kararının ve sıralamanın sahibidir, böylece kanallar metin filtrelerini
yeniden uygulamaz.
Origin adaptörü:
MessageOrigin ayarlar. Kanallar onu yalnızca yerel taşıma metadata’sına
çevirir ve oradan geri çevirir. Slack bunu
chat.postMessage({ metadata }) ve inbound message.metadata ile eşler; Matrix
bunu ek olay içeriğine eşleyebilir; yerel metadata’sı olmayan kanallar, mevcut en
iyi yaklaşım bu olduğunda bir receipt/outbound registry kullanabilir.
Yetenekler:
Herkese açık SDK azaltımı
Yeni herkese açık yüzey şu kavramsal alanları içine almalı veya kullanımdan kaldırmalıdır:reply-runtimereply-dispatch-runtimereply-referencereply-chunkingreply-payloadinbound-reply-dispatchchannel-reply-pipelineoutbound-runtimeiçin çoğu herkese açık kullanım- ad hoc taslak akış lifecycle yardımcıları
plugin-sdk/channel-message yoluna yönlendirmelidir.
Kanal turn ile ilişki
runtime.channel.turn.* geçiş sırasında kalmalıdır.
Bir uyumluluk adaptörüne dönüşmelidir:
channel.turn.runPrepared da başlangıçta kalmalıdır:
channel.turn kullanımdan kaldırılabilir. Yayımlanmış bir
SDK geçiş yolu ve eski Plugin’lerin hâlâ çalıştığını ya da net bir sürüm hatasıyla
başarısız olduğunu kanıtlayan sözleşme testleri olmadan kaldırılmamalıdır.
Uyumluluk korkulukları
Geçiş sırasında, mevcut teslim callback’i “bu payload’ı gönder” dışında yan etkilere sahip olan herhangi bir kanal için genel dayanıklı teslim isteğe bağlıdır. Eski giriş noktaları varsayılan olarak dayanıklı değildir:channel.turn.runvedispatchAssembledChannelTurn, ilgili kanal açıkça denetlenmiş bir dayanıklı ilke/seçenekler nesnesi sağlamadığı sürece kanalın teslim callback’ini kullanır.- Hazırlanmış dispatcher gönderim bağlamını açıkça çağırana kadar
channel.turn.runPreparedkanal sahipliğinde kalır. recordInboundSessionAndDispatchReply,dispatchInboundReplyWithBaseve direct-DM yardımcıları gibi herkese açık uyumluluk yardımcıları, çağıranın sağladığıdeliverveyareplycallback’inden önce hiçbir zaman genel dayanıklı teslim enjekte etmez.
durable: undefined “dayanıklı değil” anlamına gelir.
Dayanıklı yol yalnızca açık bir ilke/seçenekler değeriyle etkinleştirilir.
durable: false uyumluluk yazımı olarak kalabilir, ancak uygulama her geçmemiş
kanalın bunu eklemesini gerektirmemelidir.
Geçerli köprü kodu dayanıklılık kararını açık tutmalıdır:
- Dayanıklı nihai teslim, ayrıştırılmış bir durum döndürür.
handled_visiblevehandled_no_sendterminaldir;unsupportedvenot_applicable, kanalın sahip olduğu teslime geri dönebilir;failedgönderme hatasını iletir. - Genel dayanıklı nihai teslim, sessiz teslim, yanıt hedefinin korunması, yerel alıntının korunması ve ileti gönderme kancaları gibi adaptör kabiliyetleriyle sınırlandırılır. Eksik eşdeğerlik, kullanıcıya görünen davranışı değiştiren genel bir gönderimi değil, kanalın sahip olduğu teslimi seçmelidir.
- Kuyruk destekli dayanıklı gönderimler bir teslim niyeti referansı sunar. Mevcut
pendingFinalDelivery*oturum alanları geçiş sırasında niyet kimliğini taşıyabilir; nihai durum, dondurulmuş yanıt metni ve geçici bağlam alanları yerine birMessageSendIntentdeposudur.
- Genel gönderim adaptörü, eski doğrudan yolla aynı işleme ve taşıma davranışını yürütür.
- Yerel gönderim sonrası yan etkiler, gönderim bağlamı üzerinden korunur.
- Adaptör, tüm platform ileti kimlikleriyle birlikte alındı bilgileri veya teslim sonuçları döndürür.
- Hazırlanmış dağıtıcı yolları ya yeni gönderim bağlamını çağırır ya da dayanıklı garantinin dışında olarak belgelenmiş kalır.
- Geri dönüş teslimi, yalnızca ilkini değil, öngörülen her yükü işler.
- Dayanıklı geri dönüş teslimi, öngörülen yük dizisinin tamamını tek bir yeniden oynatılabilir niyet veya toplu plan olarak kaydeder.
- iMessage izleyici teslimi, başarılı bir gönderimden sonra gönderilen iletileri bir yankı önbelleğine kaydeder. Dayanıklı nihai gönderimler bu önbelleği hâlâ doldurmalıdır; aksi halde OpenClaw kendi nihai yanıtlarını gelen kullanıcı iletileri olarak yeniden alabilir.
- Tlon isteğe bağlı bir model imzası ekler ve grup yanıtlarından sonra katılım sağlanan iş parçacıklarını kaydeder. Genel dayanıklı teslim bu etkileri atlamamalıdır; bunları Tlon işleme/gönderme/sonlandırma adaptörlerine taşıyın veya Tlon’u kanalın sahip olduğu yolda tutun.
- Discord ve diğer hazırlanmış dağıtıcılar doğrudan teslim ve önizleme davranışına zaten sahiptir. Hazırlanmış dağıtıcıları nihai iletileri açıkça gönderim bağlamı üzerinden yönlendirmeden, birleştirilmiş tur dayanıklı garantisi kapsamında değildirler.
- Telegram sessiz geri dönüş teslimi, öngörülen yük dizisinin tamamını teslim etmelidir. Tek yüklü bir kısayol, projeksiyondan sonra ek geri dönüş yüklerini düşürebilir.
- LINE, BlueBubbles, Zalo, Nostr ve diğer mevcut birleştirilmiş/yardımcı yolların yanıt belirteci işleme, medya vekilleme, gönderilen ileti önbellekleri, yükleme/durum temizliği veya yalnızca geri çağırma hedefleri olabilir. Bu semantik gönderim adaptörüyle temsil edilip testlerle doğrulanana kadar kanalın sahip olduğu teslimde kalırlar.
- Direct-DM yardımcılarında, tek doğru taşıma hedefi olan bir yanıt geri çağırması
bulunabilir. Genel giden gönderim
OriginatingToveyaToüzerinden tahmin yürütüp bu geri çağırmayı atlamamalıdır. - OpenClaw Gateway hata çıktısı insanlara görünür kalmalıdır, ancak etiketlenmiş
bot tarafından yazılmış oda yankıları
allowBotsyetkilendirmesinden önce düşürülmelidir. Kanallar bunu kısa süreli acil durum geçici önlemi dışında görünür metin önek filtreleriyle uygulamamalıdır; dayanıklı sözleşme, yapılandırılmış kaynak meta verisidir.
İç depolama
Dayanıklı kuyruk, yanıt yüklerini değil, ileti gönderim niyetlerini depolamalıdır.Hata sınıfları
Kanal adaptörleri taşıma hatalarını kapalı kategorilerde sınıflandırır:transientverate_limitiçin yeniden deneyin.- Bir işleme geri dönüşü yoksa
invalid_payloadiçin yeniden denemeyin. - Yapılandırma değişene kadar
authveyapermissioniçin yeniden denemeyin. not_foundiçin, kanal bunun güvenli olduğunu bildirdiğinde canlı sonlandırmanın düzenlemeden yeni gönderime geri dönmesine izin verin.conflictiçin iletinin zaten mevcut olup olmadığına karar vermek amacıyla alındı/idempotency kurallarını kullanın.- Adaptör platform G/Ç’sini tamamlamış olabilecekken alındı kaydı işlenmeden önce
oluşan herhangi bir hata, adaptör platform işleminin gerçekleşmediğini
kanıtlayamadığı sürece
unknown_after_sendolur.
Kanal eşlemesi
| Kanal | Hedef geçiş |
|---|---|
| Telegram | Ack ilkesini ve dayanıklı nihai gönderimleri alır. Canlı adaptör gönderimi ve önizleme düzenlemeyi, eskimiş önizleme nihai gönderimini, konuları, alıntı-yanıt önizleme atlamasını, medya yedek yolunu ve retry-after işlemeyi üstlenir. |
| Discord | Gönderim adaptörü mevcut dayanıklı yük teslimini sarmalar. Canlı adaptör taslak düzenlemeyi, ilerleme taslağını, medya/hata önizleme iptalini, yanıt hedefinin korunmasını ve mesaj kimliği alındılarını üstlenir. Paylaşılan odalarda bot tarafından yazılmış Gateway hatası yankılarını denetleyin; Discord normal mesajlarda köken meta verilerini taşıyamıyorsa bir giden kayıt defteri veya başka bir yerel eşdeğer kullanın. |
| Slack | Gönderim adaptörü normal sohbet gönderilerini işler. Canlı adaptör, ileti dizisi şekli destekliyorsa yerel akışı, aksi halde taslak önizlemeyi seçer. Alındılar ileti dizisi zaman damgalarını korur. Köken adaptörü OpenClaw Gateway hatalarını Slack chat.postMessage.metadata ile eşler ve allowBots yetkilendirmesinden önce etiketlenmiş bot-odası yankılarını düşürür. |
| Gönderim adaptörü metin/medya gönderimini dayanıklı nihai niyetlerle üstlenir. Alım adaptörü grup bahsini ve gönderen kimliğini işler. WhatsApp düzenlenebilir bir taşıma sağlayana kadar canlı adaptör bulunmayabilir. | |
| Matrix | Canlı adaptör taslak olay düzenlemelerini, sonlandırmayı, redaksiyonu, şifreli medya kısıtlarını ve yanıt-hedefi uyumsuzluğu yedek yolunu üstlenir. Alım adaptörü şifreli olay doldurmayı ve tekilleştirmeyi üstlenir. Köken adaptörü OpenClaw Gateway hatası kökenini Matrix olay içeriğine kodlamalı ve allowBots işleminden önce yapılandırılmış bot oda yankılarını düşürmelidir. |
| Mattermost | Canlı adaptör tek bir taslak gönderiyi, ilerleme/araç katlamayı, yerinde sonlandırmayı ve yeni gönderim yedek yolunu üstlenir. |
| Microsoft Teams | Canlı adaptör yerel ilerleme ve blok akışı davranışını üstlenir. Gönderim adaptörü etkinlikleri ve ek/kart alındılarını üstlenir. |
| Feishu | İşleme adaptörü metin/kart/ham işlemeyi üstlenir. Canlı adaptör akış kartlarını ve yinelenen nihai bastırmayı üstlenir. Gönderim adaptörü yorumları, konu oturumlarını, medyayı ve ses bastırmayı üstlenir. |
| QQ Bot | Canlı adaptör C2C akışını, biriktirici zaman aşımını ve yedek nihai gönderimi üstlenir. İşleme adaptörü medya etiketlerini ve metin-olarak-sesi üstlenir. |
| Signal | Basit alım ve gönderim adaptörü. signal-cli güvenilir düzenleme desteği eklemediği sürece canlı adaptör yoktur. |
| iMessage and BlueBubbles | Basit alım ve gönderim adaptörü. Dayanıklı nihai gönderimler izleyici teslimini atlayabilmeden önce iMessage gönderimi izleyici yankı-önbelleği doldurmasını korumalıdır. BlueBubbles’a özgü yazıyor göstergesi, tepkiler ve ekler adaptör yetenekleri olarak kalır. |
| Google Chat | Alanlara ve ileti dizisi kimliklerine eşlenen ileti dizisi ilişkisiyle basit alım ve gönderim adaptörü. Etiketlenmiş OpenClaw Gateway hatası yankıları için allowBots=true oda davranışını denetleyin. |
| LINE | Yanıt belirteci kısıtları hedef/ilişki yeteneği olarak modellenmiş basit alım ve gönderim adaptörü. |
| Nextcloud Talk | SDK alım köprüsü ve gönderim adaptörü. |
| IRC | Basit alım ve gönderim adaptörü, dayanıklı düzenleme alındıları yok. |
| Nostr | Şifreli DM’ler için alım ve gönderim adaptörü; alındılar olay kimlikleridir. |
| QA Channel | Alım, gönderim, canlı, yeniden deneme ve kurtarma davranışı için sözleşme testi adaptörü. |
| Synology Chat | Basit alım ve gönderim adaptörü. |
| Tlon | Genel dayanıklı nihai teslim etkinleştirilmeden önce gönderim adaptörü model-imzası işlemeyi ve katılınan-ileti dizisi takibini korumalıdır. |
| Twitch | Hız sınırı sınıflandırmasıyla basit alım ve gönderim adaptörü. |
| Zalo | Basit alım ve gönderim adaptörü. |
| Zalo Personal | Basit alım ve gönderim adaptörü. |
Geçiş planı
Aşama 1: Dahili Mesaj Alanı
- Mesajlar, hedefler, ilişkiler,
kökenler, alındılar, yetenekler, dayanıklı niyetler, alım bağlamı, gönderim
bağlamı, canlı bağlam ve hata sınıfları için
src/channels/message/*türleri ekleyin. - Geçerli yanıt teslimi tarafından kullanılan geçiş köprüsü yük türüne
origin?: MessageOriginekleyin, ardından refactor yanıt yüklerini değiştirdikçe bu alanıChannelMessageve işlenmiş mesaj türlerine taşıyın. - Adaptörler ve testler şekli kanıtlayana kadar bunu dahili tutun.
- Durum geçişleri ve serileştirme için saf birim testleri ekleyin.
Aşama 2: Dayanıklı Gönderim Çekirdeği
- Mevcut giden kuyruğunu yanıt-yükü dayanıklılığından dayanıklı mesaj gönderim niyetlerine taşıyın.
- Dayanıklı bir gönderim niyetinin yalnızca tek bir yanıt yükü değil, yansıtılmış bir yük dizisi veya toplu iş planı taşımasına izin verin.
- Uyumluluk dönüşümü yoluyla mevcut kuyruk kurtarma davranışını koruyun.
deliverOutboundPayloadsişlevininmessages.sendçağırmasını sağlayın.- Adaptör yeniden oynatma güvenliğini bildirdikten sonra, yeni mesaj yaşam döngüsünde dayanıklı niyet yazılamadığında nihai-gönderim dayanıklılığını varsayılan yapın ve kapalı başarısız olun. Mevcut kanal-tur ve SDK uyumluluk yolları bu aşamada varsayılan olarak doğrudan gönderim olarak kalır.
- Alındıları tutarlı biçimde kaydedin.
- Dayanıklı gönderimi son bir yan etki olarak ele almak yerine, alındıları ve teslim sonuçlarını özgün dispatcher çağıranına döndürün.
- Kurtarma, yeniden oynatma ve parçalı gönderimlerin OpenClaw operasyonel kökenini koruması için mesaj kökenini dayanıklı gönderim niyetleri boyunca kalıcılaştırın.
Aşama 3: Kanal Turu Köprüsü
channel.turn.runvedispatchAssembledChannelTurnöğelerinimessages.receivevemessages.sendüzerine yeniden uygulayın.- Geçerli olgu türlerini kararlı tutun.
- Varsayılan olarak eski davranışı koruyun. Birleştirilmiş-tur kanalı yalnızca adaptörü yeniden oynatma güvenli bir dayanıklılık ilkesiyle açıkça katıldığında dayanıklı hale gelir.
- Yerel düzenlemeleri sonlandıran ve henüz güvenle yeniden oynatılamayan yollar için
uyumluluk kaçış yolu olarak
durable: falsedeğerini koruyun, ancak geçirilmemiş kanalları korumak içinfalseişaretlerine güvenmeyin. - Birleştirilmiş-tur dayanıklılığını yalnızca yeni mesaj yaşam döngüsünde, kanal eşlemesi genel gönderim yolunun eski kanal teslim semantiğini koruduğunu kanıtladıktan sonra varsayılan yapın.
Aşama 4: Hazırlanmış Dispatcher Köprüsü
deliverDurableInboundReplyPayloadyerine bir gönderme-bağlamı köprüsü kullanın.- Eski yardımcıyı bir sarmalayıcı olarak tutun.
- Önce Telegram, WhatsApp, Slack, Signal, iMessage ve Discord’u taşıyın; çünkü bunlarda zaten durable-final çalışması veya daha basit gönderme yolları var.
- Her hazırlanmış dispatcher’ı, gönderme bağlamına açıkça dahil olana kadar kapsanmamış kabul edin. Belgeler ve changelog girdileri, tüm otomatik final yanıtlarını kapsadığını iddia etmek yerine “birleştirilmiş kanal dönüşleri” demeli veya taşınan kanal yollarını adlandırmalıdır.
recordInboundSessionAndDispatchReply, doğrudan-DM yardımcıları ve benzer herkese açık uyumluluk yardımcılarını davranışı koruyacak şekilde tutun. Daha sonra açık bir gönderme-bağlamı katılımı sunabilirler, ancak çağıranın sahip olduğu teslim callback’inden önce otomatik olarak genel durable teslimat denememelidirler.
Aşama 5: Birleşik Canlı Yaşam Döngüsü
- İki kanıt adapter’ı ile
messages.liveoluşturun:- Gönderme, düzenleme ve eskimiş final gönderimi için Telegram.
- Taslak finalizasyonu ve redaction fallback için Matrix.
- Ardından Discord, Slack, Mattermost, Teams, QQ Bot ve Feishu’yu taşıyın.
- Yinelenen önizleme finalizasyon kodunu ancak her kanalın eşdeğerlik testleri olduktan sonra silin.
Aşama 6: Herkese Açık SDK
openclaw/plugin-sdk/channel-messageekleyin.- Bunu tercih edilen kanal Plugin API’si olarak belgeleyin.
- Paket export’larını, entrypoint envanterini, üretilmiş API baseline’larını ve Plugin SDK belgelerini güncelleyin.
- Kanal-message SDK yüzeyine
MessageOrigin, origin encode/decode hook’ları ve paylaşılanshouldDropOpenClawEchopredicate’ini dahil edin. - Eski alt yollar için uyumluluk sarmalayıcılarını tutun.
- Paketlenmiş Plugin’ler taşındıktan sonra reply adlı SDK yardımcılarını belgelerde deprecated olarak işaretleyin.
Aşama 7: Tüm Göndericiler
Yanıt olmayan tüm outbound üreticilerimessages.send üzerine taşıyın:
- cron ve heartbeat bildirimleri
- görev tamamlanmaları
- hook sonuçları
- onay istemleri ve onay sonuçları
- message tool gönderimleri
- subagent tamamlama duyuruları
- açık CLI veya Control UI gönderimleri
- otomasyon/broadcast yolları
Aşama 8: Turn’ü Deprecated Yapma
channel.turndeğerini en az bir uyumluluk penceresi boyunca sarmalayıcı olarak tutun.- Geçiş notlarını yayımlayın.
- Eski import’lara karşı Plugin SDK uyumluluk testlerini çalıştırın.
- Eski dahili yardımcıları ancak hiçbir paketlenmiş Plugin bunlara ihtiyaç duymadığında ve üçüncü taraf sözleşmelerin kararlı bir yerine geçen çözümü olduğunda kaldırın veya gizleyin.
Test planı
Birim testleri:- Durable gönderme intent serileştirme ve kurtarma.
- Idempotency key yeniden kullanımı ve yinelenenleri bastırma.
- Receipt commit ve replay atlama.
- Bir adapter reconciliation desteklediğinde replay’den önce uzlaştıran
unknown_after_sendkurtarması. - Hata sınıflandırma politikası.
- Receive ack policy sıralaması.
- Reply, followup, system ve broadcast gönderimleri için ilişki eşlemesi.
- Gateway-failure origin factory ve
shouldDropOpenClawEchopredicate’i. - Payload normalizasyonu, chunking, durable queue serileştirme ve kurtarma boyunca origin’in korunması.
channel.turn.runbasit adapter’ı hâlâ kaydeder ve gönderir.- Eski birleştirilmiş-turn teslimatı, kanal açıkça dahil olmadıkça durable hale gelmez.
channel.turn.runPreparedköprüsü hâlâ kaydeder ve finalize eder.- Herkese açık uyumluluk yardımcıları varsayılan olarak çağıranın sahip olduğu teslim callback’lerini çağırır ve bu callback’lerden önce generic-send yapmaz.
- Durable fallback teslimatı, yeniden başlatmadan sonra tüm projected payload dizisini replay eder ve erken bir çökmeden sonra sonraki payload’ları kayıtsız bırakamaz.
- Durable birleştirilmiş-turn teslimatı, platform mesaj id’lerini buffered dispatcher’a döndürür.
- Özel teslim hook’ları, durable teslimat devre dışı veya kullanılamaz olduğunda da platform mesaj id’lerini döndürür.
- Final yanıt, assistant tamamlaması ile platform gönderimi arasındaki yeniden başlatmadan sağ çıkar.
- Önizleme taslağı izin verildiğinde yerinde finalize edilir.
- Medya/hata/yanıt-hedefi uyuşmazlığı normal teslimat gerektirdiğinde önizleme taslağı iptal edilir veya redacted yapılır.
- Block streaming ve preview streaming aynı metni birlikte teslim etmez.
- Erken stream edilen medya final teslimatta yinelenmez.
- Polling ack’i receive context’in güvenli completed watermark’ına kadar geciktirilmiş Telegram konu yanıtı.
- Kabul edilmiş ama teslim edilmemiş güncellemeler için Telegram polling kurtarması, kalıcı safe-completed offset modeliyle kapsanır.
- Telegram eskimiş önizlemesi yeni final gönderir ve önizlemeyi temizler.
- Telegram sessiz fallback, her projected fallback payload’unu gönderir.
- Telegram sessiz fallback durability, her döngü iterasyonu için tek bir single-payload durable intent değil, tam projected fallback dizisini atomik olarak kaydeder.
- Medya/hata/açık yanıt durumunda Discord önizleme iptali.
- Discord final-reply durability belgelerde veya changelog’da iddia edilmeden önce Discord hazırlanmış dispatcher final’ları gönderme bağlamı üzerinden yönlendirilir.
- iMessage durable final gönderimleri, monitor sent-message echo cache’ini doldurur.
- LINE, BlueBubbles, Zalo ve Nostr eski teslimat yolları, adapter eşdeğerlik testleri var olana kadar genel durable send tarafından bypass edilmez.
- Direct-DM/Nostr callback teslimatı, eksiksiz bir message target’a ve replay-safe send adapter’a açıkça taşınmadıkça authoritative kalır.
- Slack etiketlenmiş OpenClaw Gateway failure mesajları outbound olarak görünür
kalır, etiketlenmiş bot-room echo’ları
allowBotsöncesinde düşer ve aynı görünür metne sahip etiketsiz bot mesajları normal bot yetkilendirmesini izlemeye devam eder. - Üst seviye DM’lerde Slack native stream fallback’i draft preview’e düşer.
- Matrix önizleme finalizasyonu ve redaction fallback.
- Yapılandırılmış bot hesaplarından gelen Matrix etiketlenmiş OpenClaw
gateway-failure oda echo’ları
allowBotsişleme alınmadan önce düşer. - Discord ve Google Chat paylaşımlı-oda gateway-failure cascade denetimleri,
burada genel koruma iddia edilmeden önce
allowBotsmodlarını kapsar. - Mattermost taslak finalizasyonu ve fresh-send fallback.
- Teams native progress finalizasyonu.
- Feishu yinelenen final bastırma.
- QQ Bot accumulator timeout fallback.
- Tlon durable final gönderimleri model-signature rendering ve participated thread tracking’i korur.
- WhatsApp, Signal, iMessage, Google Chat, LINE, IRC, Nostr, Nextcloud Talk, Synology Chat, Tlon, Twitch, Zalo ve Zalo Personal basit durable final gönderimleri.
- Geliştirme sırasında hedeflenmiş Vitest dosyaları.
- Tam changed yüzeyi için Testbox içinde
pnpm check:changed. - Tam refactor’ı land etmeden önce veya herkese açık SDK/export değişiklikleri
sonrasında Testbox içinde daha geniş
pnpm check. - Uyumluluk sarmalayıcılarını kaldırmadan önce en az bir düzenleme-yetenekli kanal ve bir basit yalnızca-gönder kanal için live veya qa-channel smoke.
Açık sorular
- Telegram’ın sonunda grammY runner kaynağını, yalnızca OpenClaw’ın kalıcı restart watermark’ını değil platform düzeyi yeniden teslimatı da kontrol edebilen tamamen durable bir polling source ile değiştirip değiştirmemesi.
- Durable live preview state’in final send intent ile aynı queue kaydında mı, yoksa kardeş bir live-state store’da mı saklanması gerektiği.
plugin-sdk/channel-messagegönderildikten sonra uyumluluk sarmalayıcılarının ne kadar süre belgelenmiş kalacağı.- Üçüncü taraf Plugin’lerin receive adapter’larını doğrudan mı uygulaması
gerektiği, yoksa yalnızca
defineChannelMessageAdapterüzerinden normalize/send/live hook’ları mı sağlaması gerektiği. - Hangi receipt alanlarının herkese açık SDK’da, hangilerinin dahili runtime state’te gösterilmesinin güvenli olduğu.
- Self-echo cache’leri ve participated-thread marker’ları gibi yan etkilerin send-context hook’ları, adapter’a ait finalize adımları veya receipt subscriber’ları olarak mı modellenmesi gerektiği.
- Hangi kanalların native origin metadata’ya sahip olduğu, hangilerinin kalıcı outbound registry’lere ihtiyaç duyduğu ve hangilerinin güvenilir cross-bot echo suppression sunamayacağı.
Kabul ölçütleri
- Paketlenmiş her mesaj kanalı final görünür çıktıyı
messages.sendüzerinden gönderir. - Her inbound mesaj kanalı
messages.receiveveya belgelenmiş bir uyumluluk sarmalayıcısı üzerinden girer. - Her preview/edit/stream kanalı, taslak state ve finalizasyon için
messages.livekullanır. channel.turnyalnızca bir sarmalayıcıdır.- Reply adlı SDK yardımcıları önerilen yol değil, uyumluluk export’larıdır.
- Durable recovery, final yanıtı kaybetmeden veya zaten commit edilmiş gönderimleri yinelemeden yeniden başlatma sonrasında bekleyen final gönderimleri replay edebilir; platform sonucu bilinmeyen gönderimler replay’den önce uzlaştırılır veya o adapter için at-least-once olarak belgelenir.
- Durable final gönderimleri, durable intent yazılamadığında, çağıran açıkça belgelenmiş non-durable bir mod seçmedikçe fail closed davranır.
- Eski channel-turn ve SDK uyumluluk yardımcıları varsayılan olarak doğrudan kanalın sahip olduğu teslimatı kullanır; generic durable send yalnızca açık katılımdır.
- Receipt’ler, çok parçalı teslimatlar için tüm platform mesaj id’lerini ve threading/edit kolaylığı için bir primary id’yi korur.
- Durable sarmalayıcılar, doğrudan teslim callback’lerini değiştirmeden önce kanal-yerel yan etkileri korur.
- Hazırlanmış dispatcher’lar, final teslimat yolları açıkça gönderme bağlamını kullanana kadar durable sayılmaz.
- Fallback teslimatı her projected payload’u işler.
- Durable fallback teslimatı her projected payload’u tek bir replay edilebilir intent veya batch plan içinde kaydeder.
- OpenClaw kaynaklı Gateway failure çıktısı insanlar için görünürdür, ancak etiketlenmiş bot-yazarlı oda echo’ları, origin sözleşmesini desteklediğini bildiren kanallarda bot yetkilendirmesinden önce düşürülür.
- Belgeler send, receive, live, state, receipt’ler, ilişkiler, hata politikası, geçiş ve test kapsamını açıklar.