通知連携設定 は何をしますか?
OMCの通知連携を設定し、セッション終了、入力待ち、バックグラウンドタスク完了時にアラートを受け取れるようにします。
ルーティング
ユーザーのリクエストや引数に基づいて、どのプロバイダーを希望しているかを検出します。
- トリガーまたは引数に「telegram」が含まれている場合 → Telegram セクションに従う
- トリガーまたは引数に「discord」が含まれている場合 → Discord セクションに従う
- トリガーまたは引数に「slack」が含まれている場合 → Slack セクションに従う
- プロバイダーが指定されていない場合は、AskUserQuestion を使用します。
質問: 「どの通知サービスを設定しますか?」
オプション:
- Telegram - ボットトークン + チャットID。モバイルとデスクトップで動作。
- Discord - Webhook または ボットトークン + チャンネルID。
- Slack - Incoming Webhook URL。
Telegram 設定
Telegram通知を設定して、セッション終了、入力待ち、バックグラウンドタスク完了時に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
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 Botの作成
ユーザーがまだボットを持っていない場合は、作成手順を案内します。
Telegram通知を設定するには、TelegramボットトークンとチャットIDが必要です。
ボットの作成(まだ持っていない場合):
1. Telegramを開き、@BotFather を検索
2. /newbot を送信
3. 名前を選択(例:「My OMC Notifier」)
4. ユーザー名を選択(例:「my_omc_bot」)
5. BotFather から次のようなトークンが提供されます: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
チャットIDの取得:
1. 新しいボットとのチャットを開始(/start を送信)
2. 次のURLにアクセス: https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates
3. 「chat」:{"id":YOUR_CHAT_ID} を探す
- 個人チャットIDは正の数値(例: 123456789)
- グループチャットIDは負の数値(例: -1001234567890)
ステップ 3: ボットトークンの収集
AskUserQuestion を使用:
質問: 「Telegramボットトークン(@BotFather から)を貼り付けてください」
ユーザーは「その他」フィールドにトークンを入力します。
検証:
- 次のパターンに一致する必要があります:
数字:英数字(例:123456789:ABCdefGHI...) - 無効な場合は、形式を説明してもう一度尋ねます
ステップ 4: チャットIDの収集
AskUserQuestion を使用:
質問: 「TelegramチャットID(getUpdates APIからの数値)を貼り付けてください」
ユーザーは「その他」フィールドにチャットIDを入力します。
検証:
- 数値である必要があります(個人の場合は正、グループの場合は負)
- 無効な場合は、見つけ方をサポートします:
# ユーザーがチャットIDを見つけるのを助ける
BOT_TOKEN="USER_PROVIDED_TOKEN"
echo "最近のメッセージを取得してチャットIDを見つけています..."
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates" | jq '.result[-1].message.chat.id // .result[-1].message.from.id // "メッセージが見つかりません - 最初にボットに /start を送信してください"'
ステップ 5: パースモードの選択
AskUserQuestion を使用:
質問: 「どのメッセージ形式を希望しますか?」
オプション:
- Markdown(推奨) - Markdown構文で太字、斜体、コードブロック
- HTML - HTMLタグで太字、斜体、コード
ステップ 6: イベントの設定
multiSelect で AskUserQuestion を使用:
質問: 「どのイベントでTelegram通知をトリガーしますか?」
オプション (multiSelect: true):
- セッション終了(推奨) - Claudeセッションが終了したとき
- 入力待ち - Claudeが応答を待っているとき(長時間タスクに最適)
- セッション開始 - 新しいセッションが開始されたとき
- セッション継続中 - 永続モードがセッションを維持しているとき
デフォルト選択: 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 はユーザーから収集
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"
ユーザーがすべてのイベントを選択しなかった場合のイベント固有設定:
選択されなかった各イベントに対して、無効化します:
# 例: session-start が選択されていない場合に無効化
echo "$(cat "$CONFIG_FILE")" | jq \
'.notifications.events = (.notifications.events // {}) |
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
ステップ 8: 設定のテスト
設定を書き込んだ後、テスト通知を送信するかどうかを確認します:
AskUserQuestion を使用:
質問: 「設定を確認するためにテスト通知を送信しますか?」
オプション:
- はい、今テストする(推奨) - Telegramチャットにテストメッセージを送信
- いいえ、後でテストします - テストをスキップ
テストする場合:
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 "テスト通知が正常に送信されました!"
else
echo "失敗しました(HTTP $HTTP_CODE):"
echo "$BODY" | jq -r '.description // "不明なエラー"' 2>/dev/null || echo "$BODY"
fi
成功または失敗を報告します。一般的な問題:
- 401 Unauthorized: ボットトークンが無効
- 400 Bad Request: chat not found: チャットIDが間違っているか、ユーザーがボットに
/startを送信していない - ネットワークエラー: api.telegram.org への接続性を確認
ステップ 9: 確認
最終的な設定概要を表示:
Telegram通知が設定されました!
ボット: @your_bot_username
チャットID: 123456789
形式: Markdown
イベント: session-end, ask-user-question
設定保存先: ~/.claude/.omc-config.json
環境変数でも設定可能:
OMC_TELEGRAM_BOT_TOKEN=123456789:ABCdefGHI...
OMC_TELEGRAM_CHAT_ID=123456789
再設定: /oh-my-claudecode:configure-notifications telegram
Discord設定: /oh-my-claudecode:configure-notifications discord
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
# 既存のdiscord設定を確認
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通知をどのように送信しますか?」
オプション:
- Webhook(推奨) - DiscordチャンネルにWebhookを作成。ボットは不要。URLを貼り付けるだけ。
- Bot API - Discordボットトークン + チャンネルIDを使用。より柔軟で、ボットアプリケーションが必要。
ステップ 3A: Webhook設定
ユーザーがWebhookを選択した場合:
AskUserQuestion を使用:
質問: 「Discord Webhook URLを貼り付けてください。作成方法: サーバー設定 > 連携サービス > Webhook > 新しいWebhook > URLをコピー」
ユーザーは「その他」フィールドにWebhook URLを入力します。
検証:
- URLは
https://discord.com/api/webhooks/またはhttps://discordapp.com/api/webhooks/で始まる必要があります - 無効な場合は、形式を説明してもう一度尋ねます
ステップ 3B: Bot API設定
ユーザーがBot APIを選択した場合:
2つの質問をします:
- 「Discordボットトークンを貼り付けてください」 - discord.com/developers > あなたのアプリ > Bot > トークンから
- 「チャンネルIDを貼り付けてください」 - チャンネルを右クリック > チャンネルIDをコピー(開発者モードが必要)
ステップ 4: メンション(ユーザーへのping)の設定
AskUserQuestion を使用:
質問: 「通知で誰かをメンション(ping)しますか?」
オプション:
- はい、ユーザーをメンション - DiscordユーザーIDで特定のユーザーをタグ付け
- はい、ロールをメンション - ロールIDでロールをタグ付け
- メンションなし - 誰もpingせずにメッセージを投稿
ユーザーをメンションする場合:
質問: 「メンションするDiscordユーザーIDは? (ユーザーを右クリック > ユーザーIDをコピー、開発者モードが必要)」
メンション形式: <@USER_ID>(例: <@1465264645320474637>)
ロールをメンションする場合:
質問: 「メンションするDiscordロールIDは? (サーバー設定 > ロール > ロールを右クリック > ロールIDをコピー)」
メンション形式: <@&ROLE_ID>(例: <@&123456789>)
ステップ 5: イベントの設定
multiSelect で AskUserQuestion を使用:
質問: 「どのイベントでDiscord通知をトリガーしますか?」
オプション (multiSelect: true):
- セッション終了(推奨) - Claudeセッションが終了したとき
- 入力待ち - Claudeが応答を待っているとき(長時間タスクに最適)
- セッション開始 - 新しいセッションが開始されたとき
- セッション継続中 - 永続モードがセッションを維持しているとき
デフォルト選択: session-end + ask-user-question。
ステップ 6: オプションのユーザー名オーバーライド
AskUserQuestion を使用:
質問: 「カスタムボット表示名? (DiscordのWebhook送信者名として表示されます)」
オプション:
- OMC(デフォルト) - 「OMC」と表示
- Claude Code - 「Claude Code」と表示
- カスタム - カスタム名を入力
ステップ 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方式の場合:
収集した値で通知オブジェクトを構築し、jqを使用して .omc-config.json にマージします:
# WEBHOOK_URL, MENTION, USERNAME はユーザーから収集
# 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"
ユーザーがすべてのイベントを選択しなかった場合のイベント固有設定:
選択されなかった各イベントに対して、無効化します:
# 例: session-start が選択されていない場合に無効化
echo "$(cat "$CONFIG_FILE")" | jq \
'.notifications.events = (.notifications.events // {}) |
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
ステップ 8: 設定のテスト
設定を書き込んだ後、テスト通知を送信するかどうかを確認します:
AskUserQuestion を使用:
質問: 「設定を確認するためにテスト通知を送信しますか?」
オプション:
- はい、今テストする(推奨) - Discordチャンネルにテストメッセージを送信
- いいえ、後でテストします - テストをスキップ
テストする場合:
# 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"
成功または失敗を報告します。一般的な問題:
- 401 Unauthorized: ボットトークンが無効
- 400 Bad Request: Webhook URLが無効か、メッセージが大きすぎる
- ネットワークエラー: discord.com への接続性を確認
ステップ 9: 確認
最終的な設定概要を表示します。
Discord通知が設定されました!
方式: Webhook
URL: https://discord.com/api/webhooks/...
メンション: @username
ユーザー名: OMC
イベント: session-end, ask-user-question
設定保存先: ~/.claude/.omc-config.json
環境変数でも設定可能:
OMC_DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
OMC_DISCORD_MENTION=@username
再設定: /oh-my-claudecode:configure-notifications discord
Telegram設定: /oh-my-claudecode:configure-notifications telegram
Slack設定: /oh-my-claudecode:configure-notifications slack
環境変数による代替設定
ユーザーはこのウィザードを完全にスキップして、シェルプロファイルに環境変数を設定することもできます:
# Webhook方式:
export OMC_DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
export OMC_DISCORD_MENTION="@username"
# Bot API方式:
export OMC_DISCORD_BOT_TOKEN="your_bot_token"
export OMC_DISCORD_CHANNEL_ID="123456789"
export OMC_DISCORD_MENTION="@username"
環境変数は、.omc-config.json がなくても通知システムによって自動検出されます。
Slack 設定
Slack通知を設定して、セッション終了、入力待ち、バックグラウンドタスク完了時に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
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)
CHANNEL=$(jq -r '.notifications.slack.channel // empty' "$CONFIG_FILE" 2>/dev/null)
USERNAME=$(jq -r '.notifications.slack.username // empty' "$CONFIG_FILE" 2>/dev/null)
if [ "$HAS_SLACK" = "true" ]; then
echo "EXISTING_CONFIG=true"
echo "WEBHOOK_URL=$WEBHOOK_URL"
echo "CHANNEL=$CHANNEL"
echo "USERNAME=$USERNAME"
else
echo "EXISTING_CONFIG=false"
fi
else
echo "NO_CONFIG_FILE"
fi
既存の設定が見つかった場合は、現在の設定内容をユーザーに表示し、更新または再設定するかどうかを確認します。
ステップ 2: Webhook URLの収集
AskUserQuestion を使用:
質問: 「Slack Incoming Webhook URLを貼り付けてください。作成方法: Slack API > Incoming Webhooks > 新しいWebhookを追加 > URLをコピー」
ユーザーは「その他」フィールドにWebhook URLを入力します。
検証:
- URLは
https://hooks.slack.com/services/で始まる必要があります - 無効な場合は、形式を説明してもう一度尋ねます
ステップ 3: チャンネルのカスタマイズ(オプション)
AskUserQuestion を使用:
質問: 「通知を特定のチャンネルに送信しますか?(デフォルトではWebhook設定のチャンネルが使用されます)」
オプション:
- Webhookのデフォルトを使用 - 設定時に選択したチャンネルに送信
- 別のチャンネルを指定 - チャンネル名(例:
#general)またはIDを入力
ユーザーが別のチャンネルを指定した場合:
質問: 「チャンネル名またはIDを入力してください(例: #general)」
ステップ 4: ユーザー名のカスタマイズ(オプション)
AskUserQuestion を使用:
質問: 「カスタムボット表示名? (Slackの送信者名として表示されます)」
オプション:
- OMC(デフォルト) - 「OMC」と表示
- Claude Code - 「Claude Code」と表示
- カスタム - カスタム名を入力
ステップ 5: イベントの設定
multiSelect で AskUserQuestion を使用:
質問: 「どのイベントでSlack通知をトリガーしますか?」
オプション (multiSelect: true):
- セッション終了(推奨) - Claudeセッションが終了したとき
- 入力待ち - Claudeが応答を待っているとき(長時間タスクに最適)
- セッション開始 - 新しいセッションが開始されたとき
- セッション継続中 - 永続モードがセッションを維持しているとき
デフォルト選択: session-end + ask-user-question。
ステップ 6: 設定の書き込み
既存の設定を読み込み、新しい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, CHANNEL, USERNAME はユーザーから収集
echo "$EXISTING" | jq \
--arg url "$WEBHOOK_URL" \
--arg channel "$CHANNEL" \
--arg username "$USERNAME" \
'.notifications = (.notifications // {enabled: true}) |
.notifications.enabled = true |
.notifications.slack = {
enabled: true,
webhookUrl: $url,
channel: (if $channel == "" then null else $channel end),
username: (if $username == "" then null else $username end)
}' > "$CONFIG_FILE"
イベント固有設定:
# 選択されなかったイベントを無効化(Telegram/Discordと同様)
echo "$(cat "$CONFIG_FILE")" | jq \
'.notifications.events = (.notifications.events // {}) |
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
ステップ 7: 設定のテスト
設定を書き込んだ後、テスト通知を送信するかどうかを確認します:
AskUserQuestion を使用:
質問: 「設定を確認するためにテスト通知を送信しますか?」
オプション:
- はい、今テストする(推奨) - Slackチャンネルにテストメッセージを送信
- いいえ、後でテストします - テストをスキップ
テストする場合:
curl -s -o /dev/null -w "%{http_code}" \
-H "Content-Type: application/json" \
-d "{\"text\": \"OMC test notification - Slack is configured!\", \"channel\": \"$CHANNEL\", \"username\": \"$USERNAME\"}" \
"$WEBHOOK_URL"
成功または失敗を報告します。一般的な問題:
- 401 Unauthorized: Webhook URLが無効または期限切れ
- ネットワークエラー: hooks.slack.com への接続性を確認
ステップ 8: 確認
最終的な設定概要を表示します。
Slack通知が設定されました!
Webhook URL: https://hooks.slack.com/services/...
チャンネル: #general
ユーザー名: OMC
イベント: session-end, ask-user-question
設定保存先: ~/.claude/.omc-config.json
環境変数でも設定可能:
OMC_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
OMC_SLACK_CHANNEL=#general
再設定: /oh-my-claudecode:configure-notifications slack
Telegram設定: /oh-my-claudecode:configure-notifications telegram
Discord設定: /oh-my-claudecode:configure-notifications discord
環境変数による代替設定
ユーザーはこのウィザードを完全にスキップして、シェルプロファイルに環境変数を設定することもできます:
export OMC_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
export OMC_SLACK_CHANNEL="#general"
export OMC_SLACK_USERNAME="OMC"
環境変数は、.omc-config.json がなくても通知システムによって自動検出されます。