إعداد إشعارات Microsoft Teams باستخدام إضافة discourse-chat-integration

يصف هذا الدليل كيفية إعداد موفر Microsoft Teams المضمن في discourse-chat-integration.

إعداد Microsoft Teams

في Microsoft Teams:

  1. من شريط التنقل العمودي على اليسار، انقر فوق زر النقاط الثلاث (\u003ckbd\u003e…\u003c/kbd\u003e) وحدد \u003ckbd\u003eWorkflows\u003c/kbd\u003e (سير العمل) من القائمة.

  2. انقر فوق الزر \u003ckbd\u003e**+ Build from scratch**\u003c/kbd\u003e (إنشاء من الصفر) في الزاوية العلوية اليمنى من صفحة Workflows (سير العمل).

  3. في نافذة سير العمل المخصص المنبثقة، ابحث عن webhook وحدد المشغل When a Teams webhook request is received (عندما يتم استلام طلب خطاف ويب Teams).

  4. في حقل Who can trigger the flow (من يمكنه تشغيل التدفق)، حدد Anyone (أي شخص). [1]

  5. انقر فوق \u003ckbd\u003e**+ New step**\u003c/kbd\u003e (خطوة جديدة).

  6. بعد ذلك، ابحث عن card (بطاقة) وحدد الإجراء Post card in a chat or channel (نشر بطاقة في محادثة أو قناة).

  7. املأ الحقول كما يلي:

  • Post as: (النشر بصفتك:) اختر من يجب أن تأتي الرسائل منه؛ يمكنك ترك هذه القيمة مضبوطة على القيمة الافتراضية أو اختيار User (مستخدم) لجعل الرسالة تظهر منك.

  • Post in: (النشر في:) حدد Channel (قناة)، مما سيؤدي إلى ظهور المزيد من الحقول:

    • Team: (الفريق:) حدد الفريق المطلوب.
    • Channel: (القناة:) حدد القناة المطلوبة.
    • Adaptive Card: (بطاقة تكيفية:) انقر داخل الإدخال، مما سيفتح نافذة منبثقة (موضحة في الخطوة التالية).

  1. انقر داخل حقل Adaptive Card (البطاقة التكيفية) لفتح نافذة منبثقة [2] لإدراج محتوى ديناميكي أو تعبير. قم بالتبديل إلى علامة التبويب Expression (التعبير) واكتب triggerBody() في حقل التعبير.

  2. انقر فوق \u003ckbd\u003eSave\u003c/kbd\u003e (حفظ).

  3. يجب أن ترى الآن سير عمل يسمى manual → Post card in a chat or channel في قائمتك. انقر فوق زر النقاط العمودية على سير العمل هذا وحدد \u003ckbd\u003eDetails\u003c/kbd\u003e (التفاصيل) من القائمة المنسدلة.

  4. في هذه الصفحة، انقر فوق \u003ckbd\u003eCopy webhook link\u003c/kbd\u003e (نسخ رابط خطاف الويب) للحصول على الرابط للخطوات التالية. بينما أنت هنا، يمكنك اختياريًا تعديل اسم سير العمل ليعكس الغرض منه للآخرين في فريقك.

إعداد Discourse

الآن، نعود إلى Discourse:

  1. في منطقة مسؤول Discourse، قم بتمكين الإعداد Chat integration enabled (تم تمكين تكامل الدردشة) لتشغيل مكون الإضافة Chat Integration وتمكين الإعداد Chat integration Teams enabled لدعم Microsoft Teams.

  2. في الشريط الجانبي، ابحث عن قسم Plugins (المكونات الإضافية) وانقر فوق Chat Integrations (تكاملات الدردشة)، ثم انقر فوق \u003ckbd\u003e**+ Create Channel**\u003c/kbd\u003e (إنشاء قناة).

  3. في نافذة Edit Channel (تحرير القناة) المنبثقة، املأ الحقول كما يلي:

  • Name: (الاسم:) أدخل اسمًا يوضح القناة التي تتصل بها في Microsoft Teams؛ لا يلزم أن يكون مطابقًا تمامًا.
  • Webhook URL: (عنوان URL لخطاف الويب:) الصق عنوان URL لخطاف الويب الذي نسخته في الخطوة 11 من قسم إعداد Teams أعلاه.
  1. انقر فوق \u003ckbd\u003eSave Channel\u003c/kbd\u003e (حفظ القناة).

