Microsoft Teams (plugin)

"Abandon all hope, ye who enter here."

الحالة الحالية

  • ✅ النصوص + مرفقات DM مدعومة
  • ⚠️ إرسال الملفات في القنوات يتطلب sharePointSiteId + أذونات Graph
  • ✅ الاستطلاعات تُرسل عبر Adaptive Cards

Plugin مطلوب

تغيير مهم (2026.1.15)

MS Teams انتقل خارج النواة. إذا كنت تستخدمه، يجب تثبيت plugin.

openclaw plugins install @openclaw/msteams

الإعداد السريع

  1. قم بتثبيت plugin Microsoft Teams
  2. أنشئ Azure Bot (App ID + client secret + tenant ID)
  3. قم بتكوين OpenClaw بهذه البيانات
  4. اكشف /api/messages (المنفذ 3978 افتراضيًا) عبر URL عام أو tunnel

التكوين الأدنى

{
  channels: {
    msteams: {
      enabled: true,
      appId: "<APP_ID>",
      appPassword: "<APP_PASSWORD>",
      tenantId: "<TENANT_ID>",
      webhook: {
        port: 3978,
        path: "/api/messages"
      },
    },
  },
}

إعداد Azure Bot

الخطوة 1: إنشاء Azure Bot

  1. انتقل إلى Create Azure Bot
  2. املأ علامة التبويب Basics:
    • Bot handle: اسم البوت (يجب أن يكون فريدًا)
    • Type of App: Single Tenant (موصى به)
  3. اضغط على Review + createCreate

الخطوة 2: الحصول على البيانات

  1. انتقل إلى Azure Bot resource → Configuration
  2. انسخ Microsoft App ID → هذا هو appId
  3. اضغط على Manage Password → انتقل إلى App Registration
  4. تحت Certificates & secretsNew client secret
  5. انسخ Value → هذا هو appPassword
  6. من Overview، انسخ Directory (tenant) ID

الخطوة 3: تكوين Messaging Endpoint

في Azure Bot → Configuration، اضبط Messaging endpoint:

  • الإنتاج: https://your-domain.com/api/messages
  • التطوير المحلي: استخدم tunnel (ngrok)

الخطوة 4: تفعيل Teams Channel

  1. في Azure Bot → Channels
  2. اضغط على Microsoft Teams → Configure → Save
  3. اقبل شروط الخدمة

التطوير المحلي (Tunneling)

Teams لا يمكنه الوصول إلى localhost. استخدم tunnel للتطوير المحلي:

الخيار A: ngrok

ngrok http 3978
# انسخ https URL، مثل https://abc123.ngrok.io
# اضبط messaging endpoint على: https://abc123.ngrok.io/api/messages

التحكم في الوصول

الرسائل المباشرة

  • الافتراضي: dmPolicy = "pairing"
  • allowFrom يقبل AAD object IDs أو UPNs أو أسماء العرض

المجموعات

يتطلب الإشارات (@mentions) افتراضيًا للأمان.

إرسال الملفات في المجموعات

متطلبات إرسال الملفات

  • الرسائل المباشرة: تعمل خارج الصندوق
  • القنوات/المجموعات: تتطلب sharePointSiteId + أذونات Graph

أذونات Graph المطلوبة:

  • Sites.ReadWrite.All - رفع الملفات إلى SharePoint
  • Chat.Read.All (اختياري) - روابط مشاركة لكل مستخدم

Teams Manifest

مثال أساسي (استبدل IDs و URLs):

{
  "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.23/...",
  "manifestVersion": "1.23",
  "version": "1.0.0",
  "id": "YOUR-AZURE-BOT-APP-ID",
  "name": { "short": "OpenClaw Bot" },
  "bots": [{
    "botId": "YOUR-AZURE-BOT-APP-ID",
    "scopes": ["personal", "team", "groupchat"],
    "supportsFiles": true
  }],
  "authorization": {
    "permissions": {
      "resourceSpecific": [
        { "type": "Application", "name": "ChannelMessage.Read.Group" },
        { "type": "Application", "name": "ChannelMessage.Send.Group" }
      ]
    }
  }
}

القيود المعروفة

  • مهلات Webhook: Teams يتوقع ردودًا سريعة؛ الردود البطيئة جدًا قد تسبب مشاكل
  • التنسيق: Teams markdown محدود أكثر من Slack أو Discord
  • القنوات الخاصة: دعم محدود للبوتات

استكشاف الأخطاء

  • الصور لا تظهر في القنوات: أذونات Graph أو موافقة المسؤول مفقودة
  • لا ردود في القناة: الإشارات مطلوبة افتراضيًا
  • أخطاء رفع Manifest: تحقق من أن ملفات الأيقونات ليست فارغة وأن IDs تطابق

تحذير: معقد

تكامل Microsoft Teams هو الأكثر تعقيدًا بين جميع القنوات. يتطلب Azure Bot، Teams app manifest، وأذونات متعددة. للحصول على دليل كامل، راجع الوثائق الإنجليزية الكاملة.