Configurar Notificaciones
Configura las integraciones de notificaciones de OMC para que recibas alertas cuando las sesiones finalicen, necesiten entrada o completen tareas en segundo plano.
Enrutamiento
Detecta qué proveedor desea el usuario según su solicitud o argumento:
- Si el activador o argumento contiene "telegram" → sigue la sección de Telegram
- Si el activador o argumento contiene "discord" → sigue la sección de Discord
- Si el activador o argumento contiene "slack" → sigue la sección de Slack
- Si no se especifica ningún proveedor, usa AskUserQuestion:
Pregunta: "¿Qué servicio de notificaciones te gustaría configurar?"
Opciones:
- Telegram - Token de bot + ID de chat. Funciona en dispositivos móviles y de escritorio.
- Discord - Webhook o token de bot + ID de canal.
- Slack - URL de webhook entrante.
Configuración de Telegram
Configura las notificaciones de Telegram para que OMC pueda enviarte mensajes cuando las sesiones finalicen, necesiten entrada o completen tareas en segundo plano.
Cómo Funciona Esta Habilidad
Esta es una habilidad de configuración interactiva en lenguaje natural. Guía al usuario a través de la configuración haciendo preguntas con AskUserQuestion. Escribe el resultado en ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json.
Paso 1: Detectar Configuración Existente
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
Si se encuentra una configuración existente, muestra al usuario lo que está configurado actualmente y pregunta si desea actualizar o reconfigurar.
Paso 2: Crear un Bot de Telegram
Guía al usuario para crear un bot si no tiene uno:
Para configurar las notificaciones de Telegram, necesitas un token de bot de Telegram y tu ID de chat.
CREAR UN BOT (si no tienes uno):
1. Abre Telegram y busca a @BotFather
2. Envía /newbot
3. Elige un nombre (ej., "Mi Notificador OMC")
4. Elige un nombre de usuario (ej., "mi_bot_omc")
5. BotFather te dará un token como: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
OBTENER TU ID DE CHAT:
1. Inicia un chat con tu nuevo bot (envía /start)
2. Visita: https://api.telegram.org/bot<TU_TOKEN>/getUpdates
3. Busca "chat":{"id":TU_ID_DE_CHAT}
- Los IDs de chat personales son números positivos (ej., 123456789)
- Los IDs de chat de grupo son números negativos (ej., -1001234567890)
Paso 3: Recoger el Token del Bot
Usa AskUserQuestion:
Pregunta: "Pega el token de tu bot de Telegram (de @BotFather)"
El usuario escribirá su token en el campo "Otro".
Validar el token:
- Debe coincidir con el patrón:
dígitos:alfanumérico(ej.,123456789:ABCdefGHI...) - Si no es válido, explica el formato y vuelve a preguntar
Paso 4: Recoger el ID de Chat
Usa AskUserQuestion:
Pregunta: "Pega tu ID de chat de Telegram (el número de la API getUpdates)"
El usuario escribirá su ID de chat en el campo "Otro".
Validar el ID de chat:
- Debe ser un número (positivo para personal, negativo para grupos)
- Si no es válido, ofrece ayuda para encontrarlo:
# Ayudar al usuario a encontrar su ID de chat
BOT_TOKEN="TOKEN_PROPORCIONADO_POR_USUARIO"
echo "Obteniendo mensajes recientes para encontrar tu ID de chat..."
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates" | jq '.result[-1].message.chat.id // .result[-1].message.from.id // "No se encontraron mensajes - envía /start a tu bot primero"'
Paso 5: Elegir el Modo de Parseo
Usa AskUserQuestion:
Pregunta: "¿Qué formato de mensaje prefieres?"
Opciones:
- Markdown (Recomendado) - Negrita, cursiva, bloques de código con sintaxis Markdown
- HTML - Negrita, cursiva, código con etiquetas HTML
Paso 6: Configurar Eventos
Usa AskUserQuestion con multiSelect:
Pregunta: "¿Qué eventos deberían activar las notificaciones de Telegram?"
Opciones (multiSelect: true):
- Fin de sesión (Recomendado) - Cuando una sesión de Claude finaliza
- Entrada necesaria - Cuando Claude espera tu respuesta (ideal para tareas largas)
- Inicio de sesión - Cuando comienza una nueva sesión
- Continuación de sesión - Cuando el modo persistente mantiene la sesión activa
Selección predeterminada: fin-de-sesión + pregunta-al-usuario.
Paso 7: Escribir la Configuración
Lee la configuración existente, combina los nuevos ajustes de Telegram y vuelve a escribir:
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 se recogen del usuario
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"
Agregar configuración específica de eventos si el usuario no seleccionó todos los eventos:
Para cada evento NO seleccionado, deshabilitarlo:
# Ejemplo: deshabilitar inicio-de-sesión si no fue seleccionado
echo "$(cat "$CONFIG_FILE")" | jq \
'.notifications.events = (.notifications.events // {}) |
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
Paso 8: Probar la Configuración
Después de escribir la configuración, ofrece enviar una notificación de prueba:
Usa AskUserQuestion:
Pregunta: "¿Enviar una notificación de prueba para verificar la configuración?"
Opciones:
- Sí, probar ahora (Recomendado) - Enviar un mensaje de prueba a tu chat de Telegram
- No, lo probaré después - Omitir la prueba
Si se prueba:
BOT_TOKEN="TOKEN_PROPORCIONADO_POR_USUARIO"
CHAT_ID="ID_DE_CHAT_PROPORCIONADO_POR_USUARIO"
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=Notificación de prueba de OMC - ¡Telegram está configurado!")
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)
if [ "$HTTP_CODE" = "200" ]; then
echo "¡Notificación de prueba enviada con éxito!"
else
echo "Falló (HTTP $HTTP_CODE):"
echo "$BODY" | jq -r '.description // "Error desconocido"' 2>/dev/null || echo "$BODY"
fi
Reporta éxito o fallo. Problemas comunes:
- 401 No autorizado: El token del bot no es válido
- 400 Solicitud incorrecta: chat no encontrado: El ID de chat es incorrecto, o el usuario no ha enviado
/startal bot - Error de red: Verifica la conectividad con api.telegram.org
Paso 9: Confirmar
Muestra el resumen de la configuración final:
Notificaciones de Telegram Configuradas
Bot: @nombre_de_tu_bot
ID de Chat: 123456789
Formato: Markdown
Eventos: fin-de-sesión, pregunta-al-usuario
Configuración guardada en: ~/.claude/.omc-config.json
También puedes configurar esto mediante variables de entorno:
OMC_TELEGRAM_BOT_TOKEN=123456789:ABCdefGHI...
OMC_TELEGRAM_CHAT_ID=123456789
Para reconfigurar: /oh-my-claudecode:configurar-notificaciones telegram
Para configurar Discord: /oh-my-claudecode:configurar-notificaciones discord
Para configurar Slack: /oh-my-claudecode:configurar-notificaciones slack
Alternativa de Variables de Entorno
Los usuarios pueden omitir este asistente por completo configurando variables de entorno en su perfil de shell:
export OMC_TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export OMC_TELEGRAM_CHAT_ID="123456789"
Las variables de entorno son detectadas automáticamente por el sistema de notificaciones sin necesidad de .omc-config.json.
Configuración de Discord
Configura las notificaciones de Discord para que OMC pueda avisarte cuando las sesiones finalicen, necesiten entrada o completen tareas en segundo plano.
Cómo Funciona Esta Habilidad
Esta es una habilidad de configuración interactiva en lenguaje natural. Guía al usuario a través de la configuración haciendo preguntas con AskUserQuestion. Escribe el resultado en ${CLAUDE_CONFIG_DIR:-~/.claude}/.omc-config.json.
Paso 1: Detectar Configuración Existente
CONFIG_FILE="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-config.json"
if [ -f "$CONFIG_FILE" ]; then
# Verificar configuración existente de 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
Si se encuentra una configuración existente, muestra al usuario lo que está configurado actualmente y pregunta si desea actualizar o reconfigurar.
Paso 2: Elegir el Método de Discord
Usa AskUserQuestion:
Pregunta: "¿Cómo te gustaría enviar las notificaciones de Discord?"
Opciones:
- Webhook (Recomendado) - Crea un webhook en tu canal de Discord. Simple, no necesita bot. Solo pega la URL.
- API de Bot - Usa un token de bot de Discord + ID de canal. Más flexible, requiere una aplicación de bot.
Paso 3A: Configuración de Webhook
Si el usuario eligió Webhook:
Usa AskUserQuestion:
Pregunta: "Pega la URL de tu webhook de Discord. Para crear uno: Configuración del Servidor > Integraciones > Webhooks > Nuevo Webhook > Copiar URL"
El usuario escribirá su URL de webhook en el campo "Otro".
Validar la URL:
- Debe comenzar con
https://discord.com/api/webhooks/ohttps://discordapp.com/api/webhooks/ - Si no es válida, explica el formato y vuelve a preguntar
Paso 3B: Configuración de API de Bot
Si el usuario eligió API de Bot:
Haz dos preguntas:
- "Pega el token de tu bot de Discord" - De discord.com/developers > Tu App > Bot > Token
- "Pega el ID del canal" - Haz clic derecho en el canal > Copiar ID del Canal (requiere Modo Desarrollador)
Paso 4: Configurar Mención (Mencionar Usuario)
Usa AskUserQuestion:
Pregunta: "¿Te gustaría que las notificaciones mencionen a alguien?"
Opciones:
- Sí, mencionar a un usuario - Etiquetar a un usuario específico por su ID de usuario de Discord
- Sí, mencionar un rol - Etiquetar un rol por su ID de rol
- Sin menciones - Solo publicar el mensaje sin mencionar a nadie
Si el usuario quiere mencionar a un usuario:
Pregunta: "¿Cuál es el ID de usuario de Discord a mencionar? (Haz clic derecho en el usuario > Copiar ID de Usuario, requiere Modo Desarrollador)"
El formato de mención es: <@ID_DE_USUARIO> (ej., <@1465264645320474637>)
Si el usuario quiere mencionar un rol:
Pregunta: "¿Cuál es el ID del rol de Discord a mencionar? (Configuración del Servidor > Roles > clic derecho en el rol > Copiar ID del Rol)"
El formato de mención es: <@&ID_DE_ROL> (ej., <@&123456789>)
Paso 5: Configurar Eventos
Usa AskUserQuestion con multiSelect:
Pregunta: "¿Qué eventos deberían activar las notificaciones de Discord?"
Opciones (multiSelect: true):
- Fin de sesión (Recomendado) - Cuando una sesión de Claude finaliza
- Entrada necesaria - Cuando Claude espera tu respuesta (ideal para tareas largas)
- Inicio de sesión - Cuando comienza una nueva sesión
- Continuación de sesión - Cuando el modo persistente mantiene la sesión activa
Selección predeterminada: fin-de-sesión + pregunta-al-usuario.
Paso 6: Sobreescritura Opcional del Nombre de Usuario
Usa AskUserQuestion:
Pregunta: "¿Nombre de visualización personalizado del bot? (Se muestra como el nombre del remitente del webhook en Discord)"
Opciones:
- OMC (predeterminado) - Mostrar como "OMC"
- Claude Code - Mostrar como "Claude Code"
- Personalizado - Ingresar un nombre personalizado
Paso 7: Escribir la Configuración
Lee la configuración existente, combina los nuevos ajustes de Discord y vuelve a escribir:
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
Para el método Webhook:
Construye el objeto de notificaciones con los valores recogidos y combínalo en .omc-config.json usando jq:
# WEBHOOK_URL, MENTION, USERNAME se recogen del usuario
# EVENTS es la lista de eventos habilitados
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"
Para el método API de Bot:
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"
Agregar configuración específica de eventos si el usuario no seleccionó todos los eventos:
Para cada evento NO seleccionado, deshabilitarlo:
# Ejemplo: deshabilitar inicio-de-sesión si no fue seleccionado
echo "$(cat "$CONFIG_FILE")" | jq \
'.notifications.events = (.notifications.events // {}) |
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
Paso 8: Probar la Configuración
Después de escribir la configuración, ofrece enviar una notificación de prueba:
Usa AskUserQuestion:
Pregunta: "¿Enviar una notificación de prueba para verificar la configuración?"
Opciones:
- Sí, probar ahora (Recomendado) - Enviar un mensaje de prueba a tu canal de Discord
- No, lo probaré después - Omitir la prueba
Si se prueba:
# Para webhook:
curl -s -o /dev/null -w "%{http_code}" \
-H "Content-Type: application/json" \
-d "{\"content\": \"${MENTION:+$MENTION\\n}Notificación de prueba de OMC - ¡Discord está configurado!\"}" \
"$WEBHOOK_URL"
Reporta éxito o fallo. Si falla...