Webhooks
Webhooks ermöglichen TeamMessage die Kommunikation mit Ihren Systemen über HTTP-Callbacks. Nutzen Sie sie für Nachrichtenzustellung, Status-Benachrichtigungen oder zum Weiterleiten von Nachrichten an externe Dienste.
Übersicht
TeamMessage unterstützt drei Arten von Webhooks:
- Webhook als Zustellkanal – Nachrichten von einer Teamliste an Ihren Server weiterleiten
- Sendeberichte – Benachrichtigungen erhalten, wenn SMS zugestellt werden oder fehlschlagen
- Eingehende SMS – Empfangene SMS an Ihren Server weiterleiten (sms2mail exklusiv)
Webhook als Zustellkanal
Fügen Sie eine Webhook-URL als Teammitglied hinzu, um alle Nachrichten an die Teamliste an Ihren Server weiterzuleiten. Dies ist nützlich für die Integration von TeamMessage mit Ticketing-Systemen, Chat-Plattformen oder eigenen Anwendungen.
Konfiguration
- Öffnen Sie Ihre Teamliste → Mitglieder
- Klicken Sie auf 'Mitglied hinzufügen'
- Wählen Sie den Kanal: Webhook
- Geben Sie Ihre Webhook-URL ein (muss mit https:// beginnen)
Anfrageformat
Wenn eine Nachricht an die Teamliste gesendet wird, sendet TeamMessage eine POST-Anfrage mit JSON:
Beispielanfrage
POST /your-webhook-endpoint HTTP/1.1
Host: your-server.example.com
Content-Type: application/json; charset=UTF-8
{
"from": "+491711234567",
"message": "This is the message text",
"account_id": 123,
"account_email": "alerts@tmsg.de",
"recipient_name": "My Webhook",
"timestamp": 1736694000
}
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
from |
string | Absenderkennung (Telefonnummer oder Alias) |
message |
string | Der Nachrichtentext (UTF-8 kodiert) |
account_id |
integer | Interne ID der Teamliste |
account_email |
string | E-Mail-Adresse der Teamliste |
recipient_name |
string | Name des Webhook-Mitglieds |
timestamp |
integer | Unix-Zeitstempel (Sekunden seit 1970-01-01) |
Erwartete Antwort
Ihr Endpunkt sollte einen HTTP-2xx-Statuscode (200, 201, 204) zurückgeben, um Erfolg anzuzeigen:
Erfolgsantwort
HTTP/1.1 200 OK
Content-Type: application/json
{"status": "received"}
Hinweis
Der Antwort-Body wird nicht ausgewertet. Nur der HTTP-Statuscode zählt. Timeout beträgt 10 Sekunden.
Anwendungsfälle
- Alarme an Slack, Microsoft Teams oder Discord weiterleiten
- Tickets in Jira, Zendesk oder anderen Ticketing-Systemen erstellen
- Protokollieren Sie Nachrichten in einer Datenbank oder einem Monitoring-SystemNachrichten in einer Datenbank oder einem Monitoring-System protokollieren
- Automatisierte Workflows auslösen (Zapier, n8n, Make)
Sendeberichte
Zustellbericht-Webhooks benachrichtigen Sie über den endgültigen Status gesendeter Nachrichten.
Konfiguration
Konfigurieren Sie eine Webhook-URL in Ihren Teamlisten-Einstellungen:
- Gehen Sie zu den Teamlisten-Einstellungen
- Geben Sie Ihre Webhook-URL im Feld 'Zustellbericht-URL' ein
- Die URL muss ein gültiger HTTP- oder HTTPS-Endpunkt sein
Tipp
Verwenden Sie HTTPS für sichere Übertragung. Ihr Webhook-Endpunkt sollte innerhalb von 10 Sekunden antworten.
Anfrageformat
TeamMessage sendet eine POST-Anfrage mit formular-kodierten Daten:
Beispielanfrage
POST /your-webhook-endpoint HTTP/1.1
Host: your-server.example.com
Content-Type: application/x-www-form-urlencoded
status=0&reason=0&to=004917012345678&msgid=123456×tamp=2025-01-08T14:30:00Z
Parameter
| Parameter | Beschreibung | Beispiel |
|---|---|---|
status |
Zustellstatuscode (0 = zugestellt) | 0 |
reason |
Reason-Code mit zusätzlichen Details | 0 |
to |
Empfänger-Telefonnummer | 004917012345678 |
msgid |
Eindeutige Nachrichten-ID | 123456 |
timestamp |
Zeit der Zustellung oder des Fehlers (ISO 8601) | 2025-01-08T14:30:00Z |
Siehe Statuscodes für eine vollständige Liste der Status- und Reason-Codes.
Wiederholungsverhalten
Wenn Ihr Endpunkt nicht mit HTTP 200 antwortet:
- TeamMessage versucht es nach 5 Minuten erneut
- Bis zu 3 Wiederholungsversuche
- Nach allen fehlgeschlagenen Wiederholungsversuchen wird die Benachrichtigung verworfenNach dem Fehlschlagen aller Versuche wird die Benachrichtigung verworfen
Webhooks für eingehende SMS
Mit sms2mail exklusiv können eingehende SMS-Nachrichten an eine Webhook-URL statt per E-Mail weitergeleitet werden.
Anfrageformat
Eingehende SMS-Webhook
POST /your-webhook-endpoint HTTP/1.1
Host: your-server.example.com
Content-Type: application/json
{
"from": "+491711234567",
"to": "+491512345678",
"message": "The SMS text content",
"timestamp": "2025-01-08T14:30:00Z"
}
Parameter
| Parameter | Beschreibung |
|---|---|
from |
Telefonnummer des Absenders (E.164-Format) |
to |
Ihre dedizierte Telefonnummer |
message |
Der SMS-Textinhalt |
timestamp |
Wann die SMS empfangen wurde (ISO 8601) |
Implementierungsbeispiele
Python (Flask)
from flask import Flask, request, jsonify
app = Flask(__name__)
# Webhook as delivery channel
@app.route('/webhook/message', methods=['POST'])
def message_webhook():
data = request.get_json()
print(f"Message from {data['from']}: {data['message']}")
print(f"Team list: {data['account_email']}")
# Process the message (create ticket, forward to Slack, etc.)
# ...
return jsonify({"status": "received"}), 200
# Delivery report webhook
@app.route('/webhook/delivery', methods=['POST'])
def delivery_webhook():
status = request.form.get('status')
reason = request.form.get('reason')
to = request.form.get('to')
msgid = request.form.get('msgid')
if status == '0':
print(f"Message {msgid} delivered to {to}")
else:
print(f"Message {msgid} failed: status={status}, reason={reason}")
return 'OK', 200
PHP
<?php
// webhook_message.php - Webhook as delivery channel
$data = json_decode(file_get_contents('php://input'), true);
$from = $data['from'] ?? '';
$message = $data['message'] ?? '';
$account = $data['account_email'] ?? '';
error_log("Message from {$from} to {$account}: {$message}");
// Process the message
// ...
http_response_code(200);
echo json_encode(['status' => 'received']);
// ---
// webhook_delivery.php - Delivery reports
$status = $_POST['status'] ?? '';
$reason = $_POST['reason'] ?? '';
$to = $_POST['to'] ?? '';
$msgid = $_POST['msgid'] ?? '';
if ($status === '0') {
error_log("Message {$msgid} delivered to {$to}");
} else {
error_log("Message {$msgid} failed: status={$status}, reason={$reason}");
}
http_response_code(200);
echo "OK";
Node.js (Express)
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// Webhook as delivery channel
app.post('/webhook/message', (req, res) => {
const { from, message, account_email, timestamp } = req.body;
console.log(`Message from ${from}: ${message}`);
console.log(`Team list: ${account_email}`);
// Process the message
// ...
res.status(200).json({ status: 'received' });
});
// Delivery report webhook
app.post('/webhook/delivery', (req, res) => {
const { status, reason, to, msgid } = req.body;
if (status === '0') {
console.log(`Message ${msgid} delivered to ${to}`);
} else {
console.log(`Message ${msgid} failed: status=${status}, reason=${reason}`);
}
res.send('OK');
});
app.listen(3000);
Webhooks testen
Vor dem Produktiveinsatz: Testen Sie Ihre Webhook-Implementierung:
- Nutzen Sie ein Test-Tool wie webhook.site oder ngrok, um eingehende Anfragen zu inspizierenVerwenden Sie ein Test-Tool wie webhook.site oder ngrok, um eingehende Anfragen zu prüfen
- Fügen Sie die Test-URL als Webhook-Mitglied in Ihrer Teamliste hinzu
- Testnachricht an die Teamliste senden
- Überprüfen Sie, ob die Anfrage auf webhook.site mit korrektem JSON-Payload erscheint
Tipp
Während der Entwicklung verwenden Sie ngrok oder ein ähnliches Tool, um Ihren lokalen Server für Webhook-Tests im Internet erreichbar zu machen.
Sicherheitshinweise
- Verwenden Sie HTTPS, um Webhook-Daten bei der Übertragung zu verschlüsselnVerwenden Sie HTTPS, um Webhook-Daten während der Übertragung zu verschlüsseln
- Fügen Sie Ihrer Webhook-URL einen geheimen Token zur Validierung hinzu (z.B.
https://example.com/webhook?token=secret123) - Verarbeiten Sie Webhooks asynchron, um Timeout-Probleme zu vermeiden
- Protokollieren Sie alle Webhook-Anfragen für Debugging und Audit
- Implementieren Sie Idempotenz – behandeln Sie doppelte Benachrichtigungen elegantImplementieren Sie Idempotenz – behandeln Sie doppelte Benachrichtigungen korrekt
Hinweis
Webhook-URLs werden von TeamMessage-Servern aufgerufen. Bei Firewall-Einschränkungen kontaktieren Sie den Support für unsere IP-Bereiche.