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:
问题: “您希望通知提及(提醒)某人吗?”
选项:
- 是,提及用户 - 通过Slack成员ID标记特定用户
- 是,提及频道 - 使用@channel通知频道中的所有人
- 是,提及@here - 仅通知频道中的活跃成员
- 无提及 - 只发布消息而不提醒任何人
如果用户想提及用户:
问: “要提及的Slack成员ID是什么?(点击用户个人资料 > 更多(⋯) > 复制成员ID)”
提及格式为: <@MEMBER_ID> (例如,<@U1234567890>)
如果用户想要@channel:
提及格式为: <!channel>
如果用户想要@here:
提及格式为: <!here>
步骤 5: 配置事件
使用AskUserQuestion和multiSelect:
问题: “哪些事件应触发Slack通知?”
选项(multiSelect: true):
- 会话结束(推荐) - 当Claude会话结束时
- 需要输入 - 当Claude等待您的响应时(适合长时间运行的任务)
- 会话开始 - 当新会话开始时
- 会话持续 - 当持久模式保持会话活跃时
默认选择:session-end + ask-user-question。
步骤 6: 可选频道覆盖
使用AskUserQuestion:
问题: “覆盖默认通知频道?(webhook已设置默认频道)”
选项:
- 使用webhook默认(推荐) - 发布到webhook设置中选择的频道
- 覆盖频道 - 指定不同频道(例如,#alerts)
如果覆盖,询问频道名称(例如,#alerts)。
步骤 7: 可选用户名覆盖
使用AskUserQuestion:
问题: “自定义机器人显示名称?(在Slack中显示为webhook发送者名称)”
选项:
- OMC(默认) - 显示为“OMC”
- Claude Code - 显示为“Claude Code”
- 自定义 - 输入自定义名称
步骤 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:
问题: “发送测试通知以验证设置?”
选项:
- 是,立即测试(推荐) - 发送测试消息到您的Slack频道
- 否,稍后测试 - 跳过测试
如果测试:
# 对于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> |