#!/usr/bin/env bash # notify-developer.sh — envía DM a los desarrolladores al crear un bot/agente # # Uso: # ./dev-scripts/agent/notify-developer.sh # # Requisitos en .env: # DEVELOPER_MATRIX_USERS — lista separada por comas de usernames Matrix # Ejemplo: DEVELOPER_MATRIX_USERS=egutierrez,admin # MATRIX_TOKEN_ — token del bot recién creado # MATRIX_HOMESERVER, MATRIX_SERVER_NAME source "$(dirname "$0")/../_common.sh" load_env ID="${1:-}" TYPE="${2:-agent}" DISPLAYNAME="${3:-$ID}" NORM="$(normalize_id "$ID")" [[ -z "$ID" ]] && { warn "notify-developer: se necesita agent-id"; exit 0; } # ── Obtener token del bot ──────────────────────────────────────────────── TOKEN_VAR="MATRIX_TOKEN_${NORM}" TOKEN="${!TOKEN_VAR:-}" if [[ -z "$TOKEN" ]]; then warn "notify-developer: $TOKEN_VAR no encontrado en .env — saltando notificación" exit 0 fi # ── Obtener lista de desarrolladores ───────────────────────────────────── if [[ -z "${DEVELOPER_MATRIX_USERS:-}" ]]; then warn "notify-developer: DEVELOPER_MATRIX_USERS no definido en .env — saltando" exit 0 fi # ── Construir mensaje ──────────────────────────────────────────────────── if [[ "$TYPE" == "robot" ]]; then EMOJI="🤖" TYPE_LABEL="Robot" COMMANDS_MSG="Mis comandos: help, ping, status, info, version" else EMOJI="🧠" TYPE_LABEL="Agente" COMMANDS_MSG="Escríbeme directamente o usa !help para ver mis comandos" fi MSG="${EMOJI} ¡Hola! Soy **${DISPLAYNAME}** (${TYPE_LABEL}). Acabo de ser creado. ${COMMANDS_MSG}." # ── Enviar DM a cada desarrollador ─────────────────────────────────────── IFS=',' read -ra DEVS <<< "$DEVELOPER_MATRIX_USERS" for dev in "${DEVS[@]}"; do dev="$(echo "$dev" | xargs)" # trim spaces [[ -z "$dev" ]] && continue USER_ID="@${dev}:${MATRIX_SERVER_NAME}" info "Enviando DM de $ID a $USER_ID..." # Crear DM room (o reutilizar existente) ROOM_RESP=$(curl -sf -X POST "${MATRIX_HOMESERVER}/_matrix/client/v3/createRoom" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"is_direct\": true, \"invite\": [\"${USER_ID}\"], \"preset\": \"trusted_private_chat\" }" 2>&1) || { warn " No se pudo crear DM room con $USER_ID" continue } ROOM_ID=$(echo "$ROOM_RESP" | grep -o '"room_id":"[^"]*"' | cut -d'"' -f4) if [[ -z "$ROOM_ID" ]]; then warn " Respuesta inesperada al crear room: $ROOM_RESP" continue fi # Enviar mensaje TXN_ID="notify-$(date +%s%N)" SEND_RESP=$(curl -sf -X PUT \ "${MATRIX_HOMESERVER}/_matrix/client/v3/rooms/${ROOM_ID}/send/m.room.message/${TXN_ID}" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"msgtype\": \"m.text\", \"body\": \"${MSG}\" }" 2>&1) || { warn " No se pudo enviar mensaje a $USER_ID" continue } ok "DM enviado a $USER_ID" done