اختبار التكامل

حان الوقت للتأكد من أن كل شيء يعمل كما هو متوقع.

  1. في Discourse، انقر فوق \u003ckbd\u003eTest\u003c/kbd\u003e (اختبار) على القناة التي تم إنشاؤها حديثًا.

  2. ابحث عن موضوع حسب المعرف أو العنوان أو عنوان URL؛ حدد الموضوع المطلوب؛ وانقر فوق \u003ckbd\u003eSend Test Message\u003c/kbd\u003e (إرسال رسالة اختبار).

  3. في Microsoft Teams، يجب نشر رسالة جديدة تحتوي على معلومات من الموضوع في القناة:

اختياري: إعداد قواعد لقناتك

بمجرد التأكد من أن كل شيء يعمل، يمكنك العودة إلى Discourse وإعداد قواعد إضافية لقناتك لتخصيص الرسالة.

استكشاف الأخطاء وإصلاحها

إذا لم تظهر الرسالة في Microsoft Teams كما هو متوقع، فانتقل إلى صفحة Workflow Details (تفاصيل سير العمل) (راجع الخطوة 10 في قسم إعداد Teams أعلاه) وتحقق من قسم Run history (سجل التشغيل). يجب أن يعرض هذا سجلات لكل عملية تشغيل للرسالة.

انقر فوق التشغيل الفاشل، والذي سينقلك إلى منطقة Power Automate حيث يمكنك رؤية رسالة خطأ في الجزء العلوي من الصفحة. (في لقطة الشاشة أدناه، كان التشغيل ناجحًا، لكن السهم يشير إلى المكان الذي سيظهر فيه الخطأ في حالة فشل التشغيل.)

يجب أن يوضح هذا المشكلة، والتي يمكنك بعد ذلك إصلاحها أو مشاركتها معنا هنا حتى نتمكن من المساعدة.


    1. لا يدعم Discourse حاليًا خطافات الويب المصادق عليها إلى Teams، لذا فإن خيار “Anyone” (أي شخص) فقط هو الذي يعمل.
    ↩︎
  1. إذا لم تظهر النافذة المنبثقة، اكتب أي شيء مؤقتًا في حقل البطاقة التكيفية، واحفظ سير العمل، وافتحه مرة أخرى للتحرير، ويجب أن تظهر النافذة المنبثقة. ↩︎

12 إعجابًا

لقد جربته للتو وبدا أنه يعمل في البداية، ولكن فقط في المرة الأولى التي نقرت فيها على زر الاختبار.
تم إعداد القواعد على النحو التالي:

  • النوع: عادي
  • الفلتر: جميع المواضيع (؟) والردود (ترجمة من الألمانية هنا)
  • التصنيف: Sandbox

عندما كتبت ردًا على موضوع الاختبار في تصنيف Sandbox الخاص بي، ظهر لي رمز تحذير عند الانتقال إلى تكاملات الدردشة، ولكن عند النقر على مثلث التحذير، يظهر خطأ غير معروف... مع رسالة الخطأ null.

عند محاولة إرسال إشعار اختبار آخر، يظهر خطأ آخر: 500 internal server error.

أي تلميحات حول أين نبدأ في استكشاف المشكلة وتلافيها موضع ترحيب. إذا كان ينبغي نشر هذا في مكان آخر (مثل صفحة إضافة تكامل الدردشة)، أو إنشاء موضوع منفصل، فلا تتردد في نقله وفقًا لذلك أو إخباري بذلك.

