mcpField
C
configure-notifications

configure-notifications

github.com/yeachan-heoエージェントワークフロー40.4k792 回インストール1 日前に更新
リポジトリ

configure-notifications について

configure-notificationsは、Telegram、Discord、SlackのOMC通知連携を設定する対話型スキルです。認証情報の入力や通知イベントの選択を案内し、設定をOMCの構成ファイルに保存します。

主な機能

  1. 01Telegram、Discord、Slackの設定
  2. 02認証情報の入力案内
  3. 03通知イベントの選択
  4. 04OMC構成ファイルへの保存
  5. 05任意のテスト通知

活用シーン

  1. 01セッション終了時の通知受信
  2. 02入力待ちの通知受信
  3. 03バックグラウンドタスク完了の通知受信
  4. 04既存の通知連携の再設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yeachan-heo/oh-my-claudecode --skill configure-notifications

インストール後、Claude Code で/configure-notificationsを入力して読み込まれたか確認します。

詳細

通知の設定

セッション終了時、入力が必要なとき、バックグラウンドタスクが完了したときに通知を受け取れるよう、OMC の通知連携を設定します。

ルーティング

ユーザーのリクエストまたは引数に基づいて、希望するプロバイダーを判定します。

  • トリガーまたは引数に「telegram」が含まれる場合は、Telegram セクションに従います
  • トリガーまたは引数に「discord」が含まれる場合は、Discord セクションに従います
  • トリガーまたは引数に「slack」が含まれる場合は、Slack セクションに従います
  • プロバイダーが指定されていない場合は、AskUserQuestion を使用します。

質問:「どの通知サービスを設定しますか?」

選択肢:

  1. Telegram - ボットトークン+チャット ID。モバイルとデスクトップで利用できます。
  2. Discord - Webhook またはボットトークン+チャンネル ID。
  3. Slack - Incoming webhook URL。

Telegram の設定

セッション終了時、入力が必要なとき、バックグラウンドタスクが完了したときに OMC からメッセージを受け取れるよう、Telegram 通知を設定します。

このスキルの仕組み

これは、対話形式の自然言語設定スキルです。AskUserQuestion で質問しながら、ユーザーの設定を進めます。設定結果は ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json に書き込みます。

