๐Ÿฆž
์ฑ„๋„ ํ†ตํ•ฉ

OpenClaw๋ฅผ Slack์— ์—ฐ๊ฒฐํ•˜๊ธฐ

Slack ์›Œํฌ์ŠคํŽ˜์ด์Šค์— OpenClaw๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด ์ง€์›์œผ๋กœ ์ฑ„๋„, ์Šค๋ ˆ๋“œ ๋˜๋Š” DM์—์„œ AI ์ง€์›์„ ๋ฐ›์œผ์„ธ์š”.

๐Ÿ’ผ ์™œ Slack์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”?
  • โœ“WebSocket ์—ฐ๊ฒฐ โ€” Slack Bot API + Socket Mode๋ฅผ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•
  • โœ“์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด โ€” ๋„ค์ดํ‹ฐ๋ธŒ /clawd ๋ช…๋ น์–ด ์ธํ„ฐํŽ˜์ด์Šค
  • โœ“์Šค๋ ˆ๋“œ ์ง€์› โ€” ๊ธฐ๋ก ์ปจํ…์ŠคํŠธ๋กœ ๋Œ€ํ™”๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌ
  • โœ“ํ’๋ถ€ํ•œ ์„œ์‹ โ€” ๋ฆฌ์•ก์…˜๊ณผ ํ•€์ด ์žˆ๋Š” ์„œ์‹ํ™”๋œ ์‘๋‹ต
  • โœ“์œ ์—ฐํ•œ ์ ‘๊ทผ โ€” DM, ๊ณต๊ฐœ ์ฑ„๋„, ๋น„๊ณต๊ฐœ ์ฑ„๋„
์š”๊ตฌ ์‚ฌํ•ญ
  • โ€ขSlack Bot ํ† ํฐ โ€” xoxb-...๋กœ ์‹œ์ž‘
  • โ€ขSlack App ํ† ํฐ โ€” xapp-...๋กœ ์‹œ์ž‘ (Socket Mode์šฉ)
  • โ€ขSlack App โ€” ์ ์ ˆํ•œ OAuth ์Šค์ฝ”ํ”„๊ฐ€ ์„ค์ •๋œ ์•ฑ

์„ค์ • ๋‹จ๊ณ„

1

Slack App ์ƒ์„ฑ

Slack API ํฌํ„ธ๋กœ ์ด๋™ํ•˜์—ฌ ์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ์„ธ์š”:

  • โ€ข api.slack.com/apps ๋ฐฉ๋ฌธ
  • โ€ข "Create New App" ํด๋ฆญ
  • โ€ข "From scratch" ์„ ํƒ
  • โ€ข ์ด๋ฆ„ ์ง€์ • (์˜ˆ: "OpenClaw") ๋ฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์„ ํƒ
2

Bot ํ† ํฐ ์Šค์ฝ”ํ”„ ์ถ”๊ฐ€

๋ด‡์˜ OAuth ๊ถŒํ•œ์„ ์„ค์ •ํ•˜์„ธ์š”:

  • โ€ข ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "OAuth & Permissions"๋กœ ์ด๋™
  • โ€ข "Bot Token Scopes"์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€:
  • - app_mentions:read โ€” ๋ฉ˜์…˜ ์ฝ๊ธฐ
  • - channels:history โ€” ์ฑ„๋„ ๋ฉ”์‹œ์ง€ ๋ณด๊ธฐ
  • - channels:read โ€” ์ฑ„๋„ ์ •๋ณด ๋ณด๊ธฐ
  • - chat:write โ€” ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ
  • - im:history โ€” DM ๊ธฐ๋ก ๋ณด๊ธฐ
  • - im:read โ€” DM ์ •๋ณด ๋ณด๊ธฐ
  • - im:write โ€” DM ๋Œ€ํ™” ์‹œ์ž‘
  • - reactions:write โ€” ๋ฆฌ์•ก์…˜ ์ถ”๊ฐ€
  • - users:read โ€” ์‚ฌ์šฉ์ž ์ •๋ณด ๋ณด๊ธฐ