3 إعجابات

مرحبًا @SHilser - هل يمكنك التحقق من /logs في موقعك، ورؤية ما إذا كان هناك أي شيء ذي صلة هناك؟

إعجابَين (2)

يبدو أن هناك شيئين ذوي صلة.

  • خطأ في المقبس (Socket Error)
  • خطأ داخلي في الخادم (Internal Server Error)

لقد قمت بنسخ السجلات أدناه (استبدلت اسم النطاق الخاص بي بـ mydomain.tld)

خطأ في المقبس (Socket Error)

الرسالة (تم الإبلاغ عن 4 نسخ)

SocketError (فشل في فتح اتصال TCP إلى outlook.office.com:443 (getaddrinfo: فشل مؤقت في حل الاسم))
app/controllers/application_controller.rb:340:in `block in with_resolved_locale'
app/controllers/application_controller.rb:340:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
config/initializers/100-quiet_logger.rb:19:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Backtrace

/usr/local/lib/ruby/2.6.0/net/http.rb:949:in `rescue in block in connect'
/usr/local/lib/ruby/2.6.0/net/http.rb:946:in `block in connect'
/usr/local/lib/ruby/2.6.0/timeout.rb:93:in `block in timeout'
/usr/local/lib/ruby/2.6.0/timeout.rb:103:in `timeout'
/usr/local/lib/ruby/2.6.0/net/http.rb:945:in `connect'
/usr/local/lib/ruby/2.6.0/net/http.rb:930:in `do_start'
/usr/local/lib/ruby/2.6.0/net/http.rb:919:in `start'
/usr/local/lib/ruby/2.6.0/net/http.rb:1470:in `request'
rack-mini-profiler (2.0.4) lib/patches/net_patches.rb:19:in `block in request_with_mini_profiler'
rack-mini-profiler (2.0.4) lib/mini_profiler/profiling_methods.rb:33:in `step'

Env

HTTP HOSTS: mysite.tld

خطأ داخلي في الخادم (Internal Server Error)

الرسالة (تم الإبلاغ عن 4 نسخ)

Error: Internal Server Error
Url: https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js
Line: 1
Column: 267890
Window Location: https://mysite.tld/admin/plugins/chat/teams

Backtrace

o/t</<@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:267890
o/t<@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:267993
o@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:268074
trigger@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:545343
A</e._onError/<@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:550189
f</t.invoke@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:490190
f</t.flush@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:489198
p</t.flush@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:491205
t</t._end@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:496596Here
t</t.end@https://mysite.tld/assets/ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:1:493157

Env

HTTP HOSTS: mysite.tld

شكرًا لك على المساعدة :slight_smile:

إعجابَين (2)

هذا يشير إلى أن الخادم يواجه مشكلة في حل أسماء النطاقات (DNS). هل تستخدم تثبيتًا قياسيًا يعتمد على Docker؟ أم أن هذا في بيئة التطوير؟

3 إعجابات

تمت إعداده للتو قبل أسبوع تقريبًا على خادم DigitalOcean منفصل (تثبيت بنقرة واحدة، وأنا الآن على الإصدار: 2.6.0.beta1 (310952fd6a). أستخدم نطاقًا فرعيًا ولدي سجلات DNS أيضًا على DigitalOcean. لدي سجل A يشير إلى عنوان IP، وسجل MX يشير إلى اسم النطاق الفرعي لاستقبال الردود عبر البريد الإلكتروني وفقًا لـ هذه التعليمات). الشيء الوحيد هو أنني لم أنشر سجل DMARC.

هذا كل ما يمكنني تذكره فيما يتعلق بشؤون DNS. ومع ذلك، حتى الآن، كل شيء يعمل كما هو متوقع. الموقع مُعد، ويمكنني الوصول إليه عبر اسم النطاق الفرعي، وتسجيل الدخول، وإنشاء مواضيع (حتى عبر البريد الإلكتروني)، وما إلى ذلك.

لقد فوجئت فقط بأن الرسالة الأولى وصلت، لكن الرسائل اللاحقة لم تصل :man_shrugging:

إعجابَين (2)

عندما أقول “حل أسماء DNS”، أعني أن خادمك يواجه صعوبة في الاتصال بـ outlook.office.com. إعداد سجلات DNS الخاصة بمنتدىك لا ينبغي أن يؤثر على ذلك.

هل يمكنك محاولة الاتصال بخادمك عبر SSH وتشغيل الأمر التالي:

host outlook.office.com

يجب أن تحصل على نتيجة مشابهة للتالية:

outlook.office.com هو اسم بديل لـ substrate.office.com.
substrate.office.com هو اسم بديل لـ substrate.ms-acdc.office.com.
substrate.ms-acdc.office.com هو اسم بديل لـ afd-k.office.com.
afd-k.office.com هو اسم بديل لـ outlook-office-com.k-0002.k-msedge.net.
outlook-office-com.k-0002.k-msedge.net هو اسم بديل لـ k-0002.k-msedge.net.
k-0002.k-msedge.net يحتوي على عنوان IP: 13.107.18.11
k-0002.k-msedge.net يحتوي على عنوان IPv6: 2620:1ec:c::11
3 إعجابات

عندما أدخل الأمر

host -d outlook.office.com

أحصل على النتيجة التالية:

Trying "outlook.office.com"
Host outlook.office.com not found: 2(SERVFAIL)
Received 36 bytes from 127.0.0.53#53 in 43 ms

عند إضافة المنفذ :443، أواجه خطأً آخر:

Trying "outlook.office.com:443"
Host outlook.office.com:443 not found: 3(NXDOMAIN)
Received 40 bytes from 127.0.0.53#53 in 3 ms
Received 40 bytes from 127.0.0.53#53 in 3 ms

بالنسبة لنطاقات أخرى مثل google.com أو نطاق مثيل discourse الخاص بي (h-da.transformative-praxis.cc)، أو مواقع أخرى، أحصل على النتيجة المتوقعة المشابهة لما وصفتَه.

لقد قمت ببعض البحث حول الخطأ الأول، لكنني لا أزال غير متأكد من مصدره. لقد قرأتُ ما يلي، لكنني لم أستطع الحكم على ما إذا كان ذا صلة فعليًا بمشكلتي:

إعجاب واحد (1)

لقد حاولت إعادة المحاولة مرارًا وتكرارًا، وهذه المرة حصلت على النتائج التي وصفتها عند كتابة

host outlook.office.com

لذا بدا أن كل شيء على ما يرام في هذه المرحلة. قمت بتكرار ذلك عدة مرات متتالية للتأكد (حوالي 15 مرة مع فاصل زمني يقارب 10 ثوانٍ)، وفي نقطة ما حصلت على نفس خطأ “servfail” كما كان من قبل. لكن في الغالب كان الأمر يعمل.

الحالة معاكسة تمامًا عندما أحاول إرسال رسالة اختبار. ربما تعمل مرة واحدة من كل عشر مرات. وفي الأوقات الأخرى، أحصل على نفس الأخطاء كما كان من قبل. وعندما أنشر رسالة عادية تتوافق مع القاعدة التي حددتها للقناة، لا أحصل على إشعار ولا على رسالة خطأ في السجلات.
يبدو الأمر عشوائيًا لدرجة أنني لا أستطيع معرفة ما يسبب المشكلة.

استمررت في الاشتباه في إعداداتي التي تتضمن قطعتين (droplets) لكل نطاق فرعي وسجلين A مرتبطين بهما، بالإضافة إلى مجموعة واحدة من سجلات NS لنطاقي الرئيسي تشير إلى ns1.digitalocean.com. لذا جربت dnsstuff لموقعي وحصلت على نتيجة “فشل” في فحص سجل SOA، و whatsmydns.net لسجلات NS الخاصة بي، لكنني ما زلت لم أستطع اكتشاف أي روابط محتملة مع مشكلتي.

في هذه المرحلة، أنا مشوش تمامًا: من الذي يسبب الخطأ؟ هل أنا من ارتكب بعض إعدادات DNS الخاطئة (والتي لا ينبغي أن تؤثر على الأمر وفقًا لـ @david)، أم أن المشكلة في إعدادات الخادم أو مشاكله، أم أن الأمر يعود إلى MS-Teams (outlook.office.com) الذي يتصرف بشكل غير طبيعي أو يحجبني بطريقة ما؟

أي تلميحات حول ما يمكنني التحقق منه أو فعله لإيجاد الخطأ ستكون موضع تقدير، بما في ذلك أماكن أخرى يمكنني التوجه إليها وطرح السؤال، إذا كنت تعتقد أن هذا الأمر يتجاوز ما يمكنكم فعله لمساعدتي هنا.

شكرًا جزيلاً لكم على كل المساعدة حتى الآن.

إعجاب واحد (1)

مرحبًا، شكرًا لك على هذا. أنا أفشل باستمرار في الخطوة 5 من Discourse: تظهر رسالة في مربع الحوار أن عنوان URL الخاص بـ Webhooks الواردة غير صالح.

أي مساعدة مودر عليها!

دان

إعجاب واحد (1)

هل تمانع مشاركة شكل رابط الويب هوك الخاص بك؟ إما عبر رسالة خاصة لي، أو، إذا كان بإمكانك إبطاله أولاً، هنا في الموضوع؟

إعجاب واحد (1)

شكرًا لك @Dan_Turner، لقد خفّضنا قليلاً من شروط التحقق الخاصة بنا، وهو ما يجب أن يساعد في تحسين الوضع. يرجى تجربته وإخباري إذا كان يعمل بشكل أفضل بالنسبة لك

إعجابَين (2)

شكرًا لك! سأجرب ذلك.

دان

إعجاب واحد (1)

آسف على البساطة، لكن هل أحتاج إلى تحديث Discourse أم أن عليّ تعديل الملف مباشرةً كما هو موضح في الإصلاح؟
شكرًا لك، دان

إعجاب واحد (1)

يجب عليك تحديث الإضافة. انتقل إلى /admin/upgrade، ثم اضغط على زر التحديث بجوار “Discourse-chat-integration”.

إعجابَين (2)

مرحبًا - آسف جدًا على عدم كفاءتي، لكن كيف يمكنني تجربتها فعليًا بينما أنا على نسخة ديسكورد مستضافة؟ شكرًا لك، دان

إعجاب واحد (1)

ستحتاج إلى طلب من موفر الاستضافة الخاص بك تحديث الإضافة نيابةً عنك. في discourse.org، تم تطبيق هذا التغيير بالفعل على جميع عملائنا، لذا أفترض أنك مستضاف في مكان آخر؟

إعجاب واحد (1)

نعم، استضافة ديسكورد بالنسبة لي. ما هو الإصدار الموجود فيها، من فضلك، وسأطلب منهم التحديث؟

إعجاب واحد (1)

لا توجد أرقام إصدارات للإضافات، ولكن يمكنك مشاركة رابط هذا الالتزام معهم: https://github.com/discourse/discourse-chat-integration/commit/00ec1f486a3fd1dc523cdf242cfb1c78baaa407e

إعجابَين (2)

شكراً لك على هذه الإضافة المفيدة للغاية.
سيكون التحسين الكبير هو: إضافة إشارة للمجموعة في الرسالة لتوليد إشعارات على جانب Teams.
يبدو أن واجهة برمجة تطبيقات webhook لم تكن (أو لا تزال) تطبق هذه الميزة، ولكن البعض يقول إنها تم تطبيقها مؤخرًا.
هل تعتقد أنه يمكن تطبيقها بسهولة؟