Seitentyp: docs
Webhooks
Verifizierte Messaging- und Finanzierungs-Webhook-Verträge, Duplikatbehandlung und aktuelles Abgleichsverhalten.
Direkte Antwort
Verifizierte Messaging- und Finanzierungs-Webhook-Verträge, Duplikatbehandlung und aktuelles Abgleichsverhalten.
Seiteninhalt
# Webhooks
TextTree akzeptiert derzeit Anbieterrückrufe ab zwei Limits:
- Ereignisse des Messaging-Anbieters
- Peer für die Finanzierung von Veranstaltungen
Alle Webhook-Routen sind JSON-Endpunkte, die von Phoenix bereitgestellt werden.
## Endpunkte
- signierte Ereignisrückrufe vom Messaging-Anbieter
- signierte eingehende Rückrufe vom Messaging-Anbieter
- `POST /webhooks/peer/events`
Client-Webhooks-Endpunkte werden über die authentifizierte Webhooks-Seite konfiguriert. Die Routen von
Frühere Anbieter-Webhooks sind die eingehenden Anbieter-Rückrufe, die TextTree zum Aktualisieren verwendet
den Status von Nachrichten, Stornierungen (Opt-out) und Finanzierung.
## Client-Ereignistypen
Abonnieren Sie Ihren Endpunkt für die Ereignisse, die Ihre Anwendung benötigt:
- `message.sent`
- `message.delivered`
- `message.failed`
- `message.received`
- `conversation.created`
- `conversation.updated`
- `opt_out.created`
## Form von Kundenveranstaltungen
Client-Webhook-Nutzlasten verwenden einen stabilen Wrapper, sodass Empfänger über `type` und weiterleiten können
Überprüfen Sie das Domänenobjekt unter `data`.
```json
{
„id“: „evt_123“,
„type“: „message.delivered“,
„created_at“: „2026-04-28T14:00:00Z“,
"Daten": {
„Nachricht“: {
„id“: „msg_123“,
„status“: „geliefert“,
„phone_number“: „+15551234567“,
„Segmente“: 1,
„cost_cents“: 1
}
}
}
```
Gibt eine beliebige `2xx`-Antwort zurück, um die Zustellung als erfolgreich zu markieren. Antworten, die nicht `2xx` sind, bleiben erhalten
Debuggen und erneutes Versuchen/Wiederholen über die Konsole.
## Signaturüberprüfung
Die Webhook-Verifizierung ist in der aktuellen Alpha-Phase obligatorisch.
- Anfragen des Messaging-Anbieters müssen den konfigurierten Signatur-Header enthalten
- SMS-Anbieteranfragen müssen die konfigurierten Zeitstempel- und Signatur-Header enthalten
– Peer-Anfragen müssen `x-peer-timestamp` und `x-peer-signature` enthalten
– Signaturwerte verwenden das Format `sha256=<hex>`
Die Signatur wird als HMAC-SHA256 über den Zeitstempel und die kanonisierte Darstellung berechnet
der TextTree-Nutzlast, nicht auf den Rohbytes der Anfrage. TextTree lehnt Zeitstempel/Signatur-Paare ab
fehlend, veraltet, in der Zukunft oder nicht übereinstimmend; Das standardmäßige Frischefenster beträgt fünf Minuten.
## Akzeptanzantwort
Ein verifizierter Webhook, der die Formvalidierung besteht, gibt `202 Accepted` zurück:
```json
{
„id“: „8fca25fd-d7b7-4f58-8bdd-d4ab4ca3ae97“,
„status“: „empfangen“,
„provider“: „messaging_provider“,
„event_type“: „message.delivered“,
„external_id“: „provider_evt_123“,
„Duplikat“: falsch
}
```
Wenn dasselbe `event_type` und `external_id` erneut vom selben Anbieter gesendet werden, gibt TextTree das zurück
vorhandenen Datensatz mit `"duplicate": true` und stellt keine doppelten Downstream-Arbeiten in die Warteschlange.
## Fehlerantworten
- `401` mit `{"error":"invalid_signature"}`, wenn die Überprüfung fehlschlägt
- `422` mit `{"error":"invalid_webhook_payload"}`, wenn die Anfrage signiert ist, aber das fehlt
Erforderliche Felder für die Ereignisidentität
## Wiedergabe von der Konsole
Jede fehlgeschlagene Client-Webhook-Zustellung sollte reproduzierbar sein, nachdem Sie den Endpunkt repariert haben. Der Fluss
Replay behält die ursprüngliche Nutzlast bei und zeichnet einen neuen Zustellungsversuch mit Antwortcode, Latenz und auf
Antwortkörper.
```txt
Webhooks → Endpunkt auswählen → fehlgeschlagene Zustellung öffnen → Webhook erneut abspielen
```
## Messaging-Ereignisbehandlung
Die Nutzdaten des Messaging-Anbieters werden aus Schlüsseln wie `type`, `id`, `message_id` und `metadata` normalisiert.
### Nachrichtenereignisse abgeglichen
- `message.sent`
- `message.delivered`
- `message.failed`
Diese aktualisieren den Downstream-Status der Nachricht und können Anbieterkennungen in die gespeicherte Nachricht einfügen.
### Abgeglichene Opt-out-Ereignisse
- `recipient.opted_out`
- `contact.opted_out`
- `message.opted_out`
- `message.unsubscribed`
In V1 erstellen oder aktualisieren diese Löschungen auf Arbeitsbereichsebene mit Anbietermetadaten. Die
Durch das Löschen von Arbeitsbereichen werden einmalige Übermittlungen über die Benutzeroberfläche, Entwickler-API-Übermittlungen, MCP-Übermittlungen usw. blockiert
Kampagnenlieferungen für diese Telefonnummer.
## Peer-Ereignisbehandlung
Peer-Payloads werden aus Schlüsseln wie `event`, `event_id`, `session_id`, `amount_cents` normalisiert
und `metadata`.
### Abgeglichene Förderveranstaltungen
- `funding.completed`
- `funding.failed`
- `funding.expired`
Abgeschlossene Finanzierungsereignisse aktualisieren den Status der Finanzierungssitzung und erstellen idempotente Gutschriften im Hauptbuch.
Fehlgeschlagene und abgelaufene Finanzierungsereignisse aktualisieren den gespeicherten Status der Finanzierungssitzung zur Überprüfung durch den Betreiber.
## Beispiele
### Messaging-Ereignis zugestellt
```json
{
„type“: „message.delivered“,
„id“: „provider_evt_123“,
„message_id“: „msg_123“
}
```
### Messaging-Opt-out-Ereignis
```json
{
„type“: „recipient.opted_out“,
„id“: „provider_evt_456“,
„phone_number“: „+15551234567“,
„message_id“: „msg_123“
}
```
### Peer-Funding-Veranstaltung
```json
{
„event“: „funding.completed“,
„event_id“: „peer_evt_123“,
„session_id“: „session_123“,
„amount_cents“: 500
}
```
## Betriebshinweise
- Lieferantenereignisse werden vor dem asynchronen Abgleich beibehalten.
– Fehlgeschlagene Ereignisse bleiben in `/app` mit Fehlergründen und Wiedergabesteuerungen sichtbar.
- Die Wiedergabe dient der Wiederherstellung durch den Bediener, nachdem zugrunde liegende Daten- oder Anbieterprobleme behoben wurden.
– Unbekannte, aber gültig signierte Ereignisse können gespeichert und ignoriert werden, bis die Domänenschicht sie unterstützt.