Bu sayfa, dağınık kanal turn, reply dispatch, önizleme akışı ve giden teslimat yardımcılarını tek bir dayanıklı ileti 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://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Temel ilkel öğeler reply değil, receive ve send olmalıdır.
- Yanıt, yalnızca giden bir ileti üzerindeki ilişkidir.
- Turn, gelen işleme için bir kolaylıktır; teslimatın sahibi değildir.
- Gönderme bağlam tabanlı olmalıdır:
begin, render, preview veya stream, final send, commit, fail. - Alma da bağlam tabanlı olmalıdır: normalize, dedupe, route, record, dispatch, platform ack, fail.
- Herkese açık Plugin SDK tek, küçük bir kanal-ileti yüzeyine indirgenmelidir.
Sorunlar
Mevcut kanal yığını birkaç geçerli yerel ihtiyaçtan doğdu:- 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ü dispatcher’larda yaşar.
- Nihai teslimat dayanıklılığı mevcut yanıt yükü yolları etrafında ekleniyor.
Hedefler
- Tüm kanal iletisi 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ış bildirdikten sonra yeni ileti yaşam döngüsünde varsayılan olarak dayanıklı nihai gönderimler.
- Paylaşılan önizleme, düzenleme, akış, sonlandırma, yeniden deneme, kurtarma ve alındı semantikleri.
- Üçü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 net genişletme noktaları.
- Çekirdekte platforma özgü dallar yok.
- Token-delta kanal iletileri yok. Kanal akışı ileti önizlemesi, düzenleme, ekleme veya tamamlanmış blok teslimatı olarak kalır.
- Görünür Gateway hatalarının paylaşılan bot etkin odalara yeni prompt’lar olarak yeniden girmemesi için operasyonel/sistem çıktısına yönelik yapılandırılmış OpenClaw kaynak metadatası.
Hedef dışı kalanlar
- İlk aşamada
runtime.channel.turn.*kaldırılmayacak. - Her kanal aynı yerel aktarım davranışına zorlanmayacak.
- Çekirdeğe Telegram konuları, Slack yerel akışları, Matrix redaction’ları, Feishu kartları, QQ sesleri 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 herkese açık zihinsel modele sahiptir:ChatThreadChannelMessagepostMessage,editMessage,deleteMessage,stream,startTypingve geçmiş getirmeleri gibi bağdaştırıcı yöntemleri- dedupe, kilitler, kuyruklar ve kalıcılık için bir durum bağdaştırıcısı
- Doğrudan aktarım çağrılarından önce dayanıklı giden gönderim niyetleri.
- Begin, commit ve fail içeren açık gönderim bağlamları.
- Platform ack politikasını bilen alma bağlamları.
- Yeniden başlatmadan sağ çıkan ve düzenleme, silme, kurtarma ve kopya bastırmayı yönlendirebilen alındılar.
- Daha küçük bir herkese açık SDK. Birlikte gelen Plugin’ler dahili çalışma zamanı yardımcılarını kullanabilir, ancak üçüncü taraf Plugin’ler tek, tutarlı bir ileti API’si görmelidir.
- Ajana özgü davranış: oturumlar, transcript’ler, blok akışı, araç ilerlemesi, onaylar, medya yönergeleri, sessiz yanıtlar ve grup mention 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 domainsrc/channels/message/* gibi dahili bir çekirdek namespace 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
dedupe’nun sahibidir.
İleti terimleri
İleti
Normalize edilmiş ileti platformdan bağımsızdır:Hedef
Hedef, iletinin nerede yaşadığını açıklar:İlişki
Yanıt bir ilişkidir, API kökü değildir:Origin
Origin, bir iletiyi kimin ürettiğini ve OpenClaw’ın bu iletinin yankılarını nasıl ele alması gerektiğini açıklar. İlişkiden ayrıdır: bir ileti bir kullanıcıya yanıt olabilir ve yine de OpenClaw kaynaklı operasyonel çıktı olabilir.allowBots etkin olduğunda 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, yalın bir yardımcı çağrısı olmamalıdır. Çekirdeğin dedupe, yönlendirme, oturum kaydı ve platform ack politikasını bilen bir bağlama ihtiyacı vardır.- Aktarım ack’i: platform webhook’una veya socket’ine OpenClaw’ın olay zarfını kabul ettiğini söyler. Bazı platformlar bunu dispatch’ten önce gerektirir.
- Polling offset ack’i: aynı olayın tekrar getirilmemesi için bir imleci ilerletir. Bu, kurtarılamayacak işin ötesine ilerlememelidir.
- Gelen kayıt ack’i: OpenClaw’ın bir yeniden teslimatı dedupe etmek ve yönlendirmek için yeterli gelen metadatasını kalıcılaştırdığını doğrular.
- Kullanıcıya görünür alındı: isteğe bağlı okundu/durum/yazıyor davranışı; asla dayanıklılık sınırı değildir.
ReceiveAckPolicy yalnızca aktarım veya polling onayını kontrol eder. Okundu
alındıları veya durum tepkileri için yeniden kullanılmamalıdır.
Bot yetkilendirmesinden önce, kanal ileti origin metadatasını çözebildiğinde alma
paylaşılan OpenClaw echo politikasını uygulamalıdır:
allowBots yetkilendirmesinden geçer.
Ack politikası açıktır:
getUpdates getirme offset’i hâlâ polling kitaplığı
tarafından kontrol edilir, bu nedenle platform düzeyinde yeniden teslimata
OpenClaw’ın yeniden başlatma watermark’ının ötesinde ihtiyacımız olursa geriye
kalan daha derin değişiklik tamamen dayanıklı bir polling kaynağıdır. Webhook
platformları anında HTTP ack’i gerektirebilir, ancak webhook’lar yeniden teslim
edebildiği için yine de gelen dedupe’ya ve dayanıklı giden gönderim niyetlerine
ihtiyaç duyarlar.
Gönderim bağlamı
Gönderme de bağlam tabanlıdır:unknown_after_send durumunda sürdürülmelidir. Uzlaştırma olmayan kanallar, yinelenen görünür mesajlar o kanal ve ilişki için kabul edilebilir, belgelenmiş bir ödünse yalnızca en az bir kez yeniden oynatmayı seçebilir. Mevcut SDK uzlaştırma köprüsü, adaptörün reconcileUnknownSend bildirmesini gerektirir, ardından durableFinal.reconcileUnknownSend üzerinden bilinmeyen bir kaydı sent, not_sent veya unresolved olarak sınıflandırmasını ister; yalnızca not_sent yeniden oynatmaya izin verir ve çözümlenmemiş kayıtlar terminal durumda kalır ya da yalnızca uzlaştırma denetimini yeniden dener.
Kalıcılık ilkesi açık olmalıdır:
required, kalıcı amacı yazamadığında çekirdeğin kapalı şekilde başarısız olması gerektiği anlamına gelir. best_effort, kalıcılık kullanılamadığında devam edebilir. disabled, eski doğrudan gönderme davranışını korur. Geçiş sırasında eski sarmalayıcılar ve genel uyumluluk yardımcıları varsayılan olarak disabled kullanır; bir kanalın genel bir outbound adaptörü olmasından required sonucunu çıkarmamalıdırlar.
Gönderim bağlamları kanal yerelindeki gönderim sonrası etkilerin de sahibidir. Kalıcı teslimat, 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, iş parçacığı katılım işaretçileri, yerel düzenleme çapaları, model imzası oluşturma ve platforma özgü yinelenen ileti korumaları bulunur. Bu etkiler, ilgili kanal kalıcı genel nihai teslimatı 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ı alındıları çağırana kadar geri döndürmelidir. Kalıcı sarmalayıcılar mesaj kimliklerini yutamaz veya bir kanal teslimat sonucunu undefined ile değiştiremez; tamponlanan dağıtıcılar bu kimlikleri iş parçacığı çapaları, sonraki düzenlemeler, önizleme sonlandırma ve yinelenen ileti bastırma için kullanır.
Geri dönüş gönderimleri tek payload’lar üzerinde değil, batch’ler üzerinde çalışır. Sessiz yanıt yeniden yazımları, medya geri dönüşü, kart geri dönüşü ve parça projeksiyonu birden fazla teslim edilebilir mesaj üretebilir; bu nedenle bir gönderim bağlamı ya projelendirilmiş batch’in tamamını teslim etmeli ya da neden yalnızca bir payload’un geçerli olduğunu açıkça belgelemelidir.
unknown_after_send olarak işaretlemelidir.
Canlı bağlam
Önizleme, düzenleme, ilerleme ve stream davranışı tek bir isteğe bağlı yaşam döngüsü olmalıdır.- Telegram gönderimi ve düzenleme önizlemesi, bayat önizleme yaşından sonra taze nihai iletiyle.
- Discord gönderimi ve düzenleme önizlemesi, medya/hata/açık yanıt durumunda iptal.
- İş parçacığı şekline bağlı olarak Slack yerel stream’i veya taslak önizlemesi.
- Mattermost taslak gönderi sonlandırması.
- Matrix taslak olay sonlandırması veya uyumsuzlukta redaksiyon.
- Teams yerel ilerleme stream’i.
- QQ Bot stream’i veya biriktirilmiş geri dönüş.
Adaptör yüzeyi
Genel SDK hedefi tek bir alt yol olmalıdır:origin.decode OpenClaw kökenli metadata döndürdüğünde çekirdek paylaşılan OpenClaw echo yüklemini çalıştırmalıdır. Alma adaptörü bot yazarı ve oda şekli gibi platform olgularını sağlar; bırakma kararı ve sıralama çekirdeğe aittir, böylece kanallar metin filtrelerini yeniden uygulamaz.
Köken adaptörü:
MessageOrigin ayarlar. Kanallar bunu yalnızca yerel aktarım metadata’sına çevirir ve oradan geri çevirir. Slack bunu chat.postMessage({ metadata }) ve gelen message.metadata ile eşler; Matrix bunu ek olay içeriğine eşleyebilir; yerel metadata olmayan kanallar, mevcut en iyi yaklaşım bu olduğunda bir alındı/outbound kayıt defteri kullanabilir.
Yetenekler:
Genel SDK sadeleştirmesi
Yeni genel yüzey şu kavramsal alanları içine almalı veya kullanım dışı bırakmalıdır:reply-runtimereply-dispatch-runtimereply-referencereply-chunkingreply-payloadinbound-reply-dispatchchannel-reply-pipelineoutbound-runtimegenel kullanımlarının çoğu- geçici taslak stream yaşam döngüsü yardımcıları
plugin-sdk/channel-message yoluna yönlendirmelidir.
Kanal turu 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 başlangıçta da kalmalıdır:
channel.turn kullanım dışı bırakılabilir. Yayınlanmış bir SDK geçiş yolu ve eski Plugin’lerin hâlâ çalıştığını veya açık 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 koruma sınırları
Geçiş sırasında genel kalıcı teslimat, mevcut teslimat callback’i “bu payload’u gönder” dışında yan etkilere sahip olan her kanal için isteğe bağlıdır. Eski giriş noktaları varsayılan olarak kalıcı değildir:channel.turn.runvedispatchAssembledChannelTurn, ilgili kanal açıkça denetlenmiş bir kalıcılık ilkesi/seçenekler nesnesi sağlamadığı sürece kanalın teslimat callback’ini kullanır.channel.turn.runPrepared, hazırlanmış dağıtıcı gönderim bağlamını açıkça çağırana kadar kanal sahipliğinde kalır.recordInboundSessionAndDispatchReply,dispatchInboundReplyWithBaseve doğrudan DM yardımcıları gibi genel uyumluluk yardımcıları, çağıranın sağladığıdeliverveyareplycallback’inden önce asla genel kalıcı teslimat enjekte etmez.
durable: undefined, “kalıcı değil” anlamına gelir. Kalıcı yol yalnızca açık bir ilke/seçenek değeriyle etkinleştirilir. durable: false bir uyumluluk yazımı olarak kalabilir, ancak uygulama geçirilmemiş her kanalın bunu eklemesini gerektirmemelidir.
Mevcut köprü kodu kalıcılık kararını açık tutmalıdır:
- Dayanıklı nihai teslimat, ayrıştırılmış bir durum döndürür.
handled_visiblevehandled_no_sendsonlandırıcıdır;unsupportedvenot_applicable, kanalın sahip olduğu teslimata geri düşebilir;failedgönderme hatasını iletir. - Genel dayanıklı nihai teslimat; sessiz teslimat, yanıt hedefini koruma, yerel alıntıyı koruma ve mesaj gönderme kancaları gibi adaptör yetenekleriyle sınırlandırılır. Eksik denklik, kullanıcıya görünen davranışı değiştiren genel bir gönderimi değil, kanalın sahip olduğu teslimatı seçmelidir.
- Kuyruk destekli dayanıklı gönderimler bir teslimat niyeti referansı sunar.
Mevcut
pendingFinalDelivery*oturum alanları geçiş sırasında niyet kimliğini taşıyabilir; son durum, donmuş yanıt metni artı 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 mesaj kimlikleriyle birlikte alındıları veya teslimat sonuçlarını döndürür.
- Hazırlanmış dispatcher 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üş teslimatı, yalnızca ilkini değil, öngörülen her yükü işler.
- Dayanıklı geri dönüş teslimatı, öngörülen yük dizisinin tamamını tek bir yeniden oynatılabilir niyet veya toplu plan olarak kaydeder.
- iMessage izleyici teslimatı, başarılı bir gönderimden sonra gönderilen mesajları bir yankı önbelleğine kaydeder. Dayanıklı nihai gönderimler yine de bu önbelleği doldurmalıdır; aksi takdirde OpenClaw kendi nihai yanıtlarını gelen kullanıcı mesajları 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ı teslimat bu etkileri atlamamalıdır; bunları ya Tlon işleme/gönderme/sonlandırma adaptörlerine taşıyın ya da Tlon’u kanalın sahip olduğu yolda tutun.
- Discord ve diğer hazırlanmış dispatcher’lar zaten doğrudan teslimata ve önizleme davranışına sahiptir. Hazırlanmış dispatcher’ları nihai yanıtları gönderim bağlamı üzerinden açıkça yönlendirmedikçe, birleştirilmiş dönüş dayanıklı garantisi kapsamında değildirler.
- Telegram sessiz geri dönüş teslimatı, öngörülen yük dizisinin tamamını teslim etmelidir. Tek yük kısayolu, projeksiyondan sonra ek geri dönüş yüklerini düşürebilir.
- LINE, Zalo, Nostr ve diğer mevcut birleştirilmiş/yardımcı yollar; yanıt belirteci işleme, medya proxy’leme, gönderilen mesaj önbellekleri, yükleniyor/durum temizliği veya yalnızca geri çağrı hedeflerine sahip olabilir. Bu semantik gönderim adaptörü tarafından temsil edilip testlerle doğrulanana kadar kanalın sahip olduğu teslimatta kalırlar.
- Doğrudan-DM yardımcıları, tek doğru taşıma hedefi olan bir yanıt geri
çağrısına sahip olabilir. Genel giden ileti,
OriginatingToveyaToüzerinden tahminde bulunup bu geri çağrıyı atlamamalıdır. - OpenClaw gateway hata çıktısı insanlar için 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 durdurma dışında görünür metin öneki filtreleriyle uygulamamalıdır; dayanıklı sözleşme yapılandırılmış kaynak meta verisidir.
Dahili depolama
Dayanıklı kuyruk, yanıt yüklerini değil, mesaj gönderme niyetlerini depolamalıdır.Hata sınıfları
Kanal adaptörleri taşıma hatalarını kapalı kategorilere ayı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 beyan ettiğinde canlı sonlandırmanın düzenlemeden yeni gönderime geri düşmesine izin verin.conflictiçin, mesajın zaten var olup olmadığına karar vermek üzere alındı/ idempotency kurallarını kullanın.- Adaptör platform G/Ç’sini tamamlamış olabileceği halde alındı kaydından önce
oluşan herhangi bir hata, adaptör platform işleminin gerçekleşmediğini
kanıtlayamazsa
unknown_after_sendolur.
Kanal eşlemesi
| Kanal | Hedef geçiş |
|---|---|
| Telegram | Alım onay ilkesi ve dayanıklı nihai gönderimler. Canlı adaptör gönderim ile düzenleme önizlemesini, bayat önizlemenin 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ılan Gateway hatası yankılarını denetleyin; Discord normal mesajlarda köken üst verisini taşıyamıyorsa bir çıkış 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, iş parçacığı yapısı desteklediğinde yerel akışı, aksi halde taslak önizlemeyi seçer. Alındılar iş parçacığı 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ü dayanıklı nihai niyetlerle metin/medya gönderimini üstlenir. Alma adaptörü grup bahsini ve gönderen kimliğini işler. WhatsApp düzenlenebilir bir taşıma sunana kadar canlı adaptör olmayabilir. | |
| Matrix | Canlı adaptör taslak olay düzenlemelerini, nihai hale getirmeyi, redaksiyonu, şifreli medya kısıtlarını ve yanıt hedefi uyuşmazlığı yedek yolunu üstlenir. Alma adaptörü şifreli olay hidrasyonunu ve tekilleştirmeyi üstlenir. Köken adaptörü OpenClaw Gateway hatası kökenini Matrix olay içeriğine kodlamalı ve yapılandırılmış bot oda yankılarını allowBots işlemeden önce düşürmelidir. |
| Mattermost | Canlı adaptör tek bir taslak gönderiyi, ilerleme/araç katlamayı, yerinde nihai hale getirmeyi 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 metnin ses olarak kullanılmasını üstlenir. |
| Signal | Basit alma ve gönderim adaptörü. signal-cli güvenilir düzenleme desteği eklemediği sürece canlı adaptör yok. |
| iMessage | Basit alma ve gönderim adaptörü. iMessage gönderimi, dayanıklı nihai gönderimler izleyici teslimini atlayabilmeden önce izleyici yankı önbelleği doldurmasını korumalıdır. |
| Google Chat | Alanlara ve iş parçacığı kimliklerine eşlenen iş parçacığı ilişkisiyle basit alma ve gönderim adaptörü. Etiketlenmiş OpenClaw Gateway hatası yankıları için allowBots=true oda davranışını denetleyin. |
| LINE | Hedef/ilişki yeteneği olarak modellenmiş yanıt belirteci kısıtlarıyla basit alma ve gönderim adaptörü. |
| Nextcloud Talk | SDK alma köprüsü ve gönderim adaptörü. |
| IRC | Basit alma ve gönderim adaptörü, dayanıklı düzenleme alındıları yok. |
| Nostr | Şifreli DM’ler için alma ve gönderim adaptörü; alındılar olay kimlikleridir. |
| QA Kanalı | Alma, gönderim, canlı, yeniden deneme ve kurtarma davranışı için sözleşme testi adaptörü. |
| Synology Chat | Basit alma ve gönderim adaptörü. |
| Tlon | Gönderim adaptörü, genel dayanıklı nihai teslim etkinleştirilmeden önce model imzası işlemeyi ve katılınmış iş parçacığı takibini korumalıdır. |
| Twitch | Hız sınırı sınıflandırmasıyla basit alma ve gönderim adaptörü. |
| Zalo | Basit alma ve gönderim adaptörü. |
| Zalo Personal | Basit alma ve gönderim adaptörü. |
Geçiş planı
Aşama 1: Dahili Mesaj Etki Alanı
- Mesajlar, hedefler, ilişkiler,
kökenler, alındılar, yetenekler, dayanıklı niyetler, alma bağlamı, gönderim
bağlamı, canlı bağlam ve hata sınıfları için
src/channels/message/*türleri ekleyin. - Mevcut yanıt teslimi tarafından kullanılan geçiş köprüsü yük türüne
origin?: MessageOriginekleyin, ardından yeniden düzenleme yanıt yüklerinin yerini aldıkça 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 çıkış kuyruğunu yanıt-yükü dayanıklılığından dayanıklı mesaj gönderim niyetlerine taşıyın.
- Dayanıklı gönderim niyetinin yalnızca tek bir yanıt yükü değil, öngörülen bir yük dizisi veya toplu iş planı taşımasına izin verin.
- Uyumluluk dönüştürmesi 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ı şekilde hata verin. Mevcut kanal turu ve SDK uyumluluk yolları bu aşamada varsayılan olarak doğrudan gönderim olarak kalır.
- Alındıları tutarlı şekilde kaydedin.
- Dayanıklı gönderimi terminal bir yan etki olarak ele almak yerine, alındıları ve teslim sonuçlarını özgün dağıtıcı çağırana döndürün.
- Kurtarma, yeniden oynatma ve parçalı gönderimler OpenClaw operasyonel kökenini korusun diye mesaj kökenini dayanıklı gönderim niyetleri üzerinden kalıcı hale getirin.
Aşama 3: Kanal Turu Köprüsü
channel.turn.runvedispatchAssembledChannelTurnişlevlerinimessages.receivevemessages.sendüzerine yeniden uygulayın.- Mevcut olgu türlerini kararlı tutun.
- Eski davranışı varsayılan olarak koruyun. Birleştirilmiş tur kanalı yalnızca adaptörü yeniden oynatma açısından güvenli bir dayanıklılık ilkesiyle açıkça katıldığında dayanıklı hale gelir.
- Yerel düzenlemeleri nihai hale getiren ve henüz güvenli şekilde yeniden oynatamayan yollar için
uyumluluk kaçış noktası olarak
durable: falsedeğerini koruyun, ancak taşınmamış 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 semantiklerini koruduğunu kanıtladıktan sonra varsayılan yapın.
Aşama 4: Hazırlanmış Dağıtıcı Köprüsü
deliverDurableInboundReplyPayloadyerine bir gönderim bağlamı köprüsü koyun.- Eski yardımcıyı bir sarmalayıcı olarak tutun.
- Önce Telegram, WhatsApp, Slack, Signal, iMessage ve Discord’u taşıyın; çünkü bunlarda zaten dayanıklı final çalışması veya daha basit gönderim yolları var.
- Açıkça gönderim bağlamına katılana kadar her hazırlanmış dağıtıcıyı kapsam dışı kabul edin. Dokümantasyon ve changelog girdileri, tüm otomatik final yanıtlarını iddia etmek yerine “assembled channel turns” demeli veya taşınan kanal yollarını adlandırmalıdır.
recordInboundSessionAndDispatchReply, doğrudan DM yardımcıları ve benzer genel uyumluluk yardımcılarının davranışını koruyun. Daha sonra açık bir gönderim bağlamı katılımı sunabilirler, ancak çağıranın sahip olduğu teslim geri çağrısından önce otomatik olarak genel dayanıklı teslimat denememelidirler.
Aşama 5: Birleşik Canlı Yaşam Döngüsü
messages.liveöğesini iki kanıt bağdaştırıcısıyla oluşturun:- Gönderim, düzenleme ve eski final gönderimi için Telegram.
- Taslak finalizasyonu ve düzeltme yedeği için Matrix.
- Ardından Discord, Slack, Mattermost, Teams, QQ Bot ve Feishu’yu taşıyın.
- Yinelenen önizleme finalizasyon kodunu yalnızca her kanalın eşdeğerlik testleri olduktan sonra silin.
Aşama 6: Genel SDK
openclaw/plugin-sdk/channel-messageekleyin.- Bunu tercih edilen kanal Plugin API’si olarak belgeleyin.
- Paket dışa aktarımlarını, giriş noktası envanterini, üretilen API temellerini ve Plugin SDK dokümantasyonunu güncelleyin.
- Kanal-ileti SDK yüzeyine
MessageOrigin, origin kodlama/kod çözme hook’ları ve paylaşılanshouldDropOpenClawEchopredicate’ini dahil edin. - Eski alt yollar için uyumluluk sarmalayıcılarını tutun.
- Paketli Plugin’ler taşındıktan sonra yanıta göre adlandırılmış SDK yardımcılarını dokümantasyonda kullanımdan kaldırılmış olarak işaretleyin.
Aşama 7: Tüm Göndericiler
Tüm yanıt dışı giden üreticilerimessages.send üzerine taşıyın:
- Cron ve Heartbeat bildirimleri
- görev tamamlamaları
- hook sonuçları
- onay istemleri ve onay sonuçları
- ileti aracı gönderimleri
- alt ajan tamamlanma duyuruları
- açık CLI veya Control UI gönderimleri
- otomasyon/yayın yolları
Aşama 8: Turn’ü Kullanımdan Kaldırma
channel.turnöğesini en az bir uyumluluk penceresi boyunca sarmalayıcı olarak tutun.- Geçiş notlarını yayımlayın.
- Eski içe aktarımlara karşı Plugin SDK uyumluluk testlerini çalıştırın.
- Eski dahili yardımcıları yalnızca hiçbir paketli Plugin bunlara ihtiyaç duymadığında ve üçüncü taraf sözleşmelerin kararlı bir ikamesi olduğunda kaldırın veya gizleyin.
Test planı
Birim testleri:- Dayanıklı gönderim amacı serileştirme ve kurtarma.
- Idempotency anahtarı yeniden kullanımı ve yineleme baskılama.
- Alındı kaydı commit’i ve yeniden oynatma atlama.
- Bir bağdaştırıcı uzlaştırmayı desteklediğinde yeniden oynatmadan önce
uzlaştıran
unknown_after_sendkurtarması. - Hata sınıflandırma politikası.
- Alma onayı politikası sıralaması.
- Yanıt, takip, sistem ve yayın gönderimleri için ilişki eşlemesi.
- Gateway hatası origin fabrikası ve
shouldDropOpenClawEchopredicate’i. - Yük normalizasyonu, parçalama, dayanıklı kuyruk serileştirmesi ve kurtarma boyunca origin koruması.
channel.turn.runbasit bağdaştırıcısı hâlâ kaydeder ve gönderir.- Eski assembled-turn teslimatı, kanal açıkça katılmadıkça dayanıklı hale gelmez.
channel.turn.runPreparedköprüsü hâlâ kaydeder ve finalize eder.- Genel uyumluluk yardımcıları varsayılan olarak çağıranın sahip olduğu teslim geri çağrılarını çağırır ve bu geri çağrılardan önce genel gönderim yapmaz.
- Dayanıklı yedek teslimat, yeniden başlatmadan sonra tüm projeksiyonu yapılan yük dizisini yeniden oynatır ve erken bir çökmeden sonra sonraki yüklerin kaydedilmeden kalmasına izin veremez.
- Dayanıklı assembled-turn teslimatı, platform ileti kimliklerini tamponlanmış dağıtıcıya döndürür.
- Özel teslim hook’ları, dayanıklı teslimat devre dışı veya kullanılamazken de platform ileti kimliklerini döndürür.
- Final yanıtı, asistan 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 düzeltilir.
- Blok akışı ve önizleme akışı aynı metni ikisi birden teslim etmez.
- Erken akışla gönderilen medya final teslimatta yinelenmez.
- Telegram konu yanıtında polling onayı, alma bağlamının güvenli tamamlanmış watermark’ına kadar geciktirilir.
- Kabul edilmiş ancak teslim edilmemiş güncellemeler için Telegram polling kurtarması, kalıcı güvenli-tamamlanmış offset modeliyle kapsanır.
- Telegram eski önizlemesi yeni final gönderir ve önizlemeyi temizler.
- Telegram sessiz yedeği, projeksiyonu yapılan her yedek yükü gönderir.
- Telegram sessiz yedek dayanıklılığı, tam projeksiyonu yapılan yedek dizisini her döngü yinelemesi için tek bir tek-yük dayanıklı amacı olarak değil, atomik olarak kaydeder.
- Medya/hata/açık yanıt durumunda Discord önizleme iptali.
- Discord hazırlanmış dağıtıcı finalleri, dokümanlar veya changelog Discord final-yanıt dayanıklılığı iddia etmeden önce gönderim bağlamından geçer.
- iMessage dayanıklı final gönderimleri, izleyici gönderilen-ileti yankı önbelleğini doldurur.
- LINE, Zalo ve Nostr eski teslimat yolları, bağdaştırıcı eşdeğerlik testleri var olana kadar genel dayanıklı gönderim tarafından atlanmaz.
- Direct-DM/Nostr geri çağrılı teslimat, açıkça eksiksiz bir ileti hedefine ve yeniden oynatma güvenli gönderim bağdaştırıcısına taşınmadıkça yetkili kalır.
- Slack etiketli OpenClaw Gateway hatası iletileri giden tarafta görünür kalır,
etiketli bot-odası yankıları
allowBotsöncesinde düşer ve aynı görünür metne sahip etiketsiz bot iletileri normal bot yetkilendirmesini izlemeye devam eder. - Üst düzey DM’lerde Slack yerel akış yedeği taslak önizlemeye düşer.
- Matrix önizleme finalizasyonu ve düzeltme yedeği.
- Yapılandırılmış bot hesaplarından gelen Matrix etiketli OpenClaw Gateway
hatası oda yankıları,
allowBotsişlenmeden önce düşer. - Discord ve Google Chat paylaşımlı oda Gateway hatası cascade denetimleri,
orada genel koruma iddia etmeden önce
allowBotsmodlarını kapsar. - Mattermost taslak finalizasyonu ve yeni-gönderim yedeği.
- Teams yerel ilerleme finalizasyonu.
- Feishu yinelenen final baskılaması.
- QQ Bot biriktirici zaman aşımı yedeği.
- Tlon dayanıklı final gönderimleri model-imzası görüntülemesini ve katılım sağlanan konu izlemeyi korur.
- WhatsApp, Signal, iMessage, Google Chat, LINE, IRC, Nostr, Nextcloud Talk, Synology Chat, Tlon, Twitch, Zalo ve Zalo Personal basit dayanıklı final gönderimleri.
- Geliştirme sırasında hedeflenmiş Vitest dosyaları.
- Tam değişen yüzey için Testbox içinde
pnpm check:changed. - Tam refactor indirilmeden veya genel SDK/dışa aktarım değişikliklerinden önce
Testbox içinde daha geniş
pnpm check. - Uyumluluk sarmalayıcıları kaldırmadan önce en az bir düzenleme yetenekli kanal ve bir basit yalnızca-gönderim kanalı için canlı veya qa-channel smoke.
Açık sorular
- Telegram’ın sonunda grammY runner kaynağını, yalnızca OpenClaw’ın kalıcı yeniden başlatma watermark’ını değil, platform düzeyinde yeniden teslimatı kontrol edebilen tamamen dayanıklı bir polling kaynağıyla değiştirip değiştirmemesi gerektiği.
- Dayanıklı canlı önizleme durumunun final gönderim amacıyla aynı kuyruk kaydında mı yoksa kardeş bir canlı-durum deposunda mı saklanması gerektiği.
plugin-sdk/channel-messageyayımlandıktan sonra uyumluluk sarmalayıcılarının ne kadar süre belgeli kalacağı.- Üçüncü taraf Plugin’lerin alma bağdaştırıcılarını doğrudan mı uygulaması
gerektiği, yoksa
defineChannelMessageAdapterüzerinden yalnızca normalize/send/live hook’ları mı sağlaması gerektiği. - Hangi alındı alanlarının genel SDK’da, hangilerinin dahili çalışma zamanı durumunda açığa çıkarılmasının güvenli olduğu.
- Öz-yankı önbellekleri ve katılım sağlanan konu işaretçileri gibi yan etkilerin gönderim bağlamı hook’ları, bağdaştırıcıya ait finalize adımları veya alındı aboneleri olarak modellenip modellenmemesi gerektiği.
- Hangi kanalların yerel origin meta verisine sahip olduğu, hangilerinin kalıcı giden kayıt defterlerine ihtiyaç duyduğu ve hangilerinin güvenilir botlar arası yankı baskılama sunamayacağı.
Kabul kriterleri
- Her paketli ileti kanalı, final görünür çıktıyı
messages.sendüzerinden gönderir. - Her gelen ileti kanalı
messages.receiveveya belgeli bir uyumluluk sarmalayıcısı üzerinden girer. - Her önizleme/düzenleme/akış kanalı, taslak durumu ve finalizasyon için
messages.livekullanır. channel.turnyalnızca bir sarmalayıcıdır.- Yanıta göre adlandırılmış SDK yardımcıları, önerilen yol değil, uyumluluk dışa aktarımlarıdır.
- Dayanıklı kurtarma, yeniden başlatmadan sonra bekleyen final gönderimleri final yanıtı kaybetmeden veya zaten commit edilmiş gönderimleri yinelemeden yeniden oynatabilir; platform sonucu bilinmeyen gönderimler yeniden oynatmadan önce uzlaştırılır veya o bağdaştırıcı için at-least-once olarak belgelenir.
- Dayanıklı final gönderimleri, dayanıklı amaç yazılamadığında kapalı hata verir; yalnızca çağıran açıkça belgeli bir dayanıklı olmayan mod seçtiyse bu geçerli değildir.
- Eski channel-turn ve SDK uyumluluk yardımcıları varsayılan olarak doğrudan kanalın sahip olduğu teslimatı kullanır; genel dayanıklı gönderim yalnızca açık katılımdır.
- Alındılar, çok parçalı teslimatlar için tüm platform ileti kimliklerini ve konu/düzenleme kolaylığı için birincil kimliği korur.
- Dayanıklı sarmalayıcılar, doğrudan teslim geri çağrılarını değiştirmeden önce kanal-yerel yan etkileri korur.
- Hazırlanmış dağıtıcılar, final teslimat yolları açıkça gönderim bağlamını kullanana kadar dayanıklı sayılmaz.
- Yedek teslimat, projeksiyonu yapılan her yükü işler.
- Dayanıklı yedek teslimat, projeksiyonu yapılan her yükü tek bir yeniden oynatılabilir amaç veya toplu plan içinde kaydeder.
- OpenClaw kaynaklı Gateway hatası çıktısı insanlar tarafından görünürdür, ancak etiketli bot yazarlı oda yankıları, origin sözleşmesi desteğini bildiren kanallarda bot yetkilendirmesinden önce düşürülür.
- Dokümanlar gönderim, alma, canlı, durum, alındılar, ilişkiler, hata politikası, geçiş ve test kapsamını açıklar.