मुख्य सामग्री पर जाएं

Slack

स्थिति: Slack ऐप इंटीग्रेशन के माध्यम से DMs + चैनलों के लिए प्रोडक्शन-रेडी। डिफ़ॉल्ट मोड Socket Mode है; HTTP Events API मोड भी समर्थित है।

Pairing

Slack DMs डिफ़ॉल्ट रूप से pairing मोड में रहते हैं।

Slash commands

नेटिव कमांड व्यवहार और कमांड कैटलॉग।

Channel troubleshooting

क्रॉस-चैनल डायग्नोस्टिक्स और रिपेयर प्लेबुक्स।

त्वरित सेटअप

1

Create Slack app and tokens

Slack ऐप सेटिंग्स में:
{
  channels: {
    slack: {
      enabled: true,
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}
{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}
    Env फॉलबैक (केवल डिफ़ॉल्ट अकाउंट):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
2

ऐप इवेंट्स सब्सक्राइब करें

निम्न के लिए bot इवेंट्स सब्सक्राइब करें:
  • app_mention
  • message.channels, message.groups, message.im, message.mpim
  • reaction_added, reaction_removed
  • member_joined_channel, member_left_channel
  • channel_rename
  • pin_added, pin_removed
DMs के लिए App Home में Messages Tab भी सक्षम करें।
3

gateway शुरू करें

openclaw gateway

टोकन मॉडल

  • Socket Mode के लिए botToken + appToken आवश्यक हैं।
  • HTTP मोड के लिए botToken + signingSecret आवश्यक हैं।
  • कॉन्फ़िग टोकन, env फॉलबैक को ओवरराइड करते हैं।
  • SLACK_BOT_TOKEN / SLACK_APP_TOKEN env फॉलबैक केवल डिफ़ॉल्ट अकाउंट पर लागू होता है।
  • userToken (xoxp-...) केवल कॉन्फ़िग में उपलब्ध है (कोई env फॉलबैक नहीं) और डिफ़ॉल्ट रूप से केवल-पढ़ने योग्य व्यवहार (userTokenReadOnly: true) पर सेट रहता है।
  • वैकल्पिक: यदि आप चाहते हैं कि आउटगोइंग संदेश सक्रिय एजेंट पहचान (कस्टम username और आइकन) का उपयोग करें, तो chat:write.customize जोड़ें। icon_emoji में :emoji_name: सिंटैक्स का उपयोग होता है।
actions/directory रीड्स के लिए, कॉन्फ़िग होने पर user token को प्राथमिकता दी जा सकती है। लिखने के लिए bot token प्राथमिक रहता है; user-token से लिखना केवल तब अनुमति है जब userTokenReadOnly: false हो और bot token उपलब्ध न हो।

टोकन उपयोग

channels.slack.dmPolicy DM एक्सेस को नियंत्रित करता है (लेगेसी: channels.slack.dm.policy):
- `pairing` (डिफ़ॉल्ट)
- `allowlist`
- `open` (इसके लिए `channels.slack.allowFrom` में `"*"` शामिल होना चाहिए; लेगेसी: `channels.slack.dm.allowFrom`)
- `disabled`

DM फ्लैग्स:

- `dm.enabled` (डिफ़ॉल्ट true)
- `channels.slack.allowFrom` (प्राथमिक)
- `dm.allowFrom` (लेगेसी)
- `dm.groupEnabled` (ग्रुप DMs डिफ़ॉल्ट false)
- `dm.groupChannels` (वैकल्पिक MPIM allowlist)

DMs में pairing के लिए `openclaw pairing approve slack <code>` का उपयोग करें।

कमांड्स और slash व्यवहार

  • Slack के लिए नेटिव कमांड auto-mode बंद है (commands.native: "auto" Slack नेटिव कमांड्स को सक्षम नहीं करता)।
  • नेटिव Slack कमांड हैंडलर्स को channels.slack.commands.native: true (या ग्लोबल commands.native: true) से सक्षम करें।
  • जब नेटिव कमांड्स सक्षम हों, तो Slack में संबंधित slash कमांड्स (/<command> नाम) रजिस्टर करें।
  • यदि नेटिव कमांड्स सक्षम नहीं हैं, तो आप channels.slack.slashCommand के माध्यम से एकल कॉन्फ़िगर किया गया slash कमांड चला सकते हैं।
डिफ़ॉल्ट slash कमांड सेटिंग्स:
  • enabled: false
  • name: "openclaw"
  • sessionPrefix: "slack:slash"
  • ephemeral: true
Slash सत्र अलग-अलग कुंजियों का उपयोग करते हैं:
  • agent:<agentId>:slack:slash:<userId>
और फिर भी कमांड निष्पादन को लक्ष्य वार्तालाप सत्र (CommandTargetSessionKey) के विरुद्ध रूट करते हैं।

थ्रेडिंग, सत्र और उत्तर टैग

  • DMs को direct के रूप में रूट किया जाता है; चैनल्स को channel; MPIMs को group
  • डिफ़ॉल्ट session.dmScope=main के साथ, Slack DMs एजेंट के मुख्य सत्र में समाहित हो जाते हैं।
  • चैनल सत्र: agent:<agentId>:slack:channel:<channelId>
  • थ्रेड उत्तर लागू होने पर थ्रेड सत्र प्रत्यय (:thread:<threadTs>) बना सकते हैं।
  • channels.slack.thread.historyScope का डिफ़ॉल्ट thread है; thread.inheritParent का डिफ़ॉल्ट false है।
  • channels.slack.thread.initialHistoryLimit यह नियंत्रित करता है कि नया थ्रेड सत्र शुरू होने पर मौजूदा थ्रेड संदेशों में से कितने प्राप्त किए जाएँ (डिफ़ॉल्ट 20; अक्षम करने के लिए 0 सेट करें)।
उत्तर थ्रेडिंग नियंत्रण:
  • channels.slack.replyToMode: off|first|all (डिफ़ॉल्ट off)
  • channels.slack.replyToModeByChatType: प्रत्येक direct|group|channel के लिए
  • डायरेक्ट चैट्स के लिए पुराना फॉलबैक: channels.slack.dm.replyToMode
यदि आप channels.slack.userToken कॉन्फ़िगर करते हैं, तो इन्हें User Token Scopes के अंतर्गत जोड़ें।
  • channels:history, groups:history, im:history, mpim:history
  • channels:read, groups:read, im:read, mpim:read
नोट: replyToMode="off" अप्रत्यक्ष उत्तर थ्रेडिंग को अक्षम करता है। स्पष्ट [[reply_to_*]] टैग अभी भी मान्य रहेंगे।

मीडिया, चंकिंग और डिलीवरी

Slack फ़ाइल अटैचमेंट्स को Slack-होस्टेड निजी URLs (टोकन-प्रमाणित अनुरोध प्रवाह) से डाउनलोड किया जाता है और यदि प्राप्ति सफल हो तथा आकार सीमाएँ अनुमति दें तो मीडिया स्टोर में लिखा जाता है।
रनटाइम इनबाउंड आकार सीमा डिफ़ॉल्ट रूप से `20MB` है, जब तक कि `channels.slack.mediaMaxMb` द्वारा ओवरराइड न किया जाए।
  • टेक्स्ट चंक्स channels.slack.textChunkLimit (डिफ़ॉल्ट 4000) का उपयोग करते हैं
  • channels.slack.chunkMode="newline" पैराग्राफ-प्रथम विभाजन सक्षम करता है
  • फ़ाइल भेजने में Slack upload APIs का उपयोग होता है और इसमें थ्रेड उत्तर (thread_ts) शामिल हो सकते हैं
  • आउटबाउंड मीडिया सीमा कॉन्फ़िगर होने पर channels.slack.mediaMaxMb का पालन करती है; अन्यथा चैनल भेजने में मीडिया पाइपलाइन से MIME-काइंड डिफ़ॉल्ट्स उपयोग होते हैं
वांछित स्पष्ट लक्ष्य:
- DMs के लिए `user:<id>`
- चैनल्स के लिए `channel:<id>`

Slack DMs, user targets पर भेजते समय Slack conversation APIs के माध्यम से खोले जाते हैं।

क्रियाएँ और गेट्स

Slack क्रियाएँ channels.slack.actions.* द्वारा नियंत्रित होती हैं। वर्तमान Slack टूलिंग में उपलब्ध क्रिया समूह:
ModeDefault
messagesenabled
reactionsenabled
pinsenabled
memberInfoenabled
emojiListenabled

इवेंट्स और परिचालन व्यवहार

  • संदेश संपादन/हटाना/थ्रेड प्रसारण को सिस्टम इवेंट्स में मैप किया जाता है।
  • रिएक्शन जोड़ने/हटाने की घटनाओं को सिस्टम इवेंट्स में मैप किया जाता है।
  • सदस्य जुड़ना/छोड़ना, चैनल बनना/नाम बदलना, और पिन जोड़ना/हटाना जैसी घटनाओं को सिस्टम इवेंट्स में मैप किया जाता है।
  • channel_id_changed, जब configWrites सक्षम हो, तो चैनल कॉन्फ़िग कुंजियों को माइग्रेट कर सकता है।
  • चैनल का विषय/उद्देश्य मेटाडेटा अविश्वसनीय संदर्भ के रूप में माना जाता है और इसे रूटिंग संदर्भ में इंजेक्ट किया जा सकता है।

Ack रिएक्शन

ackReaction इनबाउंड संदेश को प्रोसेस करते समय OpenClaw द्वारा एक स्वीकृति इमोजी भेजता है। समर्थित चैट प्रकार:
  • channels.slack.accounts.<accountId>.ackReaction`
  • group: group DMs / MPIMs (Slack mpim)
  • channel: मानक चैनल (public/private)
  • एजेंट पहचान इमोजी फॉलबैक (agents.list[].identity.emoji, अन्यथा ”👀”)
प्राथमिकता क्रम:
  • Slack शॉर्टकोड्स की अपेक्षा करता है (उदाहरण के लिए "eyes")।
  • replyToMode

मैनिफेस्ट और स्कोप चेकलिस्ट

{
  "display_information": {
    "name": "OpenClaw",
    "description": "OpenClaw के लिए Slack कनेक्टर"
  },
  "features": {
    "bot_user": {
      "display_name": "OpenClaw",
      "always_online": false
    },
    "app_home": {
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    },
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "OpenClaw को एक संदेश भेजें",
        "should_escape": false
      }
    ]
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "chat:write",
        "channels:history",
        "channels:read",
        "groups:history",
        "im:history",
        "mpim:history",
        "users:read",
        "app_mentions:read",
        "reactions:read",
        "reactions:write",
        "pins:read",
        "pins:write",
        "emoji:read",
        "commands",
        "files:read",
        "files:write"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_mention",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "reaction_added",
        "reaction_removed",
        "member_joined_channel",
        "member_left_channel",
        "channel_rename",
        "pin_added",
        "pin_removed"
      ]
    }
  }
}
यदि आप channels.slack.userToken कॉन्फ़िगर करते हैं, तो सामान्य read स्कोप होते हैं:
{
  channels: {
    slack: {
      replyToMode: "off",
      replyToModeByChatType: { group: "first" },
    },
  },
}

समस्या-निवारण

क्रम में जाँचें:
- `groupPolicy`
- चैनल allowlist (`channels.slack.channels`)
- `requireMention`
- प्रति-चैनल `users` allowlist

उपयोगी कमांड:
openclaw channels status --probe
openclaw logs --follow
openclaw doctor
जाँचें:
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (या पुराना `channels.slack.dm.policy`)
- pairing अनुमोदन / allowlist प्रविष्टियाँ
openclaw pairing list slack
Slack ऐप सेटिंग्स में bot + app टोकन और Socket Mode सक्षम है या नहीं, इसकी पुष्टि करें.
सत्यापित करें:
- signing secret
- webhook path
- Slack Request URLs (Events + Interactivity + Slash Commands)
- प्रत्येक HTTP अकाउंट के लिए अद्वितीय `webhookPath`
सत्यापित करें कि आपका आशय था:
- native command mode (`channels.slack.commands.native: true`) और Slack में पंजीकृत मिलते-जुलते slash commands
- या single slash command mode (`channels.slack.slashCommand.enabled: true`)

साथ ही `commands.useAccessGroups` और channel/user allowlists की जाँच करें.

कॉन्फ़िगरेशन संदर्भ संकेत

मुख्य संदर्भ:
  • Configuration reference - Slack उच्च-प्रभाव वाले Slack फ़ील्ड:
    • mode/auth: mode, botToken, appToken, signingSecret, webhookPath, accounts.*
    • DM एक्सेस: dm.enabled, dmPolicy, allowFrom (पुराना: dm.policy, dm.allowFrom), dm.groupEnabled, dm.groupChannels
    • चैनल एक्सेस: groupPolicy, channels.*, channels.*.users, channels.*.requireMention
    • थ्रेडिंग/इतिहास: replyToMode, replyToModeByChatType, thread.*, historyLimit, dmHistoryLimit, dms.*.historyLimit
    • डिलीवरी: textChunkLimit, chunkMode, mediaMaxMb
    • ऑप्स/फ़ीचर्स: configWrites, commands.native, slashCommand.*, actions.*, userToken, userTokenReadOnly

संबंधित