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

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

يسمح بنشر الإشعارات على Slack، وإدارة القواعد باستخدام أوامر الشرطة المائلة (Slash Commands)، ونشر النصوص مرة أخرى إلى Discourse. يمكن العثور على تعليمات أوامر الشرطة المائلة عن طريق كتابة /discourse help. يمكن إنشاء النص باستخدام قوائم السياق على منشورات Slack.

التثبيت

إذا لم تكن قد قمت بذلك بالفعل، قم بتثبيت المكون الإضافي discourse-chat-integration، وتأكد من تمكينه عبر إعداد الموقع chat integration enabled.

إعداد Slack

  1. توجّه إلى Slack API: Applications | Slack وأنشئ تطبيقًا جديدًا. إذا لم تكن قد سجلت الدخول بالفعل، سيُطلب منك القيام بذلك. (قد تحتاج إلى النقر على هذا الرابط مرة أخرى، حيث لا يبدو أنه يعيد التوجيه بعد تسجيل الدخول :()

  2. انقر على Create New App

  3. اختر اسمًا (يمكن أن يكون أي شيء)، وحدد فريق Slack الذي تريد أن يكون التطبيق جزءًا منه

  4. في القائمة اليسرى، ضمن “Features” (الميزات)، انقر على “OAuth & Permissions” (تخويل OAuth والأذونات).

  5. قم بالتمرير لأسفل إلى “Scopes / Bot Token Scopes” (النطاقات / نطاقات رمز البوت)، وأضف كلًا مما يلي لتمكين المكون الإضافي من نشر الرسائل في مساحة عمل Slack الخاصة بك:

    • chat:write
    • chat:write.customize
  1. انتقل إلى صفحة الإعدادات (Settings) > Install App (تثبيت التطبيق)، وانقر على Install to Workspace (التثبيت في مساحة العمل) وقم بتفويض التطبيق لفريقك

  2. انسخ Bot User OAuth Token (رمز وصول البوت)، والصقه في إعدادات موقع Discourse الخاص بك ضمن chat_integration_slack_access_token

  3. انتقل إلى صفحة Basic Information (المعلومات الأساسية)، وانسخ Verification Token (رمز التحقق)، والصقه في إعدادات موقع Discourse الخاص بك ضمن chat_integration_slack_incoming_webhook_token

  4. في أسفل صفحة Basic Information (المعلومات الأساسية)، يمكنك تعيين أيقونة البوت واسمه ووصفه.

  5. قم بإعداد بعض “القواعد” (Rules) لقنواتك، وفقًا لتعليمات discourse-chat-integration، أو بدلاً من ذلك استخدم أوامر الشرطة المائلة داخل قناة للبدء.

  6. أضف مستخدم البوت Discourse إلى القنوات التي تريد أن يتمكن من النشر فيها:

    • من القائمة اليسرى لصفحة عميل Slack الخاص بك، انقر بزر الماوس الأيمن على اسم القناة التي تريد إضافة التطبيق إليها وانقر على View Channel Details (عرض تفاصيل القناة):
    • من النافذة المنبثقة، حدد علامة التبويب Integrations (التكاملات)
    • في صفحة Integrations، يمكنك النقر على Add an App (إضافة تطبيق) واختيار Discourse Bot:
    • يجب أن يكون التطبيق الآن قادرًا على النشر في القناة

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

أمر الشرطة المائلة /discourse يُرجع خطأ dispatch_failed

العَرَض

بعد تكوين تكامل Slack، تحاول استخدام أمر الشرطة المائلة /discourse وترى الخطأ التالي في Slack:

/discourse failed with the error "dispatch_failed"

السبب

من المحتمل أن يكون هذا بسبب خطأ في التكوين. تحقق من أن القيمة التي قمت بتكوينها لـ Request URL (عنوان URL للطلب) صحيحة. يجب أن تكون بهذا الشكل:

<your-discourse-url>/chat-integration/slack/command

الإصلاح

قم بتحديث Request URL الخاص بك وامنح اهتمامًا خاصًا لما يلي:

  1. تأكد من أنه يبدأ بالبروتوكول الصحيح (على سبيل المثال، https://)
  2. تأكد من أنه يستخدم النطاق الخاص بموقع Discourse الخاص بك (وليس مثيل Slack الخاص بك)
  3. تأكد من احتوائه على المسار الصحيح /chat-integration/slack/command
33 إعجابًا

I’m very excited to try this plugin. I gave installing it a shot by following these instructions carefully, but when I go to test a slash command on slack I get:

slackbot Darn - that slash command didn't work (error message: `403_client_error`). Manage the command at Discourse Integration.

This would suggest that it’s an issue with the authentication of slack to your Discourse instance. Can you double check that the incoming webhook token has been copied across correctly? (step 12 above) Make sure there’s nothing weird being copied before/after (e.g. spaces)

Also, it seems Slack’s App config tools are subject to refinement as a details in this howto have changed.

  1. in step 4:
  • was “Under features and Functionality” select “Permissions”
  • now is “Under Features” select “OAuth & Permissions”
  1. in step 6: would be good to clarify “Under Features, select ‘Slash Commands’”, same with step 8 “Under Features, select ‘Interactive Messages’”

Thanks for building and sharing this plugin!

Ugh, I went through the instructions twice, and realized I copied the verification token incorrectly. My issue was completely PEBKAC :(- thanks for the (immediate) help!

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

Thanks - I’ve updated the two things you mentioned, and converted the first post to a wiki. Please feel free to update if you notice anything else.

No problem - glad it’s working :smiley:

3 إعجابات

re: rule generation. The help doc states:


New rule: /discourse [watch|follow|mute] [category] [tag:name]
(you must specify a rule type and at least one category or tag)

  • watch – notify this channel for new topics and new replies
  • follow – notify this channel for new topics
  • mute – block notifications to this channel

The integration doesn’t seem to be able to find tags.
edit: Ugh… I just saw the docs that the syntax for tags is [tag:name] :facepalm: … sorry I missed that…

I noticed that the help files are hard coded to the slash command “/discourse”… I pulled down the source and got as far as finding the strings in the locale files and where they’re invoked in the helper. I would like to issue a PR to allow the slash command in help files to be configurable (my integration uses my sitename as the command…) but I’m not sure how persistence works with Discourse plugins. If I submitted a partially complete PR would you be able to provide some pointers or would that be a waste of time ?

Also, where would be the best place to add feature requests ?

إعجابَين (2)

The easiest way to change this to a different command is to go to your discourse admin panel, Customize Text Content, then type chat_integration.provider.slack into the search bar. You’ll find the “help” string in this list. Changes to this should persist across discourse/plugin updates

I think slack-specific ones in this topic, and general ones for the plugin in the main topic :slight_smile:

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

Wow. That’s pretty sweet - no code changes necessary. (I’m pretty new to Discourse but it seems pretty badass!)

إعجابَين (2)

What am I missing? When I try that, I get

“Sorry, this integration isn’t setup to support posting transcripts.”

Did I miss something? Is the feature available only to some Slack communities and not the free ones?

You need to use the “OAUTH Token” method of authentication to slack, not the “Webhook” method. The instructions above should walk you through setting up the oauth method.

4 إعجابات

That did it. I think I broke it by foolishly trying to migrate the settings from the other slack plugin.

One thing I don’t understand is who can use the slack App I created. It is just me? If so, that’s a little sucky. If not, wait, anyone can control what categories get watched? I see “collaborators” in the slack API page. If I add a collaborator can they too control the rules?

Also, it seems that rules established in the Discourse web interface don’t show up in slack if you do a /discourse status. Is that right?

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

When you create slack apps, they are private to you. Only you can edit the settings of the app, and only you can install it onto an organisation. Notice the “Not Distributed” status:
51
You can then install your app onto your Slack organisation. If you have slash commands set up, anyone in that organisation can control the ‘rules’ for any channel they have access to, and so you should make sure to set the chat integration discourse username appropriately.

‘Collaborators’ of the Slack app means that they can edit the app’s settings (things like callback URLs, auth secrets etc.). It has absolutely nothing to do with who can configure ‘rules’ using slash commands.

/discourse status should list all of the rules for the current channel. So if you have set up rules for #general using the discourse admin interface, they should show up when you run /discourse status in #general. If that’s not working, it’s a bug.

7 إعجابات

Thanks, @david, that’s a huge help. It still seems a bit wild that any slack user can change what Discourse stuff gets posted to a channel, but I suspect that’s because I don’t understand slack.

I think it depends what kind of community you have in Slack. In my mind there are three main scenarios:

  • If any member of the public can join your Slack organisation, Slash commands probably aren’t a good idea. In this case it’s probably easiest to just manage the rules from the discourse admin panel.

  • If you have a fairly open forum, but a closed slack organisation (like I believe the discourse team do), then having slash commands is a nice convenience without any real issue (everyone in slack is trusted).

  • If you have a roughly 1:1 mapping between forum members and slack members (e.g. a corporate environment), it can be useful to allow individuals to manage the rules in their own slack channel. For example, the dev team might want to watch dev, and the support team support. Rather than forcing all this to be done by a discourse admin, they can do it themselves with slash commands. I think this is how @mcwumbly uses slack integration.

10 إعجابات

We’re starting to see some healthy adoption of Slack threads in some channels. I was a big skeptic at first, but as people find good patterns for using them, I can see their value. Does the transcript feature work with threads at all?

4 إعجابات

That’s great to hear - I was a little skeptical how useful it would be as well, so glad to hear people like it :slight_smile:

Sadly not. I don’t know if the slack API allows loading messages from a specific thread, so we might need to do the filtering on the Discourse end.

8 إعجابات

Should transcript export work with Direct Messages? I just tried with two different ones and it’ll say Loading the transcript... but nothing happens after that.

إعجابَين (2)

I’m getting the same thing, and have checked my access and webhook tokes very carefully. Other things to try?

Also - is it possible to connect Discourse to multiple Slack orgs?

3 إعجابات