3

Socket Mode ํ™œ์„ฑํ™”

Socket Mode๋Š” ๊ณต๊ฐœ URL ์—†์ด ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค:

  • โ€ข ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "Socket Mode"๋กœ ์ด๋™
  • โ€ข "Enable Socket Mode" ํ† ๊ธ€ ์ผœ๊ธฐ
  • โ€ข connections:write ์Šค์ฝ”ํ”„๋กœ App-Level ํ† ํฐ ์ƒ์„ฑ
  • โ€ข ํ† ํฐ ๋ณต์‚ฌ (xapp-...๋กœ ์‹œ์ž‘)
4

์›Œํฌ์ŠคํŽ˜์ด์Šค์— App ์„ค์น˜

์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  Bot ํ† ํฐ์„ ๋ฐ›์œผ์„ธ์š”:

  • โ€ข ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "Install App"์œผ๋กœ ์ด๋™
  • โ€ข "Install to Workspace" ํด๋ฆญ
  • โ€ข ์š”์ฒญ๋œ ๊ถŒํ•œ ์Šน์ธ
  • โ€ข Bot User OAuth ํ† ํฐ ๋ณต์‚ฌ (xoxb-...๋กœ ์‹œ์ž‘)
5

OpenClaw ์„ค์ •

openclaw.json์— Slack ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "xoxb-...",
      "appToken": "xapp-..."
    }
  }
}
6

์ฑ„๋„์— ๋ด‡ ์ดˆ๋Œ€

๋ด‡์ด ์‘๋‹ตํ•  ์ฑ„๋„์— ๋ด‡์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

  • โ€ข Slack์—์„œ ์ฑ„๋„ ์—ด๊ธฐ
  • โ€ข /invite @OpenClaw ์ž…๋ ฅ
  • โ€ข ๋˜๋Š” ์ฑ„๋„ ์ด๋ฆ„ ํด๋ฆญ -> ํ†ตํ•ฉ -> ์•ฑ ์ถ”๊ฐ€
  • โ€ข openclaw restart๋กœ OpenClaw๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ณ  ๋ด‡์„ ๋ฉ˜์…˜ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”.
๊ธฐ๋Šฅ

์Šค๋ ˆ๋“œ ์ง€์›

์„ค์ • ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ก ๋ฒ”์œ„๋กœ ์Šค๋ ˆ๋“œ ๋‚ด ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ ์œ ์ง€.

์ด๋ชจ์ง€ ๋ฆฌ์•ก์…˜

๋ด‡์ด ๋ฉ”์‹œ์ง€ ํ™•์ธ ๋˜๋Š” ์ƒํƒœ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด ๋ฆฌ์•ก์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๊ณ ์ •

๋‚˜์ค‘์— ์‰ฝ๊ฒŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘์š”ํ•œ ์‘๋‹ต์„ ๊ณ ์ •ํ•˜์„ธ์š”.

์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด

์–ด๋””์„œ๋‚˜ ๋น ๋ฅธ AI ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•ด /clawd๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ฉค๋ฒ„ ์ •๋ณด

ํ•„์š”ํ•  ๋•Œ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฉค๋ฒ„ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜์„ธ์š”.

DM ์ง€์›

๋ด‡๊ณผ์˜ ๋น„๊ณต๊ฐœ 1:1 ๋Œ€ํ™”.

๊ณ ๊ธ‰ ์„ค์ •

Slack ํ†ตํ•ฉ์„ ์œ„ํ•œ ์ „์ฒด ์„ค์ • ์˜ต์…˜:

