sharePointSiteId + Graph izinleri gerekir (bkz. Grup sohbetlerinde dosya gönderme). Anketler Adaptive Cards aracılığıyla gönderilir. Mesaj eylemleri, önce dosya gönderimleri için açıkça upload-file sunar.
Paketle birlikte gelen plugin
Microsoft Teams, güncel OpenClaw sürümlerinde paketle birlikte gelen bir plugin olarak sunulur; normal paketlenmiş derlemede ayrı kurulum gerekmez. Paketle birlikte gelen Teams’i içermeyen eski bir derlemede veya özel kurulumda npm paketini doğrudan kurun:Hızlı kurulum
@microsoft/teams.cli, bot kaydını, manifest oluşturmayı ve kimlik bilgisi üretimini tek komutla gerçekleştirir.
1. Kurun ve oturum açın
Teams CLI şu anda önizleme aşamasındadır. Komutlar ve bayraklar sürümler arasında değişebilir.
Teams, devtunnels ile kimlik doğrulaması yapamadığından
--allow-anonymous gereklidir. Gelen her bot isteği yine Teams SDK tarafından doğrulanır.ngrok http 3978 veya tailscale funnel 3978 (URL’ler her oturumda değişebilir).
3. Uygulamayı oluşturun
CLIENT_ID, CLIENT_SECRET, TENANT_ID ve bir Teams Uygulama Kimliği içerir; ayrıca uygulamayı doğrudan Teams’e yüklemeyi teklif eder.
4. OpenClaw’ı yapılandırın; bunun için çıktıdaki kimlik bilgilerini kullanın:
MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD, MSTEAMS_TENANT_ID.
5. Uygulamayı Teams’e yükleyin
teams app create, uygulamayı yüklemenizi ister; “Install in Teams” seçeneğini belirleyin. Yükleme bağlantısını daha sonra almak için:
Grup sohbetleri varsayılan olarak engellenir (
channels.msteams.groupPolicy: "allowlist"). Grup yanıtlarına izin vermek için channels.msteams.groupAllowFrom ayarını belirleyin veya herhangi bir üyeye izin vermek için groupPolicy: "open" kullanın (bahsetme koşuluyla).Hedefler
- Teams DM’leri, grup sohbetleri veya kanalları aracılığıyla OpenClaw ile konuşun.
- Yönlendirmeyi deterministik tutun: yanıtlar her zaman geldikleri kanala geri gider.
- Varsayılan olarak güvenli kanal davranışını kullanın (aksi yapılandırılmadıkça bahsetme gerekir).
Yapılandırma yazımları
Microsoft Teams, varsayılan olarak/config set|unset tarafından tetiklenen yapılandırma güncellemelerini yazabilir (commands.config: true gerekir).
Şununla devre dışı bırakın:
Erişim denetimi (DM’ler + gruplar)
DM erişimi- Varsayılan:
channels.msteams.dmPolicy = "pairing". Bilinmeyen göndericiler onaylanana kadar yok sayılır. channels.msteams.allowFrom, kararlı AAD nesne kimliklerini veyaaccessGroup:core-teamgibi statik gönderici erişim gruplarını kullanmalıdır.- İzin listeleri için UPN/görünen ad eşleştirmesine güvenmeyin; bunlar değişebilir. OpenClaw, doğrudan ad eşleştirmesini varsayılan olarak devre dışı bırakır; etkinleştirmek için
channels.msteams.dangerouslyAllowNameMatching: truekullanın. - Sihirbaz, kimlik bilgileri izin verdiğinde Microsoft Graph aracılığıyla adları kimliklere çözümleyebilir.
- Varsayılan:
channels.msteams.groupPolicy = "allowlist"(groupAllowFromeklemediğiniz sürece engellenir).channels.msteams.groupPolicyayarlanmamışsachannels.defaults.groupPolicy, paylaşılan varsayılanı geçersiz kılabilir. channels.msteams.groupAllowFrom, grup sohbetlerinde/kanallarda hangi göndericilerin veya statik gönderici erişim gruplarının tetikleme yapabileceğini denetler (channels.msteams.allowFromayarına geri döner).- Herhangi bir üyeye izin vermek için
groupPolicy: "open"ayarını belirleyin (varsayılan olarak yine bahsetme koşulludur). - Tüm kanalları engellemek için
channels.msteams.groupPolicy: "disabled"ayarını belirleyin.
- Ekipleri ve kanalları
channels.msteams.teamsaltında listeleyerek grup/kanal yanıtlarının kapsamını belirleyin. - Anahtar olarak değiştirilebilir görünen adları değil, Teams bağlantılarındaki kararlı Teams konuşma kimliklerini kullanın (bkz. Ekip ve Kanal Kimlikleri).
groupPolicy="allowlist"ve bir ekip izin listesi mevcut olduğunda yalnızca listelenen ekipler/kanallar kabul edilir (bahsetme koşuluyla).- Yapılandırma sihirbazı
Team/Channelgirdilerini kabul eder ve bunları sizin için saklar. - Başlatma sırasında OpenClaw, ekip/kanal ve kullanıcı izin listesindeki adları kimliklere çözümler (Graph izinleri elverdiğinde) ve eşlemeyi günlüğe kaydeder. Çözümlenemeyen adlar yazıldığı hâliyle tutulur ancak
channels.msteams.dangerouslyAllowNameMatching: trueayarlanmadıkça yönlendirme için yok sayılır.
Federe kimlik doğrulaması (sertifika ve yönetilen kimlik)
OpenClaw, üretim ortamında istemci gizli anahtarlarına alternatif olarakchannels.msteams.authType: "federated" aracılığıyla federe kimlik doğrulamasını destekler. İki yöntem vardır:
A Seçeneği: Sertifika tabanlı kimlik doğrulaması
Entra ID uygulama kaydınızla kaydedilmiş bir PEM sertifikası kullanın. Kurulum:- Bir sertifika oluşturun veya edinin (özel anahtar içeren PEM biçimi).
- Entra ID → App Registration → Certificates & secrets → Certificates → ortak sertifikayı yükleyin.
MSTEAMS_AUTH_TYPE=federatedMSTEAMS_CERTIFICATE_PATH=/path/to/cert.pem
B Seçeneği: Azure Managed Identity
Azure altyapısında (AKS, App Service, Azure VM’leri) parolasız kimlik doğrulaması için Azure Managed Identity kullanın. Nasıl çalışır?- Bot pod’u/VM’si, yönetilen bir kimliğe (sistem veya kullanıcı tarafından atanmış) sahiptir.
- Federe kimlik bilgisi, yönetilen kimliği Entra ID uygulama kaydına bağlar.
- OpenClaw, çalışma zamanında Azure IMDS uç noktasından token almak için
@azure/identitykullanır. - Token, bot kimlik doğrulaması için Teams SDK’ya iletilir.
- Yönetilen kimliğin etkinleştirildiği Azure altyapısı (AKS iş yükü kimliği, App Service, VM).
- Entra ID uygulama kaydında oluşturulmuş federasyon kimlik bilgisi.
- Pod/VM’den IMDS’ye (
169.254.169.254:80) ağ erişimi.
managedIdentityClientId: "<MI_CLIENT_ID>" ekleyin.
Ortam değişkenleri:
MSTEAMS_AUTH_TYPE=federatedMSTEAMS_USE_MANAGED_IDENTITY=trueMSTEAMS_MANAGED_IDENTITY_CLIENT_ID=<client-id>(yalnızca kullanıcı tarafından atanan)
AKS İş Yükü Kimliği kurulumu
İş yükü kimliğini kullanan AKS dağıtımları için:- AKS kümenizde iş yükü kimliğini etkinleştirin.
-
Entra ID uygulama kaydında bir federasyon kimlik bilgisi oluşturun:
-
Uygulama istemci kimliğiyle Kubernetes hizmet hesabına ek açıklama ekleyin:
-
İş yükü kimliği ekleme işlemi için pod’u etiketleyin:
-
IMDS’ye (
169.254.169.254) ağ erişimine izin verin: NetworkPolicy kullanılıyorsa 80 numaralı bağlantı noktasında169.254.169.254/32için bir çıkış kuralı ekleyin.
Kimlik doğrulama türlerinin karşılaştırması
certificateThumbprint, certificatePath ile birlikte ayarlanabilir ancak şu anda kimlik doğrulama yolu tarafından okunmaz; yalnızca ileriye dönük uyumluluk için kabul edilir.
Varsayılan: authType ayarlanmadığında OpenClaw, istemci gizli anahtarıyla kimlik doğrulamasını (appPassword) kullanır. Mevcut yapılandırmalar değişiklik yapılmadan çalışmaya devam eder.
Yerel geliştirme (tünelleme)
Teams,localhost adresine erişemez. URL’nin oturumlar arasında sabit kalması için kalıcı bir geliştirme tüneli kullanın:
ngrok http 3978 veya tailscale funnel 3978 (URL’ler her oturumda değişebilir).
Tünel URL’si değişirse uç noktayı güncelleyin:
Botu test etme
Tanılamayı çalıştırın:- Teams uygulamasını yükleyin (
teams app get <id> --install-linkiçindeki yükleme bağlantısı). - Teams’de botu bulun ve doğrudan ileti gönderin.
- Gelen etkinlik için Gateway günlüklerini denetleyin.
Ortam değişkenleri
Kimlik doğrulamayla ilgili bu yapılandırma anahtarları,openclaw.json yerine ortam değişkenleri aracılığıyla ayarlanabilir (örneğin groupPolicy veya historyLimit gibi diğer yapılandırma anahtarları yalnızca yapılandırma üzerinden ayarlanabilir):
Üye bilgisi eylemi
OpenClaw, ajanların ve otomasyonların yapılandırılmış bir konuşma için doğrulanmış katılımcı listesi ayrıntılarını çözümleyebilmesi amacıyla Microsoft Teams için Graph destekli birmember-info eylemi sunar.
Gereksinimler:
ChannelSettings.Read.GroupveTeamMember.Read.GroupRSC izinleri (önerilen manifestte zaten bulunur).
channels.msteams.actions.memberInfo anahtarı yoktur.
Standart kanal aramaları; eşleşen ekip katılımcı listesi kimliğini, görünen adı, e-posta adresini ve rolleri döndürür.
Eylem, mevcut doğrudan ileti veya grup sohbetinde güvenilir gönderenin kararlı kullanıcı kimliğini döndürebilir.
Özel/paylaşılan kanal ve mevcut olmayan sohbet üyesi aramaları ek katılımcı listesi izinleri gerektirir
ve varsayılan izin temeli tarafından reddedilir.
Geçmiş bağlamı
channels.msteams.historyLimit, isteme kaç adet yakın tarihli kanal/grup iletisinin dahil edileceğini denetler. Öncemessages.groupChat.historyLimitdeğerine geri döner, ardından varsayılan olarak 50 değerini kullanır. Devre dışı bırakmak için0ayarlayın.- Getirilen ileti dizisi geçmişi, gönderen izin listelerine (
allowFrom/groupAllowFrom) göre filtrelenir; dolayısıyla ileti dizisi bağlamının başlangıç verileri yalnızca izin verilen gönderenlerin iletilerini içerir. - Alıntılanan ek bağlamı (bir yanıtın kendi eklerindeki Skype Reply şeması HTML’sinden ayrıştırılır) filtrelenmeden aktarılır; gönderen izin listesi filtresi şu anda yalnızca ileti dizisi geçmişinin başlangıç verilerine uygulanır.
- Doğrudan ileti geçmişi,
channels.msteams.dmHistoryLimit(kullanıcı sıraları) ile sınırlandırılabilir. Kullanıcı başına geçersiz kılmalar:channels.msteams.dms["<user_id>"].historyLimit.
Geçerli Teams RSC izinleri (manifest)
Bunlar, Teams uygulama manifestimizdeki mevcut resourceSpecific izinleridir. Yalnızca uygulamanın yüklü olduğu ekip/sohbet içinde geçerlidir. Kanallar için (ekip kapsamı):ChannelMessage.Read.Group(Application) - tüm kanal iletilerini @bahsetme olmadan alırChannelMessage.Send.Group(Application)Member.Read.Group(Application)Owner.Read.Group(Application)ChannelSettings.Read.Group(Application)TeamMember.Read.Group(Application)TeamSettings.Read.Group(Application)
ChatMessage.Read.Chat(Application) - tüm grup sohbeti iletilerini @bahsetme olmadan alır
Örnek Teams manifesti (bilgileri gizlenmiş)
Gerekli alanları içeren asgari ve geçerli örnek. Kimlikleri ve URL’leri değiştirin.Manifest uyarıları (zorunlu alanlar)
bots[].botId, Azure Bot App ID ile eşleşmelidir.webApplicationInfo.id, Azure Bot App ID ile eşleşmelidir.bots[].scopes, kullanmayı planladığınız yüzeyleri (personal,team,groupChat) içermelidir.- Kişisel kapsamda dosya işleme için
bots[].supportsFiles: truegereklidir. authorization.permissions.resourceSpecific, kanal trafiği için kanal okuma/gönderme izinlerini içermelidir.
Mevcut bir uygulamayı güncelleme
Yetenekler: yalnızca RSC ve Graph karşılaştırması
Yalnızca Teams RSC ile (uygulama yüklü, Graph API izni yok)
Çalışanlar:- Kanal iletilerinin metin içeriğini okuma.
- Kanal iletilerinin metin içeriğini gönderme.
- Kişisel (doğrudan ileti) dosya eklerini alma.
- Kanal/grup görüntü veya dosya içerikleri (yük yalnızca bir HTML taslağı içerir).
- SharePoint/OneDrive’da depolanan ekleri indirme.
- Canlı Webhook olayının ötesindeki ileti geçmişini okuma.
Teams RSC + Microsoft Graph Application izinleri ile
Eklenenler:- Barındırılan içeriği (iletilere yapıştırılmış görüntüler) indirme.
- SharePoint/OneDrive’da depolanan dosya eklerini indirme.
- Graph aracılığıyla kanal/sohbet iletisi geçmişini okuma.
RSC ve Graph API karşılaştırması
Özet: RSC gerçek zamanlı dinleme, Graph API ise geçmişe erişim içindir. Çevrimdışıyken kaçırılan iletileri almak için
ChannelMessage.Read.All ile Graph API gerekir (yönetici onayı gerektirir).
Graph destekli medya + geçmiş
Yalnızca kullandığınız Teams kapsamları ve verileri için gereken Microsoft Graph uygulama izinlerini etkinleştirin:- Entra ID (Azure AD) App Registration → Graph Application permissions ekleyin:
- Kanal ekleri ve kanal geçmişi için
ChannelMessage.Read.All. - Grup sohbeti ekleri ve grup sohbeti geçmişi için
Chat.Read.All. - Ek baytlarının SharePoint/OneDrive depolama alanından indirilmesi gerektiğinde
Files.Read.All; yalnızca geçmiş kullanan kurulumlarda buna gerek yoktur.
- Kanal ekleri ve kanal geçmişi için
- Kiracı için Grant admin consent işlemini uygulayın.
- Teams uygulamasının manifest sürümünü artırın, yeniden yükleyin ve uygulamayı Teams’e yeniden kurun.
- Önbelleğe alınmış uygulama meta verilerini temizlemek için Teams’i tamamen kapatıp yeniden başlatın.
Kanal/grup dosyası kurtarma (graphMediaFallback)
Teams, bir bota gönderilen HTML etkinliğinden dosya işaretçilerini kaldırabilir. Bu durumda Bot Framework etkinliği sıradan bir HTML iletisinden ayırt edilemez; eksiksiz ek referansı yalnızca iletinin Graph kopyasında bulunur.
Yukarıdaki izinleri verdikten sonra geri dönüş mekanizmasını etkinleştirin:
false şeklindedir.
Kullanıcı bahsetmeleri: @bahsetmeleri, zaten konuşmada bulunan kullanıcılar için doğrudan çalışır. Mevcut konuşmada bulunmayan kullanıcıları dinamik olarak aramak ve onlardan bahsetmek için User.Read.All (Application) iznini ekleyip yönetici onayı verin.
Bilinen sınırlamalar
Webhook zaman aşımları
Teams iletileri HTTP webhook aracılığıyla iletir. OpenClaw bu webhook dinleyicisine sabit HTTP sunucusu zaman aşımları uygular: 30 sn hareketsizlik, toplam 30 sn istek ve üstbilgileri almak için 15 sn. İsteğe bağlı gelen medya ve bağlam zenginleştirme, paylaşılan 10 saniyelik bir bütçeye sahiptir. SDK, ham etkinlik kalıcı olarak eklendikten sonra döner; ajan dönüşü bağımsız olarak işlenir ve yanıtları proaktif biçimde gönderir. İstek işleme veya kalıcı kabul işlemi aktarım penceresini kaçırırsa Teams etkinliği yeniden deneyebilir ve giriş mezar taşı yinelenen bir etkinlik kimliğini reddeder.Teams bulutu ve hizmet URL’si desteği
SDK destekli bu Teams yolu, Microsoft Teams genel bulutu için canlı ortamda doğrulanmıştır. Gelen yanıtlarda, gelen Teams SDK dönüş bağlamı kullanılır. Bağlam dışı proaktif işlemler (gönderimler, düzenlemeler, silmeler, kartlar, anketler, dosya onayı iletileri ve kuyruğa alınmış uzun süreli yanıtlar) depolananserviceUrl konuşma referansını kullanır. Genel bulut, varsayılan olarak Teams SDK genel bulut ortamını kullanır ve genel Teams Connector ana makinesindeki depolanmış referanslara izin verir: https://smba.trafficmanager.net/.
Genel bulut varsayılandır. Normal genel bulut botları için channels.msteams.cloud veya channels.msteams.serviceUrl ayarlamanız gerekmez.
Genel olmayan Teams bulutları için cloud ve Microsoft yayımladığında eşleşen proaktif sınırı ayarlayın:
channels.msteams.cloud; kimlik doğrulama, JWT doğrulaması, token hizmetleri ve Graph kapsamı için Teams SDK bulut ön ayarını seçer.channels.msteams.serviceUrl; proaktif gönderimler, düzenlemeler, silmeler, kartlar, anketler, dosya onayı iletileri ve kuyruğa alınmış uzun süreli yanıtlar öncesinde depolanan konuşma referanslarını doğrulamak için kullanılan Bot Connector uç noktası sınırını seçer. USGov ve DoD SDK bulutları için gereklidir. China/21Vianet için OpenClaw, SDKChinaön ayarını kullanır ve depolanan/yapılandırılan hizmet URL’lerini yalnızca Azure China Bot Framework kanal ana makinelerinde kabul eder.
serviceUrl değerini kullanın; aksi takdirde aşağıdaki Microsoft tablosunu kullanın.
Microsoft’un ayrı bir proaktif hizmet URL’si belgelediği ancak Teams SDK’nın ayrı bir GCC bulut ön ayarı sunmadığı GCC örneği:
channels.msteams.serviceUrl, desteklenen Microsoft Teams Bot Connector ana makineleriyle sınırlıdır. Bir hizmet URL’si yapılandırıldığında OpenClaw; proaktif gönderimler, düzenlemeler, silmeler, kartlar, anketler veya kuyruğa alınmış uzun süreli yanıtlar çalıştırılmadan önce depolanan konuşmanın serviceUrl değerinin aynı ana makineyi kullandığını denetler. Varsayılan genel bulut yapılandırmasında, depolanan bir konuşma genel Teams Connector ana makinesinin dışını gösteriyorsa OpenClaw güvenli biçimde başarısız olur. Depolanan konuşma referansının güncel olması için bulut/hizmet URL’si ayarlarını değiştirdikten sonra konuşmadan yeni bir ileti alın.
Microsoft’un Teams proaktif uç nokta tablosunda China/21Vianet için ayrı bir genel proaktif smba URL’si yoktur. Teams SDK’nın Azure China kimlik doğrulama, token ve JWT uç noktalarını kullanması için cloud: "China" yapılandırın. Bundan sonra proaktif gönderimler, Azure China Bot Framework kanal sınırında (*.botframework.azure.cn) gelen bir China Teams etkinliğinden depolanmış bir konuşma referansı veya açıkça yapılandırılmış bir hizmet URL’si gerektirir. OpenClaw, Graph isteklerini Azure China Graph uç noktası üzerinden yönlendirene kadar Graph destekli Teams yardımcıları cloud: "China" için devre dışıdır.
Biçimlendirme
Teams markdown’ı Slack veya Discord’a göre daha sınırlıdır:- Temel biçimlendirme çalışır: kalın, italik,
code, bağlantılar. - Karmaşık markdown (tablolar, iç içe listeler) doğru görüntülenmeyebilir.
- Anketler ve anlamsal sunum gönderimleri için Adaptive Cards desteklenir (aşağıya bakın).
Yapılandırma
Temel ayarlar (paylaşılan kanal kalıpları için /gateway/configuration sayfasına bakın):channels.msteams.enabled: kanalı etkinleştirin/devre dışı bırakın.channels.msteams.appId,channels.msteams.appPassword,channels.msteams.tenantId: bot kimlik bilgileri.channels.msteams.cloud: Teams SDK bulut ortamı (Public,USGov,USGovDoDveyaChina; varsayılanPublic). USGov/DoD SDK bulutları içinserviceUrlile ayarlayın; Çin, SDK ön ayarını ve depolanan Azure China Bot Framework konuşma referanslarını kullanır; Azure China Graph yönlendirmesi kullanıma sunulana kadar Graph destekli yardımcılar devre dışıdır.channels.msteams.serviceUrl: SDK proaktif işlemleri için Bot Connector hizmet URL’si sınırı. Genel bulut SDK varsayılanını kullanır; GCC (https://smba.infra.gcc.teams.microsoft.com/teams), GCC High veya DoD için ayarlayın. Depolanan konuşma referansı 21Vianet tarafından işletilen Teams’den geldiğinde Çin, Azure China Bot Framework kanal ana makinelerini kabul eder.channels.msteams.webhook.port(varsayılan3978).channels.msteams.webhook.path(varsayılan/api/messages).channels.msteams.dmPolicy:pairing | allowlist | open | disabled(varsayılanpairing).channels.msteams.allowFrom: DM izin listesi (AAD nesne kimlikleri önerilir). Graph erişimi kullanılabilir olduğunda sihirbaz, kurulum sırasında adları kimliklere çözümler.channels.msteams.dangerouslyAllowNameMatching: değiştirilebilir UPN/görünen ad eşleştirmesini ve doğrudan ekip/kanal adı yönlendirmesini yeniden etkinleştiren acil durum anahtarı.channels.msteams.textChunkLimit: karakter cinsinden giden metin parçası boyutu (varsayılan4000; yapılandırılan değer daha yüksek olsa bile kesin üst sınır4000).channels.msteams.streaming.chunkMode: uzunluğa göre parçalara ayırmadan önce boş satırlardan (paragraf sınırlarından) bölmek içinlength(varsayılan) veyanewline.channels.msteams.mediaAllowHosts: gelen eklerin ana makineleri için izin listesi (varsayılan olarak Microsoft/Teams etki alanları: Graph, SharePoint/OneDrive, Teams CDN, Bot Framework, Azure Media Services).channels.msteams.mediaAuthAllowHosts: medya yeniden denemelerinde Authorization üstbilgilerinin eklenmesine yönelik izin listesi (varsayılan olarak Graph + Bot Framework ana makineleri).channels.msteams.graphMediaFallback: kanal/grup HTML’si dosya işaretçilerini içermediğinde Graph ileti aramalarını etkinleştirin (varsayılanfalse; bkz. Kanal/grup dosya kurtarma).channels.msteams.mediaMaxMb: kanal başına medya boyutu sınırını MB cinsinden geçersiz kılma. Ayarlanmadığındaagents.defaults.mediaMaxMbdeğerine geri döner.channels.msteams.requireMention: kanallarda/gruplarda @bahsetme gerektirir (varsayılantrue).channels.msteams.replyStyle:thread | top-level(bkz. Yanıt biçimi).channels.msteams.teams.<teamId>.replyStyle: ekip başına geçersiz kılma.channels.msteams.teams.<teamId>.requireMention: ekip başına geçersiz kılma.channels.msteams.teams.<teamId>.tools: kanal geçersiz kılması eksik olduğunda kullanılan varsayılan ekip başına araç politikası geçersiz kılmaları (allow/deny/alsoAllow).channels.msteams.teams.<teamId>.toolsBySender: ekip başına ve gönderen başına varsayılan araç politikası geçersiz kılmaları ("*"joker karakteri desteklenir).channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle: kanal başına geçersiz kılma.channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention: kanal başına geçersiz kılma.channels.msteams.teams.<teamId>.channels.<conversationId>.tools: kanal başına araç politikası geçersiz kılmaları (allow/deny/alsoAllow).channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender: kanal başına ve gönderen başına araç politikası geçersiz kılmaları ("*"joker karakteri desteklenir).toolsBySenderanahtarları açık önekler kullanmalıdır:channel:,id:,e164:,username:,name:(önek içermeyen eski anahtarlar hâlâ yalnızcaid:ile eşlenir).channels.msteams.authType: kimlik doğrulama türü -"secret"(varsayılan) veya"federated".channels.msteams.certificatePath: PEM sertifika dosyasının yolu (federe + sertifika kimlik doğrulaması).channels.msteams.certificateThumbprint: sertifika parmak izi; kabul edilir, kimlik doğrulaması için zorunlu değildir.channels.msteams.useManagedIdentity: yönetilen kimlik doğrulamasını etkinleştirin (federe mod).channels.msteams.managedIdentityClientId: kullanıcı tarafından atanan yönetilen kimlik için istemci kimliği.channels.msteams.sharePointSiteId: grup sohbetlerinde/kanallarda dosya yüklemeleri için SharePoint site kimliği (bkz. Grup sohbetlerinde dosya gönderme).channels.msteams.welcomeCard,channels.msteams.groupWelcomeCard,channels.msteams.promptStarters: ilk DM/grup iletişiminde gösterilen karşılama Adaptive Card’ı ve önerilen istem düğmeleri.channels.msteams.responsePrefix: giden yanıtların başına eklenen metin.channels.msteams.feedbackEnabled(varsayılantrue),channels.msteams.feedbackReflection(varsayılantrue),channels.msteams.feedbackReflectionCooldownMs: yanıtlarda başparmak yukarı/aşağı geri bildirimi ve olumsuz geri bildirim üzerine düşünme takibi.channels.msteams.sso,channels.msteams.delegatedAuth: SSO destekli akışlar için Bot Framework OAuth bağlantısı ve devredilmiş Graph kapsamları;sso.enabled: true,sso.connectionNamegerektirir.
Yönlendirme ve oturumlar
- Oturum anahtarları standart aracı biçimini izler (bkz. /concepts/session):
- Doğrudan iletiler ana oturumu paylaşır (
agent:<agentId>:<mainKey>). - Kanal/grup iletileri konuşma kimliğini kullanır:
agent:<agentId>:msteams:channel:<conversationId>agent:<agentId>:msteams:group:<conversationId>
- Doğrudan iletiler ana oturumu paylaşır (
Yanıt biçimi: ileti dizileri ve gönderiler
Teams, aynı temel veri modeli üzerinde iki kanal kullanıcı arayüzü biçimine sahiptir:
Sorun: Teams API’si bir kanalın hangi kullanıcı arayüzü biçimini kullandığını göstermez. Yanlış
replyStyle kullanırsanız:
- İleti dizisi biçimindeki bir kanalda
thread→ yanıtlar uygunsuz biçimde iç içe görünür. - Gönderi biçimindeki bir kanalda
top-level→ yanıtlar ileti dizisi içinde olmak yerine ayrı üst düzey gönderiler olarak görünür.
replyStyle değerini kanal başına yapılandırın:
Çözümleme önceliği
Bot bir kanala yanıt gönderdiğindereplyStyle, en özel geçersiz kılmadan varsayılana doğru çözümlenir. undefined olmayan ilk değer geçerli olur:
- Kanal başına -
channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle - Ekip başına -
channels.msteams.teams.<teamId>.replyStyle - Genel -
channels.msteams.replyStyle - Örtük varsayılan -
requireMentionüzerinden türetilir:requireMention: true→threadrequireMention: false→top-level
replyStyle olmadan requireMention: false değerini genel olarak ayarlarsanız, gelen ileti bir ileti dizisi yanıtı olsa bile Gönderi biçimindeki kanallarda bahsetmeler üst düzey gönderiler olarak görünür. Beklenmedik durumları önlemek için replyStyle: "thread" değerini genel, ekip veya kanal düzeyinde sabitleyin.
Depolanan bir kanal konuşmasına yapılan proaktif gönderimlerde (kuyruğa alınmış araç çağrısı yanıtları, uzun süre çalışan aracılar) aynı ekip/kanal çözümlemesi uygulanır; grup sohbetleri ve kişisel (DM) konuşmalar, replyStyle değerinden bağımsız olarak proaktif gönderimler için her zaman top-level değerine çözümlenir.
İleti dizisi bağlamını koruma
replyStyle: "thread" geçerliyken ve bottan bir kanal ileti dizisinin içinden @bahsedildiğinde OpenClaw, yanıtın aynı ileti dizisinin içine düşmesi için özgün ileti dizisi kökünü giden konuşma referansına (19:...@thread.tacv2;messageid=<root>) yeniden ekler. Bu, hem canlı (aynı tur içindeki) gönderimler hem de Bot Framework tur bağlamı sona erdikten sonra yapılan proaktif gönderimler (ör. uzun süre çalışan aracılar, mcp__openclaw__message üzerinden kuyruğa alınmış araç çağrısı yanıtları) için geçerlidir.
İleti dizisi kökü, konuşma referansında depolanan threadId değerinden alınır. threadId öncesinden kalan eski depolanmış referanslar, activityId değerine (konuşmayı en son başlatan gelen etkinlik neyse ona) geri döner; böylece mevcut dağıtımların yeniden başlatılmadan çalışmayı sürdürmesi sağlanır.
replyStyle: "top-level" geçerliyken kanal ileti dizilerinden gelen iletiler kasıtlı olarak yeni üst düzey gönderilerle yanıtlanır; ileti dizisi soneki eklenmez. Bu, İleti dizisi biçimindeki kanallar için doğrudur; ileti dizili yanıtlar beklediğiniz yerde üst düzey gönderiler görünüyorsa replyStyle o kanal için yanlış ayarlanmıştır.
Ekler ve görüntüler
Mevcut sınırlamalar:- DM’ler: görüntüler ve dosya ekleri Teams bot dosya API’leri üzerinden çalışır.
- Kanallar/gruplar: ekler M365 depolama alanında (SharePoint/OneDrive) bulunur. Webhook yükü gerçek dosya baytlarını değil, yalnızca bir HTML taslağını içerir. Kanal eklerini indirmek için Graph API izinleri gereklidir.
- Açıkça önce dosya göndermek için
action=upload-filedeğerinimedia/filePath/pathile kullanın; isteğe bağlımessageeşlik eden metin/yorum olur vefilename(veyatitle) yüklenen adı geçersiz kılar.
channels.msteams.mediaAllowHosts ile geçersiz kılın (herhangi bir ana makineye izin vermek için ["*"] kullanın).
Authorization üstbilgileri yalnızca channels.msteams.mediaAuthAllowHosts içindeki ana makineler için eklenir (varsayılan olarak Graph + Bot Framework ana makineleri). Bu listeyi sıkı tutun (çok kiracılı soneklerden kaçının).
Grup sohbetlerinde dosya gönderme
Botlar, yerleşik FileConsentCard akışını kullanarak DM’lerde dosya gönderebilir. Grup sohbetlerinde/kanallarda dosya gönderme ek kurulum gerektirir:Grup sohbetleri neden SharePoint gerektirir?
Botlar bir uygulama kimliği kullanırken Microsoft Graph’ın/me kaynağı oturum açmış bir kullanıcı gerektirir. Grup sohbetlerinde/kanallarda dosya göndermek için bot, dosyayı bir SharePoint sitesine yükler ve bir paylaşım bağlantısı oluşturur.
Kurulum
-
Entra ID (Azure AD) → App Registration içinde Graph API izinlerini ekleyin:
Sites.ReadWrite.All(Uygulama) - SharePoint’e dosya yükleyin.ChatMember.Read.All(Uygulama) - grup sohbeti dosya gönderimleri için en az ayrıcalıklı, kiracı genelinde izin.Chat.Read.Allde çalışır ve grup sohbeti geçmişi etkinleştirildiğinde bunu zaten kapsar. Sohbet başına alternatif olarakChatMember.Read.Chatkaynağa özgü onay iznini kullanın.
- Kiracı için yönetici onayı verin.
-
SharePoint site kimliğinizi alın:
-
OpenClaw’ı yapılandırın:
Paylaşım davranışı
Yalnızca sohbet katılımcıları dosyaya erişebildiğinden kullanıcı başına paylaşım daha güvenlidir. OpenClaw, grup sohbetleri için başarılı bir üye sorgulaması gerektirir; zaman aşımları, aktarım hataları, boş sonuçlar ve Graph API retleri, erişimi kuruluşun geneline genişletmek yerine gönderimin başarısız olmasına neden olur.
Geri dönüş davranışı
Dosyaların depolandığı konum
Yüklenen dosyalar, yapılandırılmış SharePoint sitesinin varsayılan belge kitaplığındaki bir/OpenClawShared/ klasöründe depolanır.
Anketler (Adaptive Cards)
OpenClaw, Teams anketlerini Adaptive Cards olarak gönderir (yerel bir Teams anket API’si yoktur).- CLI:
openclaw message poll --channel msteams --target conversation:<id> --poll-question "..." --poll-option "..." --poll-option "...". - Oylar, Gateway tarafından OpenClaw Plugin durumu SQLite veritabanında
state/openclaw.sqlitealtında kaydedilir. - Mevcut
msteams-polls.jsondosyaları, çalışan Plugin tarafından değil,openclaw doctor --fixtarafından içe aktarılır. - Oyların kaydedilmesi için Gateway çevrimiçi kalmalıdır.
- Anketler sonuç özetlerini otomatik olarak yayımlamaz ve henüz bir anket sonuçları CLI’si yoktur.
Sunum kartları
message aracını, CLI’yi veya normal yanıt teslimini kullanarak Teams kullanıcılarına ya da konuşmalarına anlamsal sunum yükleri gönderin. OpenClaw bunları genel sunum sözleşmesinden Teams Adaptive Cards olarak işler.
presentation parametresi anlamsal blokları kabul eder. presentation sağlandığında mesaj metni isteğe bağlıdır. Düğmeler, Adaptive Card gönderme veya URL eylemleri olarak işlenir. Seçim menüleri Teams işleyicisinde yerel olarak desteklenmediğinden OpenClaw, teslimden önce bunları okunabilir metne dönüştürür.
Aracı aracı:
Hedef biçimleri
MSTeams hedefleri, kullanıcılarla konuşmaları ayırt etmek için ön ekler kullanır:
CLI örnekleri:
user: ön eki olmadan adlar varsayılan olarak grup veya ekip çözümlemesine yönlendirilir. Kişileri görünen adlarıyla hedeflerken her zaman user: kullanın.Proaktif mesajlaşma
- OpenClaw konuşma başvurularını bu noktada depoladığı için proaktif mesajlar yalnızca bir kullanıcı etkileşimde bulunduktan sonra gönderilebilir.
dmPolicyve izin verilenler listesi denetimi için /gateway/configuration bölümüne bakın.
Ekip ve Kanal Kimlikleri (Yaygın Sorun)
Teams URL’lerindekigroupId sorgu parametresi, yapılandırmada kullanılan ekip kimliği DEĞİLDİR. Bunun yerine kimlikleri URL yolundan çıkarın:
Ekip URL’si:
- Ekip anahtarı =
/team/sonrasındaki yol bölümü (URL kodu çözülmüş, ör.19:Bk4j...@thread.tacv2; eski kiracılarda yine geçerli olan@thread.skypegörünebilir). - Kanal anahtarı =
/channel/sonrasındaki yol bölümü (URL kodu çözülmüş). - OpenClaw yönlendirmesi için
groupIdsorgu parametresini yok sayın. Bu, gelen Teams etkinliklerinde kullanılan Bot Framework konuşma kimliği değil, Microsoft Entra grup kimliğidir.
Özel kanallar
Botların özel kanallardaki desteği sınırlıdır:
Özel kanallar çalışmıyorsa geçici çözümler:
- Bot etkileşimleri için standart kanalları kullanın.
- DM’leri kullanın; kullanıcılar her zaman bota doğrudan mesaj gönderebilir.
- Geçmiş erişimi için Graph API’yi kullanın (
ChannelMessage.Read.Allgerektirir).
Sorun giderme
Yaygın sorunlar
- Görüntüler kanallarda görünmüyor: Graph izinleri veya yönetici onayı eksik. Teams uygulamasını yeniden yükleyin ve Teams’i tamamen kapatıp yeniden açın.
- Kanalda yanıt yok: varsayılan olarak bahsetmeler gereklidir;
channels.msteams.requireMention=falseayarını belirleyin veya ekip/kanal başına yapılandırın. - Sürüm uyuşmazlığı (Teams hâlâ eski manifesti gösteriyor): uygulamayı kaldırıp yeniden ekleyin ve yenilemek için Teams’i tamamen kapatın.
- Webhook’tan 401 Unauthorized: Azure JWT olmadan elle test yaparken beklenen bir durumdur; uç noktaya erişilebildiğini ancak kimlik doğrulamanın başarısız olduğunu gösterir. Doğru şekilde test etmek için Azure Web Chat’i kullanın.
Manifest yükleme hataları
- “Icon file cannot be empty”: manifest, 0 bayt boyutundaki simge dosyalarına başvuruyor. Geçerli PNG simgeleri oluşturun (
outline.pngiçin 32x32,color.pngiçin 192x192). - “webApplicationInfo.Id already in use”: uygulama hâlâ başka bir ekipte/sohbette yüklü. Önce uygulamayı bulup kaldırın veya yayılım için 5-10 dakika bekleyin.
- Yükleme sırasında “Something went wrong”: bunun yerine https://admin.teams.microsoft.com üzerinden yükleyin, tarayıcı DevTools’u (F12) → Network sekmesini açın ve gerçek hata için yanıt gövdesini denetleyin.
- Sideload başarısız oluyor: “Upload a custom app” yerine “Upload an app to your org’s app catalog” seçeneğini deneyin; bu genellikle sideload kısıtlamalarını aşar.
RSC izinleri çalışmıyor
webApplicationInfo.iddeğerinin botunuzun App ID’siyle tam olarak eşleştiğini doğrulayın.- Uygulamayı yeniden yükleyin ve ekipte/sohbette yeniden kurun.
- Kuruluş yöneticinizin RSC izinlerini engelleyip engellemediğini denetleyin.
- Doğru kapsamı kullandığınızı doğrulayın: ekipler için
ChannelMessage.Read.Group, grup sohbetleri içinChatMessage.Read.Chat.
Kaynaklar
- Azure Bot oluşturma - Azure Bot kurulum kılavuzu
- Teams Developer Portal - Teams uygulamaları oluşturma/yönetme
- Teams uygulama manifesti şeması
- RSC ile kanal mesajlarını alma
- RSC izinleri başvurusu
- Teams bot dosya işleme (kanal/grup Graph gerektirir)
- Proaktif mesajlaşma
- @microsoft/teams.cli - bot yönetimi için Teams CLI
İlgili içerikler
- Kanallara Genel Bakış - desteklenen tüm kanallar
- Eşleştirme - DM kimlik doğrulaması ve eşleştirme akışı
- Gruplar - grup sohbeti davranışı ve bahsetme koşulu
- Kanal Yönlendirme - iletiler için oturum yönlendirmesi
- Güvenlik - erişim modeli ve güvenlik sıkılaştırması