# Notifications de workflows n8n sur votre iPhone

> Les résultats et les échecs de vos workflows n8n sur votre iPhone avec le nœud Honk ou HTTP Request, sans notification en double lors des relances.

Source: https://honk-me.app/fr/guides/notifications-workflows-n8n

n8n sait déjà envoyer des notifications de bien des façons, notamment avec son [nœud Pushover](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.pushover/) ou des apps de messagerie. Mais chaque message part seul. Honk apporte ce dont les workflows ont besoin quand ils tournent sans surveillance : les répétitions sont regroupées, un échec et son rétablissement restent ensemble, et une nouvelle tentative ne notifie jamais deux fois.

Ce guide présente les deux façons de faire : le nœud communautaire Honk, et le nœud HTTP Request pour les instances où les nœuds communautaires ne peuvent pas être installés. Il construit ensuite un workflow d’erreur qui signale chaque exécution en échec.

## Avant de commencer

- Un compte Honk (pour l’instant sur invitation : [demandez un accès](https://honk-me.app/fr/demander-un-acces)) et un projet pour vos workflows, avec une clé d’ingestion : dans l’app web, ouvrez le projet, puis **Clés**.
- n8n 1.x ou 2.x.

## Option 1 : le nœud Honk

Sur une instance n8n auto-hébergée, installez le nœud communautaire depuis **Settings ▸ Community Nodes**, ou avec npm :

```sh
# Self-hosted n8n: Settings → Community Nodes → Install → n8n-nodes-honk
# Without the UI (Docker or npm installs), in the n8n user folder:
cd ~/.n8n/nodes && npm install n8n-nodes-honk
# then restart n8n
```

Créez des identifiants **Honk API** avec l’URL du serveur et la clé d’ingestion. **Test** vérifie la clé sans rien envoyer sur votre téléphone. Ajoutez ensuite **Honk ▸ Send message** à un workflow :

```text
1. Settings → Community Nodes → Install → n8n-nodes-honk
2. Credentials → New → Honk API
     Server URL:     https://honk-me.app
     Ingestion Key:  honk_…
     (Test checks the key; nothing is sent to your phone)
3. Add the node Honk → Send message
     Message:   Wants a quote for an online shop, budget €4,000. Reply within a day.
     Title:     New request from Ana Pop
     Severity:  Light Honk (Info)
   Additional Fields
     Priority:  High
     Category:  Customers
     Source:    n8n
     Group Key: requests/{{ $json.id }}
   Options
     Idempotency Key: request-{{ $json.id }}   (default: execution + node + item)
4. Node Settings → Retry On Fail: on (the same key, so never a duplicate)
```

Le nœud envoie une requête par élément reçu. Chaque élément a sa clé d’idempotence, construite par défaut à partir de l’exécution, du nœud et de l’élément. Vous pouvez donc activer **Retry On Fail** sans risque : une nouvelle tentative renvoie l’événement d’origine au lieu d’un second push.

Si un même événement peut arriver dans plusieurs exécutions, par exemple un webhook que l’expéditeur envoie deux fois, définissez votre propre clé sous **Options ▸ Idempotency Key**, comme `request-{{ $json.body.id }}`. Honk n’accepte chaque clé qu’une fois sur 24 heures.

## Option 2 : le nœud HTTP Request

Sur n8n Cloud, ou partout où les nœuds communautaires sont désactivés, le nœud HTTP Request intégré fait la même chose, avec quelques champs de plus à remplir. Stockez la clé dans des identifiants n8n (Header Auth), jamais dans le nœud lui-même :

```text
HTTP Request node
  Method:          POST
  URL:             https://honk-me.app/v1/messages
  Authentication:  Generic Credential Type → Header Auth
                   Name "Authorization", Value "Bearer honk_…" (an n8n credential)
  Header:          Idempotency-Key = {{ $execution.id }}-{{ $runIndex }}
  Settings:        Retry On Fail (3 tries, 2000 ms)
  Body (JSON):
  {
    "title": "New request from Ana Pop",
    "message": "Wants a quote for an online shop, budget €4,000. Reply within a day.",
    "severity": "light",
    "priority": "high",
    "category": "customers",
    "source": "n8n",
    "group_key": "requests/{{ $json.id }}"
  }
```

L’en-tête d’idempotence repose sur l’identifiant de l’exécution et l’index du run : Retry On Fail réutilise donc la même valeur.

## Signaler chaque exécution en échec

n8n lance un *workflow d’erreur* chaque fois qu’échoue un workflow qui le désigne. Créez-en un qui envoie l’échec à Honk, regroupé par workflow :

```text
Workflow "Honk: workflow errors"
  1. Error Trigger
  2. Honk → Send message
       Message:   {{ $json.execution.error.message }}
       Title:     n8n: {{ $json.workflow.name }} failed
       Severity:  Long Honk (Error)
     Additional Fields
       Event Type:  Problem
       Group Key:   n8n/{{ $json.workflow.id }}
       Source:      n8n
       Category:    Automation
       URL:         {{ $json.execution.url }}
     Options
       Idempotency Key: n8n-error-{{ $json.execution.id }}

Then, in every workflow that should report: Settings → Error Workflow → "Honk: workflow errors"
```

Chaque workflow a son propre groupe, `n8n/<workflow id>`. Le premier échec part en push, en Long coup de klaxon, avec un lien vers l’exécution concernée. Si le workflow continue d’échouer toutes les cinq minutes, vous recevez des mises à jour discrètes avec un compteur, et non un push par exécution.

## Essayer avec un webhook

Le dépôt du nœud contient un exemple de workflow, `examples/quote-request.json` : un webhook reçoit une demande de devis et Honk l’envoie en push, un groupe par demande. Importez-le avec **Workflows ▸ Import from File**, choisissez vos identifiants Honk, activez-le et envoyez-lui une requête :

```sh
curl -X POST https://your-n8n.example.com/webhook/quote-request \
  -H 'Content-Type: application/json' \
  -d '{"id": 4812, "name": "Ana", "email": "ana@example.com", "summary": "3 rooms, 2 bathrooms"}'
```

## Ce que Honk apporte à n8n

Un nœud de notification envoie un message, rien de plus. Honk suit chaque situation dans un groupe, décide quand votre téléphone doit vibrer, clôt l’incident au rétablissement et réunit vos workflows, vos serveurs, vos scripts et votre maison dans une seule boîte de réception, avec des heures calmes et un récapitulatif pour les exécutions de routine.
