# Notificări din workflow-urile n8n pe iPhone

> Rezultatele și eșecurile workflow-urilor n8n ajung pe iPhone prin nodul Honk sau HTTP Request, iar reîncercările nu te anunță niciodată de două ori.

Source: https://honk-me.app/ro/ghiduri/notificari-workflow-n8n

n8n poate trimite deja notificări în multe feluri, inclusiv cu [nodul Pushover](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.pushover/) integrat sau prin aplicații de chat. Fiecare dintre ele trimite fiecare mesaj separat. Honk aduce ce le trebuie workflow-urilor care rulează nesupravegheate: repetările se adună într-un grup, un eșec și revenirea lui rămân împreună, iar reîncercările nu te anunță niciodată de două ori.

Ghidul acoperă ambele variante: nodul comunitar Honk și nodul HTTP Request, pentru instanțele care nu pot instala noduri comunitare. La final construiești un workflow de eroare care raportează fiecare execuție eșuată.

## Înainte să începi

- Un cont Honk (deocamdată, doar pe bază de invitație: [cere acces](https://honk-me.app/ro/cere-acces)) și un proiect pentru workflow-uri, cu o cheie API: în aplicația web, deschide proiectul, apoi **Chei**.
- n8n 1.x sau 2.x.

## Varianta 1: nodul Honk

Pe un n8n self-hosted, instalează nodul comunitar din **Settings ▸ Community Nodes** sau cu 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
```

Creează o credențială **Honk API** cu URL-ul serverului și cheia API. **Test** verifică cheia fără să trimită nimic pe telefon. Apoi adaugă **Honk ▸ Send message** într-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)
```

Nodul trimite câte o cerere pentru fiecare item primit. Fiecare item are o cheie de idempotență, construită implicit din execuție, nod și item, așa că **Retry On Fail** e sigur: o reîncercare întoarce evenimentul original în loc să-ți trimită a doua notificare.

Dacă același eveniment poate apărea în execuții diferite, de exemplu un webhook pe care expeditorul îl trimite de două ori, setează-ți propria cheie la **Options ▸ Idempotency Key**, de exemplu `request-{{ $json.body.id }}`. Honk acceptă fiecare cheie o singură dată în 24 de ore.

## Varianta 2: nodul HTTP Request

Pe n8n Cloud sau oriunde nodurile comunitare sunt dezactivate, nodul HTTP Request integrat face aceeași treabă, cu câteva câmpuri în plus de completat. Ține cheia într-o credențială n8n (Header Auth), niciodată direct în nod:

```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 }}"
  }
```

Headerul de idempotență folosește ID-ul execuției și indexul rulării, așa că Retry On Fail îl refolosește.

## Raportează fiecare execuție eșuată

n8n pornește un *workflow de eroare* (Error Workflow) de fiecare dată când eșuează un workflow care îl are setat. Construiește unul care trimite eșecul la Honk, grupat pe 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"
```

Fiecare workflow are grupul lui, `n8n/<workflow id>`. Primul eșec vine ca un Claxon lung, cu link către execuția eșuată. Dacă workflow-ul eșuează în continuare la fiecare cinci minute, primești actualizări discrete cu un contor, nu câte o notificare pentru fiecare execuție.

## Încearcă cu un webhook

În repository-ul nodului găsești un workflow de exemplu, `examples/quote-request.json`: un webhook primește o cerere de ofertă, iar Honk te anunță, câte un grup pentru fiecare cerere. Importă-l din **Workflows ▸ Import from File**, alege credențiala Honk, activează-l și trimite-i o cerere:

```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 adaugă Honk lui n8n

Un nod de notificare trimite un mesaj și atât. Honk ține câte un grup pentru fiecare problemă în desfășurare, hotărăște când trebuie să-ți vibreze telefonul, închide incidentul când lucrurile își revin și îți arată workflow-urile în același inbox cu serverele, scripturile și casa, cu ore de liniște și un rezumat pentru rulările de rutină.
