配置Slack通知Skill configure-slack

这个技能是一个交互式自然语言配置工具,用于设置Slack incoming webhook通知,让OMC在Claude会话事件(如会话结束、需要输入时)自动发送消息到Slack频道。支持配置webhook URL、提及选项、事件触发和自定义设置,提升DevOps自动化和通知效率。关键词:Slack配置、webhook设置、通知自动化、DevOps工具、自然语言交互。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

name: configure-slack description: 通过自然语言配置Slack incoming webhook通知 triggers:

  • “configure slack”
  • “setup slack”
  • “slack notifications”
  • “slack webhook”

配置Slack通知

设置Slack通知,以便OMC在会话结束、需要输入或完成后台任务时向您发送消息。

这个技能如何工作

这是一个交互式、自然语言配置技能。通过使用AskUserQuestion提问来引导用户完成设置,并将结果写入~/.claude/.omc-config.json

步骤 1: 检测现有配置

CONFIG_FILE="$HOME/.claude/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  HAS_SLACK=$(jq -r '.notifications.slack.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  WEBHOOK_URL=$(jq -r '.notifications.slack.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
  MENTION=$(jq -r '.notifications.slack.mention // empty' "$CONFIG_FILE" 2>/dev/null)
  CHANNEL=$(jq -r '.notifications.slack.channel // empty' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_SLACK" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    [ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
    [ -n "$MENTION" ] && echo "MENTION=$MENTION"
    [ -n "$CHANNEL" ] && echo "CHANNEL=$CHANNEL"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

如果找到现有配置,向用户显示当前配置并询问是否要更新或重新配置。

步骤 2: 创建Slack Incoming Webhook

如果用户没有webhook,引导他们创建:

要设置Slack通知,您需要一个Slack incoming webhook URL。

创建webhook:
1. 访问 https://api.slack.com/apps
2. 点击“Create New App” > “From scratch”
3. 命名您的应用(例如,“OMC Notifier”)并选择您的工作区
4. 在左侧边栏中转到“Incoming Webhooks”
5. 将“Activate Incoming Webhooks”切换为ON
6. 点击“Add New Webhook to Workspace”
7. 选择通知应发布的频道
8. 复制webhook URL(以 https://hooks.slack.com/services/... 开头)

步骤 3: 收集Webhook URL

使用AskUserQuestion:

问题: “粘贴您的Slack incoming webhook URL(以 https://hooks.slack.com/services/… 开头)”

用户将在“Other”字段中输入他们的webhook URL。

验证 URL:

  • 必须以 https://hooks.slack.com/services/ 开头
  • 如果无效,解释格式并再次询问

步骤 4: 配置提及(用户/群组提醒)

使用AskUserQuestion:

问题: “您希望通知提及(提醒)某人吗?”

选项:

  1. 是,提及用户 - 通过Slack成员ID标记特定用户
  2. 是,提及频道 - 使用@channel通知频道中的所有人
  3. 是,提及@here - 仅通知频道中的活跃成员
  4. 无提及 - 只发布消息而不提醒任何人

如果用户想提及用户:

问: “要提及的Slack成员ID是什么?(点击用户个人资料 > 更多(⋯) > 复制成员ID)”

提及格式为: <@MEMBER_ID> (例如,<@U1234567890>

如果用户想要@channel:

提及格式为: <!channel>

如果用户想要@here:

提及格式为: <!here>

步骤 5: 配置事件

使用AskUserQuestion和multiSelect:

问题: “哪些事件应触发Slack通知?”

选项(multiSelect: true):

  1. 会话结束(推荐) - 当Claude会话结束时
  2. 需要输入 - 当Claude等待您的响应时(适合长时间运行的任务)
  3. 会话开始 - 当新会话开始时
  4. 会话持续 - 当持久模式保持会话活跃时

默认选择:session-end + ask-user-question。

步骤 6: 可选频道覆盖

使用AskUserQuestion:

问题: “覆盖默认通知频道?(webhook已设置默认频道)”

选项:

  1. 使用webhook默认(推荐) - 发布到webhook设置中选择的频道
  2. 覆盖频道 - 指定不同频道(例如,#alerts)

如果覆盖,询问频道名称(例如,#alerts)。

步骤 7: 可选用户名覆盖

使用AskUserQuestion:

问题: “自定义机器人显示名称?(在Slack中显示为webhook发送者名称)”

选项:

  1. OMC(默认) - 显示为“OMC”
  2. Claude Code - 显示为“Claude Code”
  3. 自定义 - 输入自定义名称

步骤 8: 写入配置

读取现有配置,合并新的Slack设置,并写回:

CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# WEBHOOK_URL, MENTION, USERNAME, CHANNEL 从用户处收集
echo "$EXISTING" | jq \
  --arg url "$WEBHOOK_URL" \
  --arg mention "$MENTION" \
  --arg username "$USERNAME" \
  --arg channel "$CHANNEL" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.slack = {
     enabled: true,
     webhookUrl: $url,
     mention: (if $mention == "" then null else $mention end),
     username: (if $username == "" then null else $username end),
     channel: (if $channel == "" then null else $channel end)
   }' > "$CONFIG_FILE"

如果用户未选择所有事件,添加事件特定配置:

对于每个未选择的事件,禁用它:

# 示例:如果未选择session-start,则禁用它
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"

步骤 9: 测试配置

写入配置后,提供发送测试通知:

使用AskUserQuestion:

问题: “发送测试通知以验证设置?”

选项:

  1. 是,立即测试(推荐) - 发送测试消息到您的Slack频道
  2. 否,稍后测试 - 跳过测试

如果测试:

# 对于webhook:
MENTION_PREFIX=""
if [ -n "$MENTION" ]; then
  MENTION_PREFIX="${MENTION}
"
fi

curl -s -o /dev/null -w "%{http_code}" \
  -H "Content-Type: application/json" \
  -d "{\"text\": \"${MENTION_PREFIX}OMC测试通知 - Slack已配置!\"}" \
  "$WEBHOOK_URL"

报告成功或失败。常见问题:

  • 403 Forbidden:Webhook URL无效或已撤销
  • 404 Not Found:Webhook URL不正确
  • channel_not_found:频道覆盖无效
  • 网络错误:检查到hooks.slack.com的连接

步骤 10: 确认

显示最终配置摘要:

Slack通知已配置!

  Webhook:  https://hooks.slack.com/services/T00/B00/xxx...
  Mention:  <@U1234567890>(或“无”)
  Channel:  #alerts(或“webhook默认”)
  Events:   session-end, ask-user-question
  Username: OMC

配置已保存到: ~/.claude/.omc-config.json

您也可以通过环境变量设置:
  OMC_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
  OMC_SLACK_MENTION=<@U1234567890>

重新配置: /oh-my-claudecode:configure-slack
配置Discord: /oh-my-claudecode:configure-discord
配置Telegram: /oh-my-claudecode:configure-telegram

环境变量替代方案

用户可以通过在shell配置文件中设置环境变量完全跳过此向导:

export OMC_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/T00/B00/xxx"
export OMC_SLACK_MENTION="<@U1234567890>"  # 可选

环境变量会被通知系统自动检测,无需.omc-config.json

Slack提及格式

类型 格式 示例
用户 <@MEMBER_ID> <@U1234567890>
频道 <!channel> <!channel>
Here <!here> <!here>
Everyone <!everyone> <!everyone>
用户群组 <!subteam^GROUP_ID> <!subteam^S1234567890>