{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "xoxb-...",
      "appToken": "xapp-...",
      "dm": {
        "enabled": true,
        "policy": "pairing",
        "allowFrom": ["U123", "U456"]
      },
      "channels": {
        "#general": {
          "allow": true,
          "requireMention": true,
          "users": ["U123"]
        }
      },
      "historyLimit": 50,
      "slashCommand": {
        "enabled": true,
        "name": "clawd"
      },
      "actions": {
        "reactions": true,
        "messages": true,
        "pins": true
      }
    }
  }
}
  • dm.enabled โ€” ๋ด‡์— ๋Œ€ํ•œ ์ง์ ‘ ๋ฉ”์‹œ์ง€ ํ—ˆ์šฉ
  • dm.policy โ€” DM ์ ‘๊ทผ ์ •์ฑ… ("pairing" ๋˜๋Š” "open")
  • dm.allowFrom โ€” DM์ด ํ—ˆ์šฉ๋œ ์‚ฌ์šฉ์ž ID ๋ฐฐ์—ด
  • channels โ€” ์ฑ„๋„๋ณ„ ์„ค์ • ๊ฐ์ฒด
  • requireMention โ€” @๋ฉ˜์…˜๋  ๋•Œ๋งŒ ์‘๋‹ต
  • historyLimit โ€” ์ปจํ…์ŠคํŠธ์— ํฌํ•จํ•  ๋ฉ”์‹œ์ง€ ์ˆ˜
  • slashCommand โ€” ์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด ์„ค์ • ๊ตฌ์„ฑ
  • actions โ€” ๋ฆฌ์•ก์…˜, ๋ฉ”์‹œ์ง€, ํ•€ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”
์ฑ„๋„ ์ •์ฑ…

ํ—ˆ์šฉ ๋ชฉ๋ก ๋ชจ๋“œ

๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋œ ์ฑ„๋„์—์„œ๋งŒ ์‘๋‹ต. ํ†ต์ œ๋œ ํ™˜๊ฒฝ์— ์ ํ•ฉ.

์˜คํ”ˆ ๋ชจ๋“œ

๋ด‡์ด ์ดˆ๋Œ€๋œ ๋ชจ๋“  ์ฑ„๋„์—์„œ ์‘๋‹ต. requireMention์œผ๋กœ ์‘๋‹ต์„ ์ œ์–ดํ•˜์„ธ์š”.

Slack ์‚ฌ์šฉ์ž ID ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

ํ”„๋กœํ•„์—์„œ:

์‚ฌ์šฉ์ž ์ด๋ฆ„ ํด๋ฆญ -> ํ”„๋กœํ•„ ๋ณด๊ธฐ -> ์  ์„ธ ๊ฐœ(...) ํด๋ฆญ -> ๋ฉค๋ฒ„ ID ๋ณต์‚ฌ

Slack ๊ด€๋ฆฌ์ž์—์„œ:

์›Œํฌ์ŠคํŽ˜์ด์Šค ์„ค์ • -> ๋ฉค๋ฒ„ ๊ด€๋ฆฌ -> ๋ฉค๋ฒ„ ๋ชฉ๋ก์„ CSV๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ

โš ๏ธ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ฑ„๋„์—์„œ ๋ด‡์ด ์‘๋‹ตํ•˜์ง€ ์•Š๋‚˜์š”?

๋ด‡์ด ์ฑ„๋„์— ์ดˆ๋Œ€๋˜์—ˆ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. requireMention์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

Socket Mode ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?

App ํ† ํฐ(xapp-...)์ด ์˜ฌ๋ฐ”๋ฅด๊ณ  connections:write ์Šค์ฝ”ํ”„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋‚˜์š”?

Slack ์•ฑ ์„ค์ •์—์„œ "Slash Commands"๋กœ ์ด๋™ํ•˜์—ฌ Socket Mode๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ช…๋ น์–ด๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“œ์„ธ์š”.

๊ถŒํ•œ ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?

์ƒˆ ์Šค์ฝ”ํ”„๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์•ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜์„ธ์š”. ์ผ๋ถ€ ์Šค์ฝ”ํ”„ ๋ณ€๊ฒฝ์€ ์žฌ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Slack ์—ฐ๊ฒฐ ์™„๋ฃŒ!

์ด์ œ ๋” ๋งŽ์€ ์ฑ„๋„์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋งž์ถค ์Šคํ‚ฌ๋กœ ๋ด‡์„ ํ–ฅ์ƒ์‹œํ‚ค์„ธ์š”.