تخطَّ إلى المحتوى

Slack

يدمج موفر Slack العامل الرقمي لديك مع مساحات عمل Slack. وهو يدعم:

  • الرسائل المباشرة (DMs)
  • رسائل القنوات
  • الإشارات إلى التطبيق
  • المكونات التفاعلية (الأزرار والقوائم)
  • رسائل Block Kit الغنية
  • أوامر slash
  • الردود ضمن الخيوط
  • مساحة عمل Slack
  • صلاحية مسؤول لإنشاء تطبيق Slack
  1. إنشاء زوج رموز تكوين Slack

    انتقل إلى api.slack.com/apps وأنشئ زوج رموز تكوين للتطبيق. انسخ القيمتين:

    • Configuration access token (xoxe.xoxp-...)
    • Configuration refresh token (xoxe-1-...)
  2. تكوين الموفر

    answers.json
    {
    "setup_answers": {
    "messaging-slack": {
    "slack_configuration_access_token": "xoxe.xoxp-xxx",
    "slack_configuration_refresh_token": "xoxe-1-xxx"
    }
    }
    }
  3. تشغيل الإعداد

    Terminal window
    gtc setup --answers answers.json ./my-bundle
  4. النقر على Add to Slack

    يقوم الإعداد بتسجيل تطبيق Slack أو تحديثه ويعرض إجراء Add to Slack. افتح عنوان URL لتفويض Slack الذي تم إنشاؤه، واختر مساحة العمل، وراجع النطاقات المطلوبة، ثم وافق على التثبيت.

    عندما يعود تحويل OAuth إلى الإعداد، يحفظ Greentic معرف تطبيق Slack، ومعرف العميل، وسر العميل، وإجابات OAuth الخاصة بوقت التشغيل للمستأجر. إذا لم تتم معالجة callback تلقائيا، فشغل gtc setup --answers answers.json ./my-bundle مرة أخرى بعد الموافقة على التثبيت.

  5. إضافة التطبيق في Slack

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

  6. بدء وقت التشغيل أو إعادة تشغيله

    Terminal window
    gtc start ./my-bundle

    يستخدم بدء التشغيل slack_app_id المحفوظة وزوج رموز التكوين لتحديث بيان تطبيق Slack بعنوان webhook الحالي.

  7. اختبار القناة

    أرسل رسالة مباشرة إلى التطبيق أو اذكر التطبيق في قناة Slack التي أضفته إليها. تصل أحداث القنوات فقط للقنوات التي يكون التطبيق عضوا فيها وتسمح بها النطاقات المثبتة.

الخيارمطلوبالوصف
slack_configuration_access_tokenنعمرمز تكوين Slack قصير العمر المستخدم لتحديثات بيان التطبيق
slack_configuration_refresh_tokenنعمRefresh token يستخدم لتدوير configuration access token
slack_app_idمنشأSlack app id يتم إنشاؤه أو إرجاعه بواسطة الإعداد
slack_client_idمنشأSlack OAuth client id يتم إرجاعه عند تسجيل التطبيق
client_secretسر منشأSlack OAuth client secret يتم إرجاعه عند تسجيل التطبيق
- id: reply
type: reply
config:
message: "Hello! How can I help you?"

Slack uses mrkdwn format:

- id: formatted
type: reply
config:
message: |
*Bold* _Italic_ `code`
>Blockquote
• Bullet point

Use Slack’s Block Kit for rich layouts:

- id: rich_message
type: reply
config:
blocks:
- type: section
text:
type: mrkdwn
text: "*Welcome!*\nHow can I assist you today?"
- type: divider
- type: actions
elements:
- type: button
text:
type: plain_text
text: "Get Help"
action_id: "help_clicked"
value: "help"
- type: button
text:
type: plain_text
text: "View Status"
action_id: "status_clicked"
value: "status"
- id: ask_action
type: reply
config:
message: "What would you like to do?"
blocks:
- type: actions
elements:
- type: button
text:
type: plain_text
text: "Create Ticket"
style: primary
action_id: "create_ticket"
- type: button
text:
type: plain_text
text: "Cancel"
style: danger
action_id: "cancel"
- id: select_option
type: reply
config:
blocks:
- type: section
text:
type: mrkdwn
text: "Select a category:"
accessory:
type: static_select
action_id: "category_select"
options:
- text:
type: plain_text
text: "Technical Support"
value: "technical"
- text:
type: plain_text
text: "Billing"
value: "billing"
- text:
type: plain_text
text: "General"
value: "general"

Reply in a thread:

- id: thread_reply
type: reply
config:
message: "This replies in the thread"
thread_ts: "{{original_message.thread_ts}}"

تتغير واجهات API الخاصة بملفات Slack بمرور الوقت. استخدم هذا فقط عندما تعرض حزمة messaging-slack المثبتة دعم الملفات لإصدارك؛ وإلا فأرسل رابطا أو استخدم تدفق الرفع الخارجي الحالي في Slack.

- id: upload_file
type: reply
config:
files:
- url: "https://example.com/report.pdf"
filename: "report.pdf"
title: "Monthly Report"

Messages only visible to one user:

- id: ephemeral
type: reply
config:
message: "Only you can see this"
ephemeral: true
user: "{{user_id}}"
flows/on_interaction.ygtc
name: handle_interaction
version: "1.0"
nodes:
- id: route_action
type: branch
config:
conditions:
- expression: "action_id == 'help_clicked'"
to: show_help
- expression: "action_id == 'create_ticket'"
to: create_ticket
default: unknown_action
- id: show_help
type: reply
config:
message: "Here's how I can help..."
triggers:
- type: block_action
target: route_action
- id: handle_select
type: branch
config:
conditions:
- expression: "selected_value == 'technical'"
to: technical_flow
- expression: "selected_value == 'billing'"
to: billing_flow
  1. Go to Slash Commands in your app settings
  2. Create a command (e.g., /support)
  3. Set Request URL to your webhook

Handle in your flow:

flows/slash_command.ygtc
name: slash_command
version: "1.0"
nodes:
- id: handle_command
type: reply
config:
message: "Support bot at your service!"
response_type: in_channel # or "ephemeral"
triggers:
- type: slash_command
command: "/support"
target: handle_command
greentic.demo.yaml
tenants:
demo:
teams:
support:
channels:
slack:
provider: messaging-slack
config:
channel_id: "C1234567890"
tenants:
demo:
teams:
support:
channels:
slack-general:
provider: messaging-slack
config:
channel_id: "C1234567890"
slack-vip:
provider: messaging-slack
config:
channel_id: "C0987654321"
  1. Verify Event Subscriptions:

    • Check Request URL is correct
    • Ensure events are enabled
    • Verify bot is subscribed to correct events
  2. Check Bot Permissions:

    • Reinstall app after adding scopes
    • Verify bot is in the channel
  3. Test Webhook:

    Terminal window
    curl https://your-domain.com/v1/messaging/ingress/messaging-slack/demo/default

Your bot token is invalid or expired. Get a fresh token from OAuth & Permissions.

  • Verify channel ID is correct
  • Ensure bot is added to the channel
  • Check channel is not archived

Slack rate limits vary by method. Handle gracefully:

- id: reply
type: reply
config:
message: "Response"
retry_on_rate_limit: true
max_retries: 3

Greentic automatically validates:

  • Request timestamp
  • Signature using signing secret
  • Token verification