CLI y cURL
El comando honk-me envía desde scripts de shell, tareas cron y CI, con los mismos reintentos e idempotencia que las bibliotecas. O sáltate la instalación y usa una sola solicitud cURL.
- Paquete
-
github.com/honk-me/honk-goPublicado - Código fuente
- github.com/honk-me/honk-go · Licencia MIT
- Requisitos
- Linux, macOS o Windows (amd64 o arm64). Go 1.22+ para compilarla tú.
Instalación
La CLI forma parte del módulo de Go.
go install github.com/honk-me/honk-go/cmd/honk-me@latest
# or download a prebuilt binary (Linux, macOS, Windows; amd64 and arm64):
# https://github.com/honk-me/honk-go/releases Quien tenga una clave de ingesta (honk_…) puede enviar mensajes a su proyecto. Guárdala en servidores, tareas y secretos de CI, nunca en un navegador ni en una app móvil o de escritorio.
Enviar un evento
Lee HONK_URL y HONK_KEY del entorno; la clave nunca se pasa como opción, así que nunca acaba en el historial de tu shell ni en la lista de procesos.
export HONK_URL=https://honk-me.app HONK_KEY=honk_… # better: your secret store
honk-me beep "Backup finished" "nightly pg_dump took 42 s"
honk-me loud "Disk 91%" --group-key "disk/$(hostname)/var" Comandos
Los atajos light, beep, loud, long y blast fijan el nivel y reciben el texto como argumentos. send, problem y recovery usan opciones. honk-me send -h las muestra todas.
honk-me loud "Disk 91%" # shortcut: light, beep, loud, long, blast
honk-me beep "Backup finished" "nightly pg_dump took 42 s" # [TITLE] MESSAGE, flags anywhere
honk-me send --title "Disk almost full" --message "/var at 91%" --severity loud \
--group-key "disk/$(hostname)/var" --source "$(hostname)" --meta host="$(hostname)" --meta used:=91
honk-me problem --group-key db/backup --title "Backup failed" --message "pg_dump exited with 1"
honk-me recovery --group-key db/backup --title "Backup OK" --message "pg_dump finished"
tail -c 8000 /var/log/backup.log | honk-me send --title "Backup log" --message - # message from stdin
honk-me send --message "Front door" --image-url https://cam.example.com/snap.jpg --priority high
honk-me light "New request from Emily" "Wants a quote for an online shop" \
--action "Reply by email=mailto:[email protected]" --action "Call=tel:+12025550147" # buttons, up to 3 En cron: avisar solo cuando falla
Envía una recuperación solo cuando algo estaba roto de verdad. Una recuperación sin un problema abierto abre igualmente un episodio «recuperado» y avisa, así que una recuperación después de cada ejecución correcta te avisaría todas las noches.
0 3 * * * pg_dump app > /backup/app.sql || honk-me problem --group-key db/backup --source "$(hostname)" --title "Backup failed" --message "pg_dump exited with $?" En CI
Una clave de idempotencia por intento de ejecución, para que los reintentos de la propia CLI nunca dupliquen nada, y || true para que una notificación nunca pueda hacer fallar la compilación.
- name: Notify
if: failure()
env:
HONK_URL: ${{ secrets.HONK_URL }}
HONK_KEY: ${{ secrets.HONK_KEY }}
run: |
honk-me problem --group-key "ci/${{ github.repository }}/${{ github.ref_name }}" \
--title "CI failed: ${{ github.workflow }}" --message "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--source github-actions --category deployments \
--idempotency-key "gh-${{ github.run_id }}-${{ github.run_attempt }}" || true Códigos de salida
Añade || true donde una notificación fallida no deba hacer fallar el script.
| 0 | Aceptado, o duplicado de un evento ya aceptado |
|---|---|
| 1 | Respuesta inesperada: un HONK_URL incorrecto, una redirección, una respuesta mal formada |
| 2 | Error de uso, o falta HONK_URL o HONK_KEY |
| 3 | Mensaje no válido: corrige las opciones |
| 4 | Autenticación: clave no válida o revocada, urgente no permitido, proyecto suspendido |
| 5 | Cuota o límite de frecuencia (429); stderr muestra Retry-After |
| 6 | Conflicto de idempotencia (409): misma clave, contenido distinto |
| 7 | Fallo temporal tras los reintentos: vuelve a ejecutarlo con la misma --idempotency-key |
Con cURL
Sin instalar nada. Añade una Idempotency-Key para que los reintentos del propio cURL no puedan crear duplicados.
curl -sS https://honk-me.app/v1/messages \
-H "Authorization: Bearer $HONK_KEY" \
-H "Idempotency-Key: backup-$(date +%Y%m%d)" \
-H "Content-Type: application/json" \
-d '{
"title": "Backup failed",
"message": "pg_dump exited with 1",
"severity": "long",
"group_key": "db/backup",
"event_type": "problem"
}'
# → 202 {"id":"msg_…","status":"accepted","duplicate":false,"received_at":"…"} curl --fail-with-body -sS --max-time 10 --retry 3 --retry-all-errors \
-X POST "$HONK_URL/v1/messages" \
-H "Authorization: Bearer $HONK_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: request-42" \
-d '{"title":"New request from Ana Pop","message":"Wants a quote for an online shop, budget €4,000.","severity":"light","priority":"high","category":"customers","group_key":"requests/42"}' Reintentos que nunca envían dos veces
- Cada envío lleva una
Idempotency-Key: la tuya o un UUIDv7 nuevo. La misma clave se reutiliza en cada reintento y, durante 24 horas, Honk responde a una repetición con el id original yduplicate: true, así que una respuesta perdida nunca crea un segundo mensaje. - Solo se reintentan los errores de red, los tiempos de espera agotados,
429y5xx, con backoff exponencial y jitter completo, y nunca antes delRetry-Afterdel servidor. Las demás respuestas4xxno se reintentan nunca: hay que corregir la solicitud. - Cada intento se corta a los 5 segundos y todo se detiene a los 30. Una espera que superaría ese plazo, como una cuota diaria que se reinicia a medianoche, falla al momento y te dice cuándo reintentar.
- Los campos se validan antes de enviar, y todos los errores de validación se devuelven juntos.