---
title: Benachrichtigungen
description: E-Mail-Zusammenfassungen und Webhooks für Gespräche, die Aufmerksamkeit brauchen, einschließlich Signaturprüfung.
---

Hearl kann Ihr Team benachrichtigen, sobald ein Gespräch Aufmerksamkeit braucht. Richten Sie das auf der Seite **Benachrichtigungen** ein. Nur Inhaber und Admins können diese Einstellungen ändern.

## Wann Benachrichtigungen gesendet werden [#when]

Hearl prüft alle 15 Minuten. Ein Gespräch wird aufgenommen, wenn:

- sein Plattformstatus **Noch keine Antwort** oder **Nutzer hat nachgefasst** lautet
- sein Bearbeitungsstand noch **Nicht begonnen** ist
- die KI es als zu Ihrem Produkt gehörig beurteilt hat, ohne unsichere Einschätzungen
- seine Priorität mindestens dem von Ihnen festgelegten Minimum entspricht: alles, Mittel und höher oder nur Hoch

Jedes Gespräch wird pro Status einmal gemeldet. Wurde es als **Noch keine Antwort** gemeldet und der Nutzer fasst später nach, wird es erneut als **Nutzer hat nachgefasst** gemeldet.

## E-Mail [#email]

Aktivieren Sie **E-Mail senden** und fügen Sie Empfänger hinzu. Lassen Sie die Liste leer, um alle Workspace-Mitglieder per E-Mail zu benachrichtigen. Jede Adresse ist möglich, etwa ein gemeinsames Support-Postfach, bis zu 20 Empfänger.

Jede Prüfung sendet eine Zusammenfassung mit bis zu 10 Gesprächen und einem Link zu den übrigen im Posteingang. Wählen Sie unter **Sprache** Englisch oder Chinesisch.

## Webhook [#webhook]

Geben Sie einen **Endpunkt** ein. Er muss eine öffentliche `https`-URL sein. Hearl erkennt gängige Chat-Bots an ihrer Adresse und sendet das Nachrichtenformat, das sie erwarten:

| Adresse | Gesendet als |
| --- | --- |
| `hooks.slack.com` | Slack-Nachricht |
| `feishu.cn`, `larksuite.com` | Feishu-Textnachricht |
| `qyapi.weixin.qq.com` | WeCom-Markdown-Nachricht |
| `oapi.dingtalk.com` | DingTalk-Markdown-Nachricht |
| `discord.com`, `discordapp.com` | Discord-Nachricht |
| Jede andere URL | Generisches JSON (siehe unten) |

Die Seite zeigt, welche Art erkannt wurde. **Test senden** sendet ein Beispiel, und die Seite zeigt das Ergebnis des letzten Versands. Eine Anfrage, die länger als 8 Sekunden dauert, gilt als Zeitüberschreitung.

### Generisches JSON [#json]

```json
{
  "event": "conversations.needs_attention",
  "workspace": { "id": "org_123", "name": "Acme" },
  "text": "*2 conversations need attention* · Acme\n• [reddit] Sync stopped working after 2.3 — No reply yet <https://…>",
  "conversations": [
    {
      "id": "c_8f2a",
      "platform": "reddit",
      "product": "Acme",
      "title": "Sync stopped working after 2.3",
      "author": "some_user",
      "url": "https://www.reddit.com/r/…",
      "status": "待回复",
      "priority": "高",
      "category": "故障",
      "inbox_url": "https://hearl.org/app?c=c_8f2a"
    }
  ],
  "sent_at": "2026-11-08T09:15:00.000Z"
}
```

| Feld | Beschreibung |
| --- | --- |
| `event` | `conversations.needs_attention` oder `test` für **Test senden**. |
| `workspace` | Die `id` und der `name` des Workspace. |
| `text` | Eine fertig postbare Zusammenfassung. Slack liest nur dieses Feld. |
| `conversations` | Jedes Gespräch in diesem Versand. |
| `sent_at` | Zeitpunkt des Versands im Format ISO 8601. |

`platform` ist `x`, `reddit` oder `hn`. `status`, `priority` und `category` sind stabile Codes auf Chinesisch, sodass Ihr Code unabhängig von der Sprache Ihres Workspace darauf abgleichen kann:

| Feld | Code | Bedeutung |
| --- | --- | --- |
| `status` | `待回复` | Noch keine Antwort |
| `status` | `用户有新回复` | Nutzer hat nachgefasst |
| `priority` | `高` / `中` / `低` | Hoch / Mittel / Niedrig |
| `category` | `故障` | Fehler |
| `category` | `求助` | Frage |
| `category` | `功能建议` | Funktionswunsch |
| `category` | `价格` | Preise |
| `category` | `负面反馈` | Kritik |
| `category` | `正面反馈` | Lob |
| `category` | `购买咨询` | Kaufinteresse |
| `category` | `其他` | Sonstiges |

### Signatur prüfen [#signature]

Wenn Sie einen Webhook-Endpunkt speichern, erstellt Hearl dafür einen **Signaturschlüssel**. Sie können ihn auf der Seite Benachrichtigungen anzeigen oder erneuern. Die Anfrage enthält diesen Header:

```txt
X-Hearloop-Signature: sha256=<hex>
```

`<hex>` ist der HMAC-SHA256 des rohen Anfragetexts, mit Ihrem Signaturschlüssel als Schlüssel, als Hex in Kleinbuchstaben. Berechnen Sie ihn über genau die Bytes, die Sie empfangen haben, bevor Sie das JSON parsen, und vergleichen Sie in konstanter Zeit.

```js Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
import express from "express";

const app = express();
const secret = process.env.HEARL_WEBHOOK_SECRET;

app.post("/hearl", express.raw({ type: "application/json" }), (req, res) => {
  const expected = "sha256=" + createHmac("sha256", secret).update(req.body).digest("hex");
  const received = req.get("x-hearloop-signature") ?? "";
  const ok =
    received.length === expected.length &&
    timingSafeEqual(Buffer.from(received), Buffer.from(expected));
  if (!ok) return res.status(401).end();

  const payload = JSON.parse(req.body.toString("utf8"));
  console.log(payload.event, payload.conversations.length);
  res.status(200).end();
});

app.listen(3000);
```

```python Python
import hashlib
import hmac
import json
import os

from flask import Flask, abort, request

app = Flask(__name__)
SECRET = os.environ["HEARL_WEBHOOK_SECRET"].encode()


@app.post("/hearl")
def hearl():
    body = request.get_data()
    expected = "sha256=" + hmac.new(SECRET, body, hashlib.sha256).hexdigest()
    received = request.headers.get("X-Hearloop-Signature", "")
    if not hmac.compare_digest(received, expected):
        abort(401)

    payload = json.loads(body)
    print(payload["event"], len(payload["conversations"]))
    return "", 200
```

Geben Sie einen beliebigen `2xx`-Status zurück, um den Versand zu bestätigen.