ステップ 1:既存の設定を確認する
CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  HAS_TELEGRAM=$(jq -r '.notifications.telegram.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  CHAT_ID=$(jq -r '.notifications.telegram.chatId // empty' "$CONFIG_FILE" 2>/dev/null)
  PARSE_MODE=$(jq -r '.notifications.telegram.parseMode // "Markdown"' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_TELEGRAM" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "CHAT_ID=$CHAT_ID"
    echo "PARSE_MODE=$PARSE_MODE"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

既存の設定が見つかった場合は、現在の設定内容をユーザーに示し、更新または再設定するかどうかを尋ねます。

ステップ 2:Telegram ボットを作成する

ボットをまだ持っていない場合は、作成手順を案内します。

To set up Telegram notifications, you need a Telegram bot token and your chat ID.

CREATE A BOT (if you don't have one):
1. Open Telegram and search for @BotFather
2. Send /newbot
3. Choose a name (e.g., "My OMC Notifier")
4. Choose a username (e.g., "my_omc_bot")
5. BotFather will give you a token like: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz

GET YOUR CHAT ID:
1. Start a chat with your new bot (send /start)
2. Visit: https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates
3. Look for "chat":{"id":YOUR_CHAT_ID}
   - Personal chat IDs are positive numbers (e.g., 123456789)
   - Group chat IDs are negative numbers (e.g., -1001234567890)
ステップ 3:ボットトークンを取得する

AskUserQuestion を使用します。

質問:「Telegram のボットトークン(@BotFather から取得)を貼り付けてください」

ユーザーは「その他」フィールドにトークンを入力します。

検証するトークン:

  • パターン digits:alphanumeric(例:123456789:ABCdefGHI...)に一致する必要があります
  • 無効な場合は、形式を説明してもう一度尋ねます
ステップ 4:チャット ID を取得する

AskUserQuestion を使用します。

質問:「Telegram のチャット ID(getUpdates API から取得する数値)を貼り付けてください」

ユーザーは「その他」フィールドにチャット ID を入力します。

検証するチャット ID:

  • 数値である必要があります(個人チャットは正の数、グループは負の数)
  • 無効な場合は、見つけ方を案内できることを伝えます。
# Help user find their chat ID
BOT_TOKEN="USER_PROVIDED_TOKEN"
echo "Fetching recent messages to find your chat ID..."
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates" | jq '.result[-1].message.chat.id // .result[-1].message.from.id // "No messages found - send /start to your bot first"'
ステップ 5:パースモードを選択する

AskUserQuestion を使用します。

質問:「どのメッセージ形式を使用しますか?」

選択肢:

  1. Markdown(推奨) - Markdown 構文で太字、斜体、コードブロックを指定します
  2. HTML - HTML タグで太字、斜体、コードを指定します
ステップ 6:イベントを設定する

複数選択を有効にして AskUserQuestion を使用します。

質問:「どのイベントで Telegram 通知を送信しますか?」

選択肢(multiSelect: true):

  1. セッション終了(推奨) - Claude のセッションが終了したとき
  2. 入力が必要 - Claude が応答を待っているとき(長時間実行されるタスクに便利です)
  3. セッション開始 - 新しいセッションが始まったとき
  4. セッション継続中 - 永続モードによってセッションが継続しているとき

デフォルトの選択:session-end + ask-user-question。

ステップ 7:設定を書き込む

既存の設定を読み込み、新しい Telegram 設定をマージして書き戻します。

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

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

# BOT_TOKEN, CHAT_ID, PARSE_MODE are collected from user
echo "$EXISTING" | jq \
  --arg token "$BOT_TOKEN" \
  --arg chatId "$CHAT_ID" \
  --arg parseMode "$PARSE_MODE" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.telegram = {
     enabled: true,
     botToken: $token,
     chatId: $chatId,
     parseMode: $parseMode
   }' > "$CONFIG_FILE"
すべてのイベントを選択していない場合は、イベントごとの設定を追加します。

選択されていないイベントは、それぞれ無効にします。

# Example: disable session-start if not selected
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
ステップ 8:設定をテストする

設定を書き込んだ後、テスト通知を送信するかどうかを尋ねます。

AskUserQuestion を使用します。

質問:「設定を確認するため、テスト通知を送信しますか?」

選択肢:

  1. はい、今すぐテストする(推奨) - Telegram チャットにテストメッセージを送信します
  2. いいえ、後でテストする - テストをスキップします
テストする場合:
BOT_TOKEN="USER_PROVIDED_TOKEN"
CHAT_ID="USER_PROVIDED_CHAT_ID"
PARSE_MODE="Markdown"

RESPONSE=$(curl -s -w "\n%{http_code}" \
  "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
  -d "chat_id=${CHAT_ID}" \
  -d "parse_mode=${PARSE_MODE}" \
  -d "text=OMC test notification - Telegram is configured!")

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)

if [ "$HTTP_CODE" = "200" ]; then
  echo "Test notification sent successfully!"
else
  echo "Failed (HTTP $HTTP_CODE):"
  echo "$BODY" | jq -r '.description // "Unknown error"' 2>/dev/null || echo "$BODY"
fi

成功または失敗を報告します。よくある問題:

  • 401 Unauthorized:ボットトークンが無効です
  • 400 Bad Request: chat not found:チャット ID が間違っているか、ユーザーがボットに /start を送信していません
  • Network error:api.telegram.org への接続を確認してください
ステップ 9:確認する

最終的な設定の概要を表示します。

Telegram Notifications Configured!

  Bot:        @your_bot_username
  Chat ID:    123456789
  Format:     Markdown
  Events:     session-end, ask-user-question

Config saved to: ~/.claude/.omc-config.json

You can also set these via environment variables:
  OMC_TELEGRAM_BOT_TOKEN=123456789:ABCdefGHI...
  OMC_TELEGRAM_CHAT_ID=123456789

To reconfigure: /oh-my-claudecode:configure-notifications telegram
To configure Discord: /oh-my-claudecode:configure-notifications discord
To configure Slack: /oh-my-claudecode:configure-notifications slack
環境変数を使う方法

ユーザーは、シェルのプロファイルに環境変数を設定することで、このウィザードを完全に省略できます。

export OMC_TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export OMC_TELEGRAM_CHAT_ID="123456789"

環境変数は通知システムによって自動検出されるため、.omc-config.json は不要です。


Discord の設定

Discord 通知を設定すると、セッションの終了時や入力が必要なとき、バックグラウンドタスクが完了したときに、OMC から通知を受け取れます。

このスキルの仕組み

このスキルは、自然言語で対話しながら設定を行います。AskUserQuestion を使って質問し、設定結果を ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json に書き込みます。

ステップ 1:既存の設定を検出する
CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  # Check for existing discord config
  HAS_DISCORD=$(jq -r '.notifications.discord.enabled // false' "$CONFIG_FILE" 2>/dev/null)
  HAS_DISCORD_BOT=$(jq -r '.notifications["discord-bot"].enabled // false' "$CONFIG_FILE" 2>/dev/null)
  WEBHOOK_URL=$(jq -r '.notifications.discord.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
  MENTION=$(jq -r '.notifications.discord.mention // empty' "$CONFIG_FILE" 2>/dev/null)

  if [ "$HAS_DISCORD" = "true" ] || [ "$HAS_DISCORD_BOT" = "true" ]; then
    echo "EXISTING_CONFIG=true"
    echo "WEBHOOK_CONFIGURED=$HAS_DISCORD"
    echo "BOT_CONFIGURED=$HAS_DISCORD_BOT"
    [ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
    [ -n "$MENTION" ] && echo "MENTION=$MENTION"
  else
    echo "EXISTING_CONFIG=false"
  fi
else
  echo "NO_CONFIG_FILE"
fi

既存の設定が見つかった場合は、現在の設定内容をユーザーに表示し、更新または再設定するかどうかを確認します。

ステップ 2:Discord の方法を選択する

AskUserQuestion を使います。

質問:「Discord 通知の送信方法を選んでください。」

選択肢:

  1. Webhook(推奨) - Discord チャンネルに Webhook を作成します。簡単で、ボットは不要です。URL を貼り付けるだけです。
  2. Bot API - Discord ボットのトークンとチャンネル ID を使用します。より柔軟ですが、ボットアプリケーションが必要です。
ステップ 3A:Webhook の設定

ユーザーが Webhook を選んだ場合:

AskUserQuestion を使います。

質問:「Discord の Webhook URL を貼り付けてください。作成方法:Server Settings > Integrations > Webhooks > New Webhook > Copy URL」

ユーザーは「Other」フィールドに Webhook URL を入力します。

URL を検証します。

  • https://discord.com/api/webhooks/ または https://discordapp.com/api/webhooks/ で始まる必要があります。
  • 無効な場合は、形式を説明して再度入力を求めます。
ステップ 3B:Bot API の設定

ユーザーが Bot API を選んだ場合:

次の 2 つの質問をします。

  1. 「Discord ボットのトークンを貼り付けてください」 - discord.com/developers > Your App > Bot > Token から取得します。
  2. 「チャンネル ID を貼り付けてください」 - チャンネルを右クリック > Copy Channel ID(開発者モードが必要です)。
ステップ 4:メンション(ユーザーへの通知)の設定

AskUserQuestion を使います。

質問:「通知で誰かにメンション(通知)しますか?」

選択肢:

  1. はい、ユーザーにメンションする - Discord のユーザー ID で特定のユーザーにタグ付けします。
  2. はい、ロールにメンションする - ロール ID でロールにタグ付けします。
  3. メンションしない - 誰にも通知せず、メッセージだけを投稿します。
ユーザーへのメンションを希望する場合:

「メンションする Discord ユーザー ID は何ですか?(ユーザーを右クリック > Copy User ID。開発者モードが必要です)」と尋ねます。

メンション形式は <@USER_ID> です(例:<@1465264645320474637>)。

ロールへのメンションを希望する場合:

「メンションする Discord ロール ID は何ですか?(Server Settings > Roles > ロールを右クリック > Copy Role ID)」と尋ねます。

メンション形式は <@&ROLE_ID> です(例:<@&123456789>)。

ステップ 5:イベントを設定する

multiSelect を指定して AskUserQuestion を使います。

質問:「どのイベントで Discord 通知を送信しますか?」

選択肢(multiSelect: true):

  1. セッション終了(推奨) - Claude のセッションが終了したとき
  2. 入力が必要 - Claude が応答を待っているとき(長時間実行するタスクに便利です)
  3. セッション開始 - 新しいセッションが始まったとき
  4. セッション継続中 - 永続モードによってセッションが継続しているとき

デフォルトの選択:session-end + ask-user-question。

ステップ 6:ユーザー名の上書き(任意)

AskUserQuestion を使います。

質問:「ボットの表示名をカスタマイズしますか?(Discord で Webhook の送信者名として表示されます)」

選択肢:

  1. OMC(デフォルト) - 「OMC」として表示します。
  2. Claude Code - 「Claude Code」として表示します。
  3. カスタム - 任意の名前を入力します。
ステップ 7:設定を書き込む

既存の設定を読み込み、新しい Discord 設定をマージして書き戻します。

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

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

収集した値で notifications オブジェクトを作成し、jq を使って .omc-config.json にマージします。

# WEBHOOK_URL, MENTION, USERNAME are collected from user
# EVENTS is the list of enabled events

echo "$EXISTING" | jq \
  --arg url "$WEBHOOK_URL" \
  --arg mention "$MENTION" \
  --arg username "$USERNAME" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications.discord = {
     enabled: true,
     webhookUrl: $url,
     mention: (if $mention == "" then null else $mention end),
     username: (if $username == "" then null else $username end)
   }' > "$CONFIG_FILE"
Bot API の場合:
echo "$EXISTING" | jq \
  --arg token "$BOT_TOKEN" \
  --arg channel "$CHANNEL_ID" \
  --arg mention "$MENTION" \
  '.notifications = (.notifications // {enabled: true}) |
   .notifications.enabled = true |
   .notifications["discord-bot"] = {
     enabled: true,
     botToken: $token,
     channelId: $channel,
     mention: (if $mention == "" then null else $mention end)
   }' > "$CONFIG_FILE"
ユーザーがすべてのイベントを選択していない場合は、イベントごとの設定を追加する:

選択されていない各イベントを無効にします。

# Example: disable session-start if not selected
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
ステップ 8:設定をテストする

設定を書き込んだ後、テスト通知を送信するかどうかを確認します。

AskUserQuestion を使います。

質問:「設定を確認するために、テスト通知を送信しますか?」

選択肢:

  1. はい、今すぐテストする(推奨) - Discord チャンネルにテストメッセージを送信します。
  2. いいえ、後でテストする - テストをスキップします。
テストする場合:
# For webhook:
curl -s -o /dev/null -w "%{http_code}" \
  -H "Content-Type: application/json" \
  -d "{\"content\": \"${MENTION:+$MENTION\\n}OMC test notification - Discord is configured!\"}" \
  "$WEBHOOK_URL"

成功または失敗を報告します。失敗した場合は、ユーザーのデバッグを支援します(URL や権限などを確認します)。

Step 9: Confirm

最終的な設定の概要を表示します:

Discord Notifications Configured!

  Method:   Webhook / Bot API
  Mention:  <@1465264645320474637> (or "none")
  Events:   session-end, ask-user-question
  Username: OMC

Config saved to: ~/.claude/.omc-config.json

You can also set these via environment variables:
  OMC_DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
  OMC_DISCORD_MENTION=<@1465264645320474637>

To reconfigure: /oh-my-claudecode:configure-notifications discord
To configure Telegram: /oh-my-claudecode:configure-notifications telegram
To configure Slack: /oh-my-claudecode:configure-notifications slack
環境変数による代替方法

ユーザーは、シェルプロファイルで環境変数を設定することで、このウィザードを完全にスキップできます:

Webhook 方式:

export OMC_DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
export OMC_DISCORD_MENTION="<@1465264645320474637>"  # optional

Bot API 方式:

export OMC_DISCORD_NOTIFIER_BOT_TOKEN="your-bot-token"
export OMC_DISCORD_NOTIFIER_CHANNEL="your-channel-id"
export OMC_DISCORD_MENTION="<@1465264645320474637>"  # optional

環境変数は、.omc-config.json がなくても通知システムによって自動検出されます。


Slack のセットアップ

セッションが終了したとき、入力が必要なとき、またはバックグラウンドタスクが完了したときに、OMC から Slack でメッセージを受け取れるように通知を設定します。

このスキルの仕組み

これは対話型の自然言語による設定スキルです。AskUserQuestion で質問しながら、ユーザーのセットアップを案内します。結果は ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json に書き込みます。

Step 1: 既存の設定を検出する
CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$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

既存の設定が見つかった場合は、現在の設定内容をユーザーに表示し、更新するか再設定するかを尋ねます。

Step 2: Slack Incoming Webhook を作成する

Webhook を持っていないユーザーには、作成方法を案内します:

To set up Slack notifications, you need a Slack incoming webhook URL.

CREATE A WEBHOOK:
1. Go to https://api.slack.com/apps
2. Click "Create New App" > "From scratch"
3. Name your app (e.g., "OMC Notifier") and select your workspace
4. Go to "Incoming Webhooks" in the left sidebar
5. Toggle "Activate Incoming Webhooks" to ON
6. Click "Add New Webhook to Workspace"
7. Select the channel where notifications should be posted
8. Copy the webhook URL (starts with https://hooks.slack.com/services/...)
Step 3: Webhook URL を収集する

AskUserQuestion を使用します:

質問: 「Slack の incoming webhook URL を貼り付けてください(https://hooks.slack.com/services/... で始まります)」

ユーザーは "Other" 欄に Webhook URL を入力します。

URL を検証します:

  • https://hooks.slack.com/services/ で始まる必要があります
  • 無効な場合は、形式を説明してから再度尋ねます
Step 4: メンション(ユーザー/グループへの通知)を設定する

AskUserQuestion を使用します:

質問: 「通知で特定の人やグループにメンション(ピング)しますか?」

オプション:

  1. はい、ユーザーをメンションする - Slack のメンバー ID で特定のユーザーにタグ付けします
  2. はい、チャンネルをメンションする - @channel を使用して、チャンネル内の全員に通知します
  3. はい、@here をメンションする - チャンネル内でアクティブなメンバーのみに通知します
  4. メンションなし - 誰にもピングせず、メッセージのみを投稿します
ユーザーをメンションする場合:

質問: 「メンションする Slack メンバー ID は何ですか?(ユーザーのプロフィールをクリック > その他 (⋯) > メンバー ID をコピー)」

メンションの形式は <@MEMBER_ID> です(例: <@U1234567890>)。

@channel を使用する場合:

メンションの形式は <!channel> です。

@here を使用する場合:

メンションの形式は <!here> です。

Step 5: イベントを設定する

multiSelect を指定して AskUserQuestion を使用します:

質問: 「どのイベントで Slack 通知を送信しますか?」

オプション(multiSelect: true):

  1. セッション終了(推奨) - Claude のセッションが終了したとき
  2. 入力が必要 - Claude がユーザーの応答を待っているとき(長時間実行されるタスクに最適)
  3. セッション開始 - 新しいセッションが始まったとき
  4. セッション継続 - 永続モードによってセッションが維持されているとき

デフォルトの選択: session-end + ask-user-question。

Step 6: チャンネルの上書き(任意)

AskUserQuestion を使用します:

質問: 「デフォルトの通知チャンネルを上書きしますか?(Webhook にはすでにデフォルトのチャンネルがあります)」

オプション:

  1. Webhook のデフォルトを使用(推奨) - Webhook の設定時に選択したチャンネルに投稿します
  2. チャンネルを上書きする - 別のチャンネルを指定します(例: #alerts)

上書きする場合は、チャンネル名(例: #alerts)を尋ねます。

Step 7: ユーザー名の上書き(任意)

AskUserQuestion を使用します:

質問: 「ボットの表示名をカスタマイズしますか?(Slack で Webhook の送信者名として表示されます)」

オプション:

  1. OMC(デフォルト) - 「OMC」と表示します
  2. Claude Code - 「Claude Code」と表示します
  3. カスタム - 任意の名前を入力します
Step 8: 設定を書き込む

既存の設定を読み込み、新しい Slack 設定をマージしてから書き戻します:

CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$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 are collected from user
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"
ユーザーがすべてのイベントを選択しなかった場合は、イベント固有の設定を追加する:

選択されなかった各イベントについて、無効化します:

# Example: disable session-start if not selected
echo "$(cat "$CONFIG_FILE")" | jq \
  '.notifications.events = (.notifications.events // {}) |
   .notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
Step 9: 設定をテストする

設定を書き込んだ後、テスト通知の送信を提案します:

AskUserQuestion を使用します:

質問: 「セットアップを確認するため、テスト通知を送信しますか?」

オプション:

  1. はい、今すぐテストする(推奨) - Slack チャンネルにテストメッセージを送信します
  2. いいえ、後でテストします - テストをスキップします
テストする場合:
# For webhook:
MENTION_PREFIX=""
if [ -n "$MENTION" ]; then
  MENTION_PREFIX="${MENTION}\n"
fi

curl -s -o /dev/null -w "%{http_code}" \
  -H "Content-Type: application/json" \
  -d "{\"text\": \"${MENTION_PREFIX}OMC test notification - Slack is configured!\"}" \
  "$WEBHOOK_URL"

成功または失敗を報告します。よくある問題:

  • 403 Forbidden:Webhook URL が無効、または取り消されています
  • 404 Not Found:Webhook URL が正しくありません
  • channel_not_found:チャンネルの上書き設定が無効です
  • Network error:hooks.slack.com への接続を確認してください
ステップ 10:確認

最終的な設定の概要を表示します:

Slack Notifications Configured!

  Webhook:  https://hooks.slack.com/services/T00/B00/xxx...
  Mention:  <@U1234567890> (or "none")
  Channel:  #alerts (or "webhook default")
  Events:   session-end, ask-user-question
  Username: OMC

Config saved to: ~/.claude/.omc-config.json

You can also set these via environment variables:
  OMC_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
  OMC_SLACK_MENTION=<@U1234567890>

To reconfigure: /oh-my-claudecode:configure-notifications slack
To configure Discord: /oh-my-claudecode:configure-notifications discord
To configure Telegram: /oh-my-claudecode:configure-notifications telegram
環境変数を使用する方法

ユーザーは、シェルプロファイルに環境変数を設定することで、このウィザードを完全に省略できます:

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

環境変数は通知システムによって自動検出されるため、.omc-config.json は必要ありません。

Slack のメンション形式
種類形式例
ユーザー<@MEMBER_ID><@U1234567890>
チャンネル<!channel><!channel>
ここ<!here><!here>
全員<!everyone><!everyone>
ユーザーグループ<!subteam^GROUP_ID><!subteam^S1234567890>

プラットフォームの有効化フラグ

すべての通知プラットフォームは、セッションごとに CLI フラグで有効化する必要があります:

  • omc --telegram — Telegram 通知を有効化します(OMC_TELEGRAM=1 を設定)
  • omc --discord — Discord 通知を有効化します(OMC_DISCORD=1 を設定)
  • omc --slack — Slack 通知を有効化します(OMC_SLACK=1 を設定)
  • omc --webhook — Webhook 通知を有効化します(OMC_WEBHOOK=1 を設定)
  • omc --openclaw — OpenClaw ゲートウェイとの連携を有効化します(OMC_OPENCLAW=1 を設定)

これらのフラグを指定しない場合、設定済みのプラットフォームは無効のままです。これにより、設定を保持したまま、開発中に意図しない通知が送信されるのを防げます。

例:

  • omc --telegram --discord — Telegram と Discord を有効化
  • omc --telegram --slack --webhook — Telegram、Slack、Webhook を有効化
  • omc --telegram --openclaw — Telegram と OpenClaw を有効化
  • omc — 通知は送信されません(すべてのプラットフォームで明示的な有効化が必要です)

フックイベントのテンプレート

omc_config.hook.json を使用して、イベントやプラットフォームごとに通知メッセージをカスタマイズできます。

振り分け

トリガーまたは引数に「hook」、「template」、「customize messages」のいずれかが含まれている場合は、このセクションに従います。

ステップ 1:既存のフック設定を検出する

${CLAUDE_CONFIG_DIR:-~/.claude}/omc_config.hook.json が存在するか確認します。存在する場合は、現在の設定を表示します。存在しない場合は、このファイルの役割を説明します。

Hook event templates let you customize the notification messages sent to each platform.
You can set different messages for Discord vs Telegram vs Slack, and control which
events fire on which platform.

Config file: ~/.claude/omc_config.hook.json
ステップ 2:設定するイベントを選択する

AskUserQuestion を使用します:

質問:「どのイベントのテンプレートを設定しますか?」

選択肢:

  1. session-end - Claude セッションが終了したとき(最も一般的)
  2. ask-user-question - Claude が入力を待っているとき
  3. session-idle - Claude が処理を終え、入力を待っているとき
  4. session-start - 新しいセッションが始まったとき
ステップ 3:利用可能な変数を表示する

選択したイベントで使用できるテンプレート変数を表示します:

Available template variables:

RAW FIELDS:
  {{sessionId}}      - Session identifier
  {{timestamp}}      - ISO timestamp
  {{tmuxSession}}    - tmux session name
  {{projectPath}}    - Full project directory path
  {{projectName}}    - Project directory basename
  {{reason}}         - Stop/end reason
  {{activeMode}}     - Active OMC mode name
  {{question}}       - Question text (ask-user-question only)
  {{agentName}}      - Agent name (agent-call only)
  {{agentType}}      - Agent type (agent-call only)

COMPUTED (smart formatting):
  {{duration}}       - Human-readable duration (e.g., "5m 23s")
  {{time}}           - Locale time string
  {{modesDisplay}}   - Comma-separated modes or empty
  {{iterationDisplay}} - "3/10" format or empty
  {{agentDisplay}}   - "2/5 completed" or empty
  {{projectDisplay}} - Project name with fallbacks
  {{footer}}         - tmux + project info line
  {{tmuxTailBlock}}  - Recent output in code fence or empty
  {{reasonDisplay}}  - Reason with "unknown" fallback

CONDITIONALS:
  {{#if variableName}}content shown when truthy{{/if}}
ステップ 4:テンプレートを入力する

AskUserQuestion を使用します:

質問:「このイベントのメッセージテンプレートを入力してください(動的なコンテンツには {{variables}} を使用します)」

選択肢:

  1. デフォルトテンプレートを使用 - 組み込みのメッセージ形式をそのまま使用します
  2. シンプルな概要 - 1 行の短い形式です
  3. カスタム - 独自のテンプレートを入力します

「シンプルな概要」を選択した場合は、あらかじめ用意された簡潔なテンプレートを使用します:

  • session-end: {{projectDisplay}} session ended ({{duration}}) — {{reasonDisplay}}
  • ask-user-question: Input needed on {{projectDisplay}}: {{question}}
  • session-idle: {{projectDisplay}} is idle. {{#if reason}}Reason: {{reason}}{{/if}}
  • session-start: Session started: {{projectDisplay}} at {{time}}
ステップ 5:プラットフォームごとの上書き

AskUserQuestion を使用します:

質問:「特定のプラットフォーム向けに、異なるメッセージを設定しますか?」

選択肢:

  1. いいえ、すべて同じ(推奨) - すべてのプラットフォームで同じテンプレートを使用します
  2. はい、プラットフォームごとにカスタマイズ - Discord、Telegram、Slack ごとに異なるテンプレートを設定します

プラットフォームごとに設定する場合は、有効になっている各プラットフォームのテンプレートを個別に尋ねます。

ステップ 6:設定を書き込む

${CLAUDE_CONFIG_DIR:-~/.claude}/omc_config.hook.json を読み込むか作成し、新しい設定を統合します:

{
  "version": 1,
  "enabled": true,
  "events": {
    "<event-name>": {
      "enabled": true,
      "template": "<user-provided-template>",
      "platforms": {
        "discord": { "template": "<discord-specific>" },
        "telegram": { "template": "<telegram-specific>" }
      }
    }
  }
}
ステップ 7: 検証とテスト

validateTemplate() を使用してテンプレートを検証し、不明な変数がないか確認します。不明な変数が見つかった場合はユーザーに警告し、修正を提案します。

新しいテンプレートでテスト通知を送信するかどうかを確認します。

設定例
{
  "version": 1,
  "enabled": true,
  "events": {
    "session-end": {
      "enabled": true,
      "template": "Session {{sessionId}} ended after {{duration}}. Reason: {{reasonDisplay}}",
      "platforms": {
        "discord": {
          "template": "**Session Complete** | `{{projectDisplay}}` | {{duration}} | {{reasonDisplay}}"
        },
        "telegram": {
          "template": "Done: {{projectDisplay}} ({{duration}})\n{{#if contextSummary}}Summary: {{contextSummary}}{{/if}}"
        }
      }
    },
    "ask-user-question": {
      "enabled": true,
      "template": "{{#if question}}{{question}}{{/if}}\nWaiting for input on {{projectDisplay}}"
    }
  }
}

関連項目

  • /oh-my-claudecode:configure-openclaw — OpenClaw ゲートウェイ統合を設定します

カスタム統合(OpenClaw、n8n、CLI など)

ネイティブの Discord/Telegram/Slack 統合以外のサービス向けに、カスタム Webhook と CLI コマンドを設定します。

ルーティング

ユーザーが「カスタム統合」、「openclaw」、「n8n」、「webhook」、「cli command」などと言った場合は、このセクションに従います。

OpenClaw からの移行

~/.claude/omc_config.openclaw.json が存在する場合は、移行を検出して提案します。

ステップ 1: 旧設定を検出

LEGACY_CONFIG="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/omc_config.openclaw.json"
if [ -f "$LEGACY_CONFIG" ]; then
  echo "LEGACY_FOUND=true"
  # Check if already migrated
  if jq -e '.customIntegrations.integrations[] | select(.preset == "openclaw")' "$CONFIG_FILE" >/dev/null 2>&1; then
    echo "ALREADY_MIGRATED=true"
  else
    echo "ALREADY_MIGRATED=false"
  fi
else
  echo "LEGACY_FOUND=false"
fi

ステップ 2: 移行を提案 旧設定が見つかり、まだ移行されていない場合:

質問:「既存の OpenClaw 設定が検出されました。新しい形式に移行しますか?」

選択肢:

  1. はい、今すぐ移行する - 旧設定をカスタム統合に変換します
  2. いいえ、新規に設定する - 移行をスキップして新しい設定を開始します
  3. まず旧設定を表示する - 現在の OpenClaw 設定を表示します

移行する場合:

  • omc_config.openclaw.json を読み込みます
  • カスタム統合形式に変換します
  • .omc-config.json に保存します
  • 旧設定を omc_config.openclaw.json.bak にバックアップします
  • 成功メッセージを表示します
カスタム統合ウィザード

ステップ 1: 統合タイプを選択

質問:「どの種類のカスタム統合を設定しますか?」

選択肢:

  1. OpenClaw Gateway - 外部の自動化と AI エージェントを起動します
  2. n8n Webhook - n8n ワークフローをトリガーします
  3. カスタムエージェントゲートウェイ - カスタムエージェント Webhook に通知を送信します
  4. 汎用 Webhook - カスタム HTTPS Webhook
  5. 汎用 CLI コマンド - イベント発生時にシェルコマンドを実行します
OpenClaw/n8n/カスタムエージェントゲートウェイのプリセットフロー

ステップ 2: ゲートウェイ URL

質問:「ゲートウェイ/Webhook の URL は何ですか?」

検証:

  • HTTPS が必要です(開発用の localhost を除く)
  • 有効な URL 形式である必要があります

ステップ 3: 認証(任意)

質問:「ゲートウェイには認証が必要ですか?」

選択肢:

  1. Bearer トークン - Authorization: Bearer
  2. カスタムヘッダー - 名前と値
  3. 認証なし

Bearer の場合:トークンを尋ねます
カスタムの場合:ヘッダー名と値を尋ねます

ステップ 4: イベント

AskUserQuestion を multiSelect とともに使用します。

質問:「どのイベントでこの統合をトリガーしますか?」

選択肢(プリセットのデフォルト値付き):

  • session-start
  • session-end
  • session-stop
  • session-idle
  • ask-user-question

OpenClaw のデフォルト:session-start、session-end、stop
n8n のデフォルト:session-end、ask-user-question

ステップ 5: テスト

質問:「設定を確認するためにテスト通知を送信しますか?」

選択肢:

  1. はい、今すぐテストする - テスト Webhook を送信します
  2. いいえ、テストをスキップする

テストする場合:

# For webhook integrations
curl -X POST \
  -H "Content-Type: application/json" \
  ${AUTH_HEADER:+"-H \"$AUTH_HEADER\""} \
  -d '{"event":"test","instruction":"OMC test notification","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' \
  "$WEBHOOK_URL"

結果(HTTP ステータス、エラーがあればその内容)を表示します。

ステップ 6: 設定を書き込む

.omc-config.json にマージします。

{
  "notifications": { /* existing native configs */ },
  "customIntegrations": {
    "enabled": true,
    "integrations": [
      {
        "id": "my-openclaw",
        "type": "webhook",
        "preset": "openclaw",
        "enabled": true,
        "config": {
          "url": "https://my-gateway.example.com/wake",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer ..."
          },
          "bodyTemplate": "{\\"event\\":\\"{{event}}\\",\\"instruction\\":\\"Session {{sessionId}} {{event}}\\",\\"timestamp\\":\\"{{timestamp}}\\"}",
          "timeout": 10000
        },
        "events": ["session-start", "session-end"]
      }
    ]
  }
}
汎用 Webhook フロー

ステップ 2: URL Webhook URL を尋ねます(HTTPS が必要です)。

ステップ 3: メソッド HTTP メソッド(GET、POST、PUT、PATCH、DELETE)を尋ねます。デフォルト:POST。

ステップ 4: ヘッダー 「名前: 値」形式で、1 行につき 1 つのヘッダーを尋ねます。デフォルト:Content-Type: application/json

ステップ 5: ボディテンプレート 使用可能なテンプレート変数を表示し、ボディテンプレート(JSON またはその他の形式)を尋ねます。

デフォルト:

{
  "event": "{{event}}",
  "sessionId": "{{sessionId}}",
  "projectName": "{{projectName}}",
  "timestamp": "{{timestamp}}"
}

ステップ 6: タイムアウト タイムアウトをミリ秒単位(1000~60000)で尋ねます。デフォルト:10000。

ステップ 7: イベント イベントを複数選択します。

ステップ 8: テストと保存 プリセットフローと同じです。

汎用CLIコマンドのフロー

ステップ2: コマンド

質問: "実行するコマンドを入力してください(単一の実行ファイル、引数なし)"

例: curl, /usr/local/bin/my-script, notify-send

検証:

  • スペースを含まないこと
  • シェルのメタ文字を含まないこと

ステップ3: 引数

質問: "コマンドの引数(動的な値には {{variable}} を使用)。1行に1つずつ入力してください。"

例:

-X
POST
-d
{"event":"{{event}}","session":"{{sessionId}}"}
https://my-api.com/notify

利用可能なテンプレート変数の一覧を表示します。

ステップ4: タイムアウト タイムアウト(1000〜60000ms)を入力します。デフォルト: 5000。

ステップ5: イベント イベントを複数選択します。

ステップ6: テストと保存

テストでは、テスト用の値を使ってコマンドを実行します:

$COMMAND "${ARGS[@]//{{event}}/test}"

標準出力・標準エラー出力と終了コードを表示します。

カスタム連携の管理

一覧表示:

jq '.customIntegrations.integrations[] | {id, type, preset, enabled, events}' "$CONFIG_FILE"

無効化/有効化:

# Disable
jq '.customIntegrations.integrations = [.customIntegrations.integrations[] | if .id == "my-integration" then .enabled = false else . end]' "$CONFIG_FILE"

# Enable
jq '.customIntegrations.integrations = [.customIntegrations.integrations[] | if .id == "my-integration" then .enabled = true else . end]' "$CONFIG_FILE"

削除:

jq '.customIntegrations.integrations = [.customIntegrations.integrations[] | select(.id != "my-integration")]' "$CONFIG_FILE"
テンプレート変数リファレンス

すべてのカスタム連携では、以下のテンプレート変数を使用できます:

変数説明例
{{sessionId}}一意のセッションIDsess_abc123
{{projectPath}}プロジェクトのフルパス/home/user/my-project
{{projectName}}プロジェクトのディレクトリ名my-project
{{timestamp}}ISO 8601形式のタイムスタンプ2026-03-05T14:30:00Z
{{event}}イベント名session-end
{{duration}}人が読める形式の所要時間45s
{{durationMs}}ミリ秒単位の所要時間45000
{{reason}}停止/終了の理由completed
{{tmuxSession}}tmuxセッション名claude:my-project

session-endのみ:

  • {{agentsSpawned}}, {{agentsCompleted}}, {{modesUsed}}, {{contextSummary}}

ask-user-questionのみ:

  • {{question}}

関連項目

  • テンプレート変数: src/notifications/template-variables.ts
  • 検証: src/notifications/validation.ts
  • プリセット: src/notifications/presets.ts

コメント