Mattermost
Durum: paketlenmiş eklenti (bot token + WebSocket olayları). Kanallar, gruplar ve DM’ler desteklenir. Mattermost, kendi barındırılabilen bir ekip mesajlaşma platformudur; ürün ayrıntıları ve indirmeler için resmi site olan mattermost.com adresine bakın.Paketlenmiş eklenti
Mattermost, güncel OpenClaw sürümlerinde paketlenmiş bir eklenti olarak gelir; bu nedenle normal paketlenmiş derlemelerde ayrı bir kurulum gerekmez. Daha eski bir derlemedeyseniz veya Mattermost’u içermeyen özel bir kurulum kullanıyorsanız, elle yükleyin: CLI ile yükleme (npm kayıt defteri):Hızlı kurulum
- Mattermost eklentisinin kullanılabilir olduğundan emin olun.
- Güncel paketlenmiş OpenClaw sürümleri bunu zaten içerir.
- Daha eski/özel kurulumlar bunu yukarıdaki komutlarla elle ekleyebilir.
- Bir Mattermost bot hesabı oluşturun ve bot token değerini kopyalayın.
- Mattermost temel URL’sini kopyalayın (örneğin
https://chat.example.com). - OpenClaw’ı yapılandırın ve ağ geçidini başlatın.
Yerel slash komutları
Yerel slash komutları isteğe bağlıdır. Etkinleştirildiğinde OpenClaw, Mattermost API üzerindenoc_* slash komutlarını kaydeder ve ağ geçidi HTTP sunucusunda
geri çağırım POST isteklerini alır.
native: "auto"Mattermost için varsayılan olarak devre dışıdır. Etkinleştirmek içinnative: trueayarlayın.callbackUrlatlanırsa OpenClaw bunu ağ geçidi ana makinesi/portunun vecallbackPathdeğerinin birleşiminden türetir.- Çoklu hesap kurulumlarında
commands, üst düzeyde veyachannels.mattermost.accounts.<id>.commandsaltında ayarlanabilir (hesap değerleri üst düzey alanları geçersiz kılar). - Komut geri çağırımları, OpenClaw’ın
oc_*komutlarını kaydederken Mattermost’un döndürdüğü komut başına token’larla doğrulanır. - Slash geri çağırımları; kayıt başarısız olduysa, başlangıç kısmi kaldıysa veya geri çağırım token’ı kayıtlı komutlardan biriyle eşleşmiyorsa kapalı başarısız olur.
- Erişilebilirlik gereksinimi: geri çağırım uç noktasına Mattermost sunucusundan erişilebilmelidir.
- Mattermost, OpenClaw ile aynı ana makinede/ağ ad alanında çalışmıyorsa
callbackUrliçinlocalhostayarlamayın. - Bu URL,
/api/channels/mattermost/commandyolunu OpenClaw’a ters proxy ile yönlendirmiyorsacallbackUrliçin Mattermost temel URL’nizi ayarlamayın. - Hızlı bir kontrol olarak
curl https://<gateway-host>/api/channels/mattermost/commandçalıştırabilirsiniz; bir GET isteği404değil, OpenClaw’dan405 Method Not Alloweddöndürmelidir.
- Mattermost, OpenClaw ile aynı ana makinede/ağ ad alanında çalışmıyorsa
- Mattermost çıkış allowlist gereksinimi:
- Geri çağırımınız private/tailnet/internal adresleri hedefliyorsa, geri çağırım ana makinesini/alan adını içerecek şekilde Mattermost
ServiceSettings.AllowedUntrustedInternalConnectionsayarını yapın. - Tam URL değil, ana makine/alan adı girdileri kullanın.
- İyi:
gateway.tailnet-name.ts.net - Kötü:
https://gateway.tailnet-name.ts.net
- İyi:
- Geri çağırımınız private/tailnet/internal adresleri hedefliyorsa, geri çağırım ana makinesini/alan adını içerecek şekilde Mattermost
Ortam değişkenleri (varsayılan hesap)
Ortam değişkenlerini tercih ediyorsanız bunları ağ geçidi ana makinesinde ayarlayın:MATTERMOST_BOT_TOKEN=...MATTERMOST_URL=https://chat.example.com
default) için geçerlidir. Diğer hesaplar yapılandırma değerlerini kullanmalıdır.
Sohbet kipleri
Mattermost, DM’lere otomatik olarak yanıt verir. Kanal davranışıchatmode ile kontrol edilir:
oncall(varsayılan): kanallarda yalnızca @mention yapıldığında yanıt verir.onmessage: her kanal mesajına yanıt verir.onchar: bir mesaj tetikleyici önekle başladığında yanıt verir.
onchar, açık @mention’lara yine de yanıt verir.channels.mattermost.requireMentioneski yapılandırmalarda dikkate alınır ancakchatmodetercih edilir.
Threading ve oturumlar
Kanal ve grup yanıtlarının ana kanalda mı kalacağını yoksa tetikleyici gönderinin altında bir thread mi başlatacağını kontrol etmek içinchannels.mattermost.replyToMode kullanın.
off(varsayılan): yalnızca gelen gönderi zaten bir thread içindeyse bir thread içinde yanıt verir.first: üst düzey kanal/grup gönderileri için bu gönderinin altında bir thread başlatır ve konuşmayı thread kapsamlı bir oturuma yönlendirir.all: bugün Mattermost içinfirstile aynı davranışı gösterir.- Doğrudan mesajlar bu ayarı yok sayar ve thread kullanılmadan kalır.
- Thread kapsamlı oturumlar, tetikleyici gönderi kimliğini thread kökü olarak kullanır.
firstveallşu anda eşdeğerdir çünkü Mattermost bir thread köküne sahip olduğunda devam parçaları ve medya aynı thread içinde sürer.
Erişim denetimi (DM’ler)
- Varsayılan:
channels.mattermost.dmPolicy = "pairing"(bilinmeyen göndericiler bir eşleştirme kodu alır). - Onaylama:
openclaw pairing list mattermostopenclaw pairing approve mattermost <CODE>
- Herkese açık DM’ler:
channels.mattermost.dmPolicy="open"vechannels.mattermost.allowFrom=["*"].
Kanallar (gruplar)
- Varsayılan:
channels.mattermost.groupPolicy = "allowlist"(mention geçitli). channels.mattermost.groupAllowFromile göndericileri allowlist’e ekleyin (kullanıcı kimlikleri önerilir).- Kanal başına mention geçersiz kılmaları
channels.mattermost.groups.<channelId>.requireMentionaltında veya varsayılan içinchannels.mattermost.groups["*"].requireMentionaltında bulunur. @usernameeşleştirmesi değişkendir ve yalnızcachannels.mattermost.dangerouslyAllowNameMatching: trueolduğunda etkindir.- Açık kanallar:
channels.mattermost.groupPolicy="open"(mention geçitli). - Çalışma zamanı notu:
channels.mattermosttamamen yoksa, çalışma zamanı grup kontrolleri içingroupPolicy="allowlist"varsayımına döner (channels.defaults.groupPolicyayarlı olsa bile).
Giden teslimat hedefleri
Bu hedef biçimleriniopenclaw message send veya cron/webhook’larla kullanın:
- Bir kanal için
channel:<id> - Bir DM için
user:<id> - Bir DM için
@username(Mattermost API üzerinden çözülür)
64ifufp... gibi) Mattermost’ta belirsizdir (kullanıcı kimliği mi kanal kimliği mi).
OpenClaw bunları önce kullanıcı olacak şekilde çözümler:
- Kimlik bir kullanıcı olarak varsa (
GET /api/v4/users/<id>başarılı olursa), OpenClaw/api/v4/channels/directüzerinden doğrudan kanalı çözümleyerek bir DM gönderir. - Aksi halde kimlik bir kanal kimliği olarak değerlendirilir.
user:<id> / channel:<id>).
DM kanal yeniden denemesi
OpenClaw bir Mattermost DM hedefine gönderim yaparken önce doğrudan kanalı çözümlemek zorundaysa, geçici doğrudan kanal oluşturma hatalarını varsayılan olarak yeniden dener. Bu davranışı Mattermost eklentisi genelinde ayarlamak içinchannels.mattermost.dmChannelRetry,
tek bir hesap için ayarlamak için channels.mattermost.accounts.<id>.dmChannelRetry kullanın.
- Bu yalnızca DM kanal oluşturma işlemi (
/api/v4/channels/direct) için geçerlidir, her Mattermost API çağrısı için değil. - Yeniden denemeler; hız sınırları, 5xx yanıtları ve ağ veya zaman aşımı hataları gibi geçici hatalara uygulanır.
429dışındaki 4xx istemci hataları kalıcı kabul edilir ve yeniden denenmez.
Tepkiler (mesaj aracı)
channel=mattermostilemessage action=reactkullanın.messageId, Mattermost gönderi kimliğidir.emoji,thumbsupveya:+1:gibi adları kabul eder (iki nokta üst üste işaretleri isteğe bağlıdır).- Bir tepkiyi kaldırmak için
remove=true(boolean) ayarlayın. - Tepki ekleme/kaldırma olayları, yönlendirilen aracı oturumuna sistem olayları olarak iletilir.
channels.mattermost.actions.reactions: tepki eylemlerini etkinleştirir/devre dışı bırakır (varsayılan true).- Hesap başına geçersiz kılma:
channels.mattermost.accounts.<id>.actions.reactions.
Etkileşimli düğmeler (mesaj aracı)
Tıklanabilir düğmeler içeren mesajlar gönderin. Kullanıcı bir düğmeye tıkladığında aracı seçimi alır ve yanıt verebilir. Kanal yeteneklerineinlineButtons ekleyerek düğmeleri etkinleştirin:
buttons parametresiyle message action=send kullanın. Düğmeler 2 boyutlu bir dizidir (düğme satırları):
text(gerekli): görüntülenecek etiket.callback_data(gerekli): tıklama sırasında geri gönderilen değer (eylem kimliği olarak kullanılır).style(isteğe bağlı):"default","primary"veya"danger".
- Tüm düğmeler bir onay satırıyla değiştirilir (örneğin, ”✓ Yes @user tarafından seçildi”).
- Aracı seçimi gelen mesaj olarak alır ve yanıt verir.
- Düğme geri çağırımları HMAC-SHA256 doğrulaması kullanır (otomatik, yapılandırma gerekmez).
- Mattermost, API yanıtlarından callback verilerini çıkarır (güvenlik özelliği), bu nedenle tıklamada tüm düğmeler kaldırılır — kısmi kaldırma mümkün değildir.
- Tire veya alt çizgi içeren eylem kimlikleri otomatik olarak temizlenir (Mattermost yönlendirme sınırlaması).
channels.mattermost.capabilities: yetenek dizgesi dizisi. Aracı sistem isteminde düğmeler aracı açıklamasını etkinleştirmek için"inlineButtons"ekleyin.channels.mattermost.interactions.callbackBaseUrl: düğme geri çağırımları için isteğe bağlı harici temel URL (örneğinhttps://gateway.example.com). Mattermost ağ geçidine doğrudan bağlandığı ana makineden erişemediğinde bunu kullanın.- Çoklu hesap kurulumlarında aynı alanı
channels.mattermost.accounts.<id>.interactions.callbackBaseUrlaltında da ayarlayabilirsiniz. interactions.callbackBaseUrlatlanırsa OpenClaw geri çağırım URL’sinigateway.customBindHost+gateway.portdeğerlerinden türetir, ardındanhttp://localhost:<port>değerine döner.- Erişilebilirlik kuralı: düğme geri çağırım URL’sine Mattermost sunucusundan erişilebilmelidir.
localhostyalnızca Mattermost ve OpenClaw aynı ana makinede/ağ ad alanında çalışıyorsa işe yarar. - Geri çağırım hedefiniz private/tailnet/internal ise, onun ana makinesini/alan adını Mattermost
ServiceSettings.AllowedUntrustedInternalConnectionsayarına ekleyin.
Doğrudan API entegrasyonu (harici betikler)
Harici betikler ve webhook’lar, aracınınmessage aracı üzerinden gitmek yerine
düğmeleri doğrudan Mattermost REST API üzerinden gönderebilir. Mümkün olduğunda uzantıdaki
buildButtonAttachments() işlevini kullanın; ham JSON gönderiyorsanız şu kurallara uyun:
Payload yapısı:
- Attachment’lar üst düzey
attachmentsiçinde değil,props.attachmentsiçinde olmalıdır (aksi halde sessizce yok sayılır). - Her eylem
type: "button"içermelidir — bu olmadan tıklamalar sessizce yutulur. - Her eylem bir
idalanına ihtiyaç duyar — Mattermost kimlik olmadan eylemleri yok sayar. - Eylem
iddeğeri yalnızca alfanümerik olmalıdır ([a-zA-Z0-9]). Tire ve alt çizgi Mattermost’un sunucu tarafı eylem yönlendirmesini bozar (404 döndürür). Kullanmadan önce bunları çıkarın. context.action_id, düğmeniniddeğeriyle eşleşmelidir; böylece onay mesajında ham kimlik yerine düğme adı görünür (örneğin “Approve”).context.action_idgereklidir — etkileşim işleyicisi bu olmadan 400 döndürür.
- Gizli anahtarı bot token’dan türetin:
HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken) _tokenhariç tüm alanlarla bağlam nesnesini oluşturun.- Sıralanmış anahtarlar ve boşluksuz olacak şekilde serileştirin (ağ geçidi sıralanmış anahtarlarla
JSON.stringifykullanır; bu da sıkıştırılmış çıktı üretir). - İmzalama:
HMAC-SHA256(key=secret, data=serializedContext) - Ortaya çıkan hex özetini bağlam içine
_tokenolarak ekleyin.
- Python’un
json.dumpsişlevi varsayılan olarak boşluk ekler ({"key": "val"}). JavaScript’in sıkıştırılmış çıktısıyla ({"key":"val"}) eşleşmesi içinseparators=(",", ":")kullanın. - Her zaman tüm bağlam alanlarını (
_tokenhariç) imzalayın. Ağ geçidi_tokenalanını çıkarır, sonra kalan her şeyi imzalar. Bir alt kümenin imzalanması sessiz doğrulama hatasına yol açar. sort_keys=Truekullanın — ağ geçidi imzalamadan önce anahtarları sıralar ve Mattermost payload’u saklarken bağlam alanlarının sırasını değiştirebilir.- Gizli anahtarı rastgele baytlardan değil, bot token’dan türetin (belirlenimli). Gizli anahtar, düğmeleri oluşturan işlemle doğrulayan ağ geçidinde aynı olmalıdır.
Dizin bağdaştırıcısı
Mattermost eklentisi, kanal ve kullanıcı adlarını Mattermost API üzerinden çözen bir dizin bağdaştırıcısı içerir. Bu sayedeopenclaw message send ve cron/webhook teslimatlarında #channel-name ve @username hedefleri kullanılabilir.
Yapılandırma gerekmez — bağdaştırıcı hesap yapılandırmasındaki bot token’ı kullanır.
Çoklu hesap
Mattermost,channels.mattermost.accounts altında birden çok hesabı destekler:
Sorun giderme
- Kanallarda yanıt yok: botun kanalda olduğundan emin olun ve onu mention yapın (
oncall), bir tetikleyici önek kullanın (onchar) veyachatmode: "onmessage"ayarlayın. - Kimlik doğrulama hataları: bot token’ı, temel URL’yi ve hesabın etkin olup olmadığını kontrol edin.
- Çoklu hesap sorunları: ortam değişkenleri yalnızca
defaulthesabı için geçerlidir. - Yerel slash komutları
Unauthorized: invalid command token.döndürüyor: OpenClaw geri çağırım token’ını kabul etmedi. Tipik nedenler:- slash komutu kaydı başarısız oldu veya başlangıçta yalnızca kısmen tamamlandı
- geri çağırım yanlış ağ geçidine/hesaba gidiyor
- Mattermost hâlâ önceki bir geri çağırım hedefine işaret eden eski komutlara sahip
- ağ geçidi, slash komutlarını yeniden etkinleştirmeden yeniden başlatıldı
- Yerel slash komutları çalışmayı bırakırsa şu günlük girdilerini kontrol edin:
mattermost: failed to register slash commandsveyamattermost: native slash commands enabled but no commands could be registered. callbackUrlatlanırsa ve günlüklerde geri çağırımınhttp://127.0.0.1:18789/...olarak çözümlendiğine dair uyarı varsa, bu URL muhtemelen yalnızca Mattermost, OpenClaw ile aynı ana makinede/ağ ad alanında çalıştığında erişilebilirdir. Bunun yerine açıkça dışarıdan erişilebilir bircommands.callbackUrlayarlayın.- Düğmeler beyaz kutular olarak görünüyor: aracı bozuk düğme verileri gönderiyor olabilir. Her düğmede hem
texthem decallback_dataalanlarının bulunduğunu kontrol edin. - Düğmeler görüntüleniyor ama tıklamalar hiçbir şey yapmıyor: Mattermost sunucu yapılandırmasında
AllowedUntrustedInternalConnectionsdeğerinin127.0.0.1 localhostiçerdiğini ve ServiceSettings içindeEnablePostActionIntegrationdeğerinintrueolduğunu doğrulayın. - Düğmeler tıklamada 404 döndürüyor: düğme
iddeğeri muhtemelen tire veya alt çizgi içeriyor. Mattermost’un eylem yönlendiricisi alfanümerik olmayan kimliklerde bozulur. Yalnızca[a-zA-Z0-9]kullanın. - Ağ geçidi günlüklerinde
invalid _token: HMAC uyuşmazlığı. Tüm bağlam alanlarını (bir alt küme değil) imzaladığınızı, sıralanmış anahtarlar kullandığınızı ve sıkıştırılmış JSON (boşluksuz) kullandığınızı kontrol edin. Yukarıdaki HMAC bölümüne bakın. - Ağ geçidi günlüklerinde
missing _token in context:_tokenalanı düğmenin bağlamında yok. Entegrasyon payload’unu oluştururken bunun dahil edildiğinden emin olun. - Onayda düğme adı yerine ham kimlik görünüyor:
context.action_id, düğmeniniddeğeriyle eşleşmiyor. Her ikisini de aynı temizlenmiş değere ayarlayın. - Aracı düğmelerden haberdar değil: Mattermost kanal yapılandırmasına
capabilities: ["inlineButtons"]ekleyin.
İlgili
- Kanallara Genel Bakış — desteklenen tüm kanallar
- Eşleştirme — DM kimlik doğrulaması ve eşleştirme akışı
- Gruplar — grup sohbeti davranışı ve mention geçitleme
- Kanal Yönlendirme — mesajlar için oturum yönlendirme
- Güvenlik — erişim modeli ve sertleştirme