Microsoft Teams geliştiricileri, her eklentiye “bot” demenin artık üretim seviyesinde hatalara yol açacağı konusunda uyarılıyor. 2026 yılında platformun kendi limitleri —bir mesaja yanıt vermek için 10 ila 15 saniye— yanlış mimariyle kurgulanmış botları zaman aşımı fırtınalarına dönüştürerek ekipleri boru hatlarını yeniden tasarlamaya zorlayacak.

Bu ayrım neden önemli

Teams, her biri farklı bir etkileşim modeli için oluşturulmuş üç eklenti türü sunar. Bunları birbirine karıştırmak; yanlış çalışma zamanına (runtime), yanlış SDK'ya ve yanlış ölçeklendirme modeline neden olur.

Teams uygulamaları, botlar ve ajanlar – nedirler?

  • Teams apps – Teams istemcisi içindeki sekme yüzeyleri, statik sayfalar veya basit kullanıcı arayüzü (UI) bileşenleridir. Bunlar esasen web uygulamalarıdır: durum bilgisi tutmazlar (stateless), talep üzerine işlenirler (rendered on demand) ve diğer tüm HTTP servisleri gibi barındırılırlar. Herhangi bir konuşma akışı beklenmez.
  • Bots – Bot Framework SDK ile oluşturulan botlar, senaryolaştırılmış diyalogları takip eder. Mantıkları, tamamen gelen etkinliğe (activity) dayanarak bir sonraki yanıtı belirleyen deterministik bir if/else ağacıdır. Karar yolu önceden bilindiği için yanıt, platformun kısa zaman aşımı penceresine sığar.
  • Agents – Üst düzey bir hedef, bir araç seti ve bir LLM (büyük dil modeli) alan hedef odaklı varlıklardır. Agents SDK veya Semantic Kernel kullanarak LLM; hangi aracı, hangi sırayla çağıracağına ve kullanıcıdan ne zaman açıklama isteyeceğine karar verir. Akış dinamiktir ve genellikle birden fazla harici çağrı ile yoğun muhakeme (reasoning) gerektirir.

Ayrım keskindir: bir bot deterministiktir; bir ajan ise olasılıksaldır (probabilistic) ve çalışma zamanında araç çağrılarını yönetir (orchestrates).

Zaman aşımı tuzağı

Geliştiriciler; yoğun muhakeme süreçlerini —LLM istemleri (prompts), veritabanı sorguları veya harici API çağrıları— doğrudan bir botun mesaj işleyicisine (message handler) yerleştirdiklerinde, Teams isteğin 10-15 saniyelik penceresini aştığını görür. Platform yanıtı iptal eder ve tekrar dener; bu da mükerrer işlere ve hız sınırlamalarına (throttling) yol açabilir. Belirti, aralıklı bir “bot yanıt vermiyor” hatası gibi görünür ancak asıl neden mimaridir.

Üretime hazır asenkron bir boru hattı (pipeline) oluşturmak

  1. Webhook giriş noktası – Botun HTTP uç noktası (endpoint), Teams etkinliğini kabul eder ve alındığını hemen onaylar.
  2. Etkinliği kuyruğa alma – İşleyici (handler), veriyi Azure Service Bus gibi dayanıklı bir kuyruğa iletir.
  3. Arka plan işleyicisi (Background worker) – Bir Azure Durable Function, Service Bus tetikleyicisi veya herhangi bir uzun süreli işleyici mesajı çeker, LLM muhakemesini veya araç yönetimini (orchestration) çalıştırır ve nihai yanıtı Bot Framework'ün proaktif mesajlaşma API'si aracılığıyla Teams'e geri gönderir.

İlk webhook anında yanıt verdiği için Teams asla zaman aşımına uğramaz ve ağır işler kendi hızında ilerler. Kuyruk, ani artışları (spikes) tamponlar ve işleyiciler birikmiş iş miktarına (backlog) göre otomatik olarak ölçeklenir.

Hızlı karar kılavuzu (beyaz tahta testi)

  • Herhangi bir kod yazmadan önce tüm karar ağacını çizebilir misiniz? Evet → Bir bot oluşturun. Deterministik akış, Bot Framework modeline uygundur ve yanıt penceresi içinde kalır.
  • Sorun, üst düzey bir hedef ve olası araçların bir listesiyle mi tanımlanıyor? Evet → Bir ajan oluşturun. Planlamayı ve araçları çağırmayı LLM'e bırakın; planlama işini bir arka plan işleyicisine devredin.

Sırada ne var

Bu rehber, Azure üzerinde akıllı Teams çözümleri geliştiren .NET 9 geliştiricileri için hazırlanan bir serinin ilk bölümüdür.

Eğer Teams günlüklerinde (logs) şimdiden “Bot timed out” hataları görüyorsanız, çözüm basittir: webhook'u ağır iş yükünden ayırın (decouple), kuyruk tabanlı bir işleyici kullanın ve en baştan doğru eklenti türünü seçin. Platformun bir zaman aşımı sınırı vardır ancak mimariniz bundan kaçınabilir.

Özet: Bir Teams eklentisini bot olarak yanlış etiketlemek, Teams'in sürdüremeyeceği senkron bir tasarıma zorlar. İsteği muhakemeden ayırın, doğru SDK'yı seçin; böylece Teams çözümünüz, arkasındaki beyin LLM destekli bir ajan olsa bile yanıt vermeye devam edecektir.