Webhaken
Webhooks sind eine Erweiterung einer API, aber anstatt dass Ihr Code Daten von unserer API-Plattform anfordert, sendet Vonage die Daten an Sie. Die Daten werden in einer Webanforderung an Ihre Anwendung gesendet. Ein Webhook kann das Ergebnis eines früheren API-Aufrufs sein (diese Art von Webhook wird auch als "Callback" bezeichnet), wie z. B. eine asynchrone Anfrage an die Number Insight API. Webhooks werden auch verwendet, um Ihre Anwendung über Ereignisse wie einen eingehenden Anruf oder eine Nachricht zu benachrichtigen.
Da die Vonage-Server in der Lage sein müssen, Daten über Webhooks an Ihre Anwendung zu senden, müssen Sie einen Webserver einrichten, der die eingehenden HTTP-Anfragen empfängt. Sie müssen auch die URL jedes Webhooks auf Ihrem Webserver angeben, damit Daten an jeden einzelnen gesendet werden können.
Webhooks Arbeitsablauf
Bei Webhooks ist es wichtig, dass die URL, an die die Webhooks gesendet werden sollen, konfiguriert ist. Wenn Daten verfügbar sind, sendet Vonage den Webhook als HTTP-Anfrage an Ihre Anwendung. Ihre Anwendung sollte mit einem HTTP-Erfolgscode antworten, um anzuzeigen, dass sie die Daten erfolgreich empfangen hat.
Der Prozess sieht in etwa so aus:
Webhooks bieten einen bequemen Mechanismus, mit dem Vonage Informationen zu Ereignissen wie einem eingehenden Anruf oder einer Nachricht oder einer Änderung des Anrufstatus an Ihre Anwendung senden kann. Sie können auch verwendet werden, um Folgeinformationen zu senden, wie z. B. eine Zustellungsbestätigung, die einige Zeit nach der Anfrage, auf die sie sich bezieht, zur Verfügung stehen kann.
Welche APIs unterstützen Webhooks?
Informationen, die aus Anfragen an unterstützte Vonage-APIs resultieren, werden in einer HTTP-Anfrage an Ihren Webhook-Endpunkt auf einem HTTP-Server gesendet. Um Ihren Webhook-Endpunkt zu konfigurieren, besuchen Sie bitte die Dashboard von Vonage.
Vonage sendet und empfängt die folgenden Informationen über Webhooks:
| API-Name | Verwendung von Webhooks |
|---|---|
| SMS API | Sendet den Zustellungsstatus Ihrer Nachricht und empfängt eingehende SMS. |
| Voice API | Ruft die Control-Objekte aufrufen die Sie zur Steuerung des Anrufs von einem Webhook-Endpunkt aus verwenden, und sendet Informationen über den Anrufstatus an einen anderen. Ansicht der Webhook-Referenz für weitere Einzelheiten. |
| Number Insight Advanced Async API | Erhält vollständige Informationen über eine Telefonnummer. |
| Client SDK / Conversation API | Echtzeitkommunikationsereignisse (RTC) werden an den RTC-Ereignis-Webhook gesendet. |
| Messages- und Dispatch-APIs | Unterstützt sowohl Webhooks für eingehende Nachrichten als auch für den Nachrichtenstatus. |
| API verifizieren | Erhält Updates zu Ihren Überprüfungsanfragen. |
Webhook-Endpunkte festlegen
Webhooks werden verwendet, um eingehende Nachrichten und Zustellungsquittungen zu übermitteln.
Eingehende Nachrichten
Um den für eingehende Nachrichten verwendeten Webhook einzurichten, gehen Sie zum Ihre Numbers Abschnitt des Vonage Dashboards. Klicken Sie auf "Bearbeiten" für die virtuelle Nummer und legen Sie die Rückruf-URL.
Sie können auch die Vonage CLI um den Endpunkt für eingehende Nachrichten für eine einzelne Nummer festzulegen.
Lieferscheine
Siehe die Lieferscheine Anleitung in der SMS-Dokumentation.
Mit der Number Insight Advanced API können Sie die Ergebnisse einer Nummernabfrage synchron oder asynchron senden lassen.
Setzen Sie die callback Argument an eine Webhook-URL, um die Abfrage asynchron zu erhalten.
Siehe Number Insight Erweiterte Asynchronität für weitere Einzelheiten.
Für Voice API-Anfragen können Webhooks auf Anwendungsebene, beim Erstellen eines Anrufs oder in den Aktionen in einem NCCO festgelegt werden.
Webhooks auf Applikationsebene
Vonage Numbers, die mit Vonage Applications verknüpft sind, verwenden die answer_url um einen NCCO abzurufen, und die event_url um Ihnen Informationen zum Anrufstatus zu senden. Die Website fallback_answer_url kann optional konfiguriert werden. Dies wird verwendet, wenn answer_url offline ist oder einen HTTP-Fehlercode zurückgibt. Es wird auch verwendet, wenn von einem Ereignis erwartet wird, dass es ein NCCO auf event_urlaber event_url offline ist oder einen HTTP-Statuscode zurückgibt.
Sie können diese mit der Funktion Application APIin der Dashboard oder über die Vonage CLI Werkzeug.
Webhooks auf Numbers-Ebene
Sie können für jede Nummer, die Sie kaufen, einen Status-Webhook einrichten. Dieser wird verwendet, um Ihnen Ereignisse zu jeder Nummer zu senden.
Diese können im Abschnitt Numbers des Menüs Dashboardüber die Vonage CLI oder über die Aktualisieren einer Number API-Aufruf (genauer gesagt, der voiceStatusCallback Eigenschaft).
Beim Erstellen eines ausgehenden Anrufs
Wenn einen neuen ausgehenden Anruf tätigenmüssen Sie die Option answer_url im Anruf zu einer URL, die einen NCCO enthält. Die Server von Vonage rufen den NCCO von diesem Endpunkt ab und befolgen dessen Anweisungen bei der Bearbeitung des abgehenden Anrufs.
Antwort URL-Nutzdaten
Die Nutzlast für die answer_url ist:
| Parameter | Beschreibung |
|---|---|
to | Die angerufene Nummer |
from | Die anrufende Nummer |
conversation_uuid | Die UUID des Gespräch |
uuid | Die UUID des Bein |
Beispiel-URL:
/webhooks/answer?to=447700900000&from=447700900001&conversation_uuid=CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab&uuid=aaaaaaaa-bbbb-cccc-dddd-0123456789cd
Das Innere eines NCCO
Innerhalb einer NCCO nehmen die folgenden Aktionstypen eine Webhook-URL auf, die bei der Ausführung der Aktion verwendet wird:
- record.eventUrl - den Webhook-Endpunkt festlegen, der Informationen über die Aufzeichnung eines Anrufs oder einer Konversation empfängt
- conversation.eventUrl - Legen Sie die URL des Webhook-Endpunkts fest, den Vonage asynchron aufruft, wenn sich der Status einer Konversation für diese Konversationsaktion ändert.
- connect.eventUrl - Legen Sie die URL des Webhook-Endpunkts fest, den Vonage asynchron aufruft, wenn sich der Status einer Konversation für diese Connect-Aktion ändert.
- input.eventUrl - die URL zum Webhook-Endpunkt festlegen Vonage sendet die vom Anrufer gedrückten Ziffern
- stream.streamUrl - ein Array von URLs setzen, die auf die Webhook-Endpunkte verweisen, die die Audiodatei für den Anruf oder die Konversation bereitstellen
Webhook-Zeitüberschreitungen
Wenn die Antwort-, Ereignis- oder Fallback-URL für eine bestimmte Zeit nicht erreichbar ist oder die Antwortzeit eine bestimmte Grenze überschreitet, wiederholt Vonage die Anfrage einmal. Die standardmäßigen Verbindungs- und Lesezeitüberschreitungen der Plattform sind wie folgt:
| Webhook-Typ | Zeitüberschreitung beim Verbinden | Socket-Zeitüberschreitung |
|---|---|---|
| Antwort | 1 Sekunde | 5 Sekunden |
| Veranstaltung | 1 Sekunde | 10 Sekunden |
| Fallback | 1 Sekunde | 5 Sekunden |
Diese Standardwerte können durch eine Application API Anruf oder in der Dashboard indem Sie die Anwendung auswählen und dann auf die Schaltfläche bearbeiten und blättern Sie zum Abschnitt Funktionen / Sprache:

Weitere Informationen zu diesen Zeitüberschreitungen finden Sie in der Webhook-Zeitüberschreitungen Abschnitt der Application API Übersicht Dokumentation.
Eine Applikation kann RTC-Ereignisse über den RTC-Webhaken.
Sie legen die URL des RTC-Ereignis-Webhooks fest, wenn Sie die Anwendung erstellen in der Sprache Ihrer Wahl.
Weitere Informationen zur Erstellung einer Anwendung mit RTC-Funktionen finden Sie auch in der Dokumentation der Anwendungs-API.
Verify sendet Ereignis- und Zusammenfassungsrückrufe zur Aktualisierung Ihrer Verifizierungsanfragen. Wenn Sie Silent Authentication oder WhatsApp Codeless als einen Ihrer Authentifizierungskanäle wählen, müssen Sie Rückrufe erhalten, um die Anfrage erfolgreich abzuschließen.
Die URL, an die die Rückrufe gesendet werden, können Sie in Ihrer Applikationseinstellungen auf dem Dashboard für Entwickler. Siehe die API-Referenz zum Beispiel Rückrufe.
Es gibt zwei von den Messages- und Dispatch-APIs unterstützte Webhooks, den Webhook für den Nachrichtenstatus und den Webhook für den Nachrichteneingang. Der Nachrichtenstatus wird über den Webhook "Nachrichtenstatus" empfangen und die Nachricht selbst über den Webhook "Eingehende Nachricht". Das Einrichten dieser Webhooks wird im Detail im Thema Konfigurieren von Webhooks für Messages- und Dispatch-APIs.
Empfangen von Webhooks
Zur Interaktion mit Vonage-Webhooks:
- Erstellen Sie einen Vonage Account.
- Schreiben Sie Skripte, um die von Vonage gesendeten oder angeforderten Informationen zu verarbeiten. Ihr Server muss auf eingehende Nachrichten von Vonage mit einem Erfolgsstatuscode antworten (jeder Statuscode zwischen 200 OK und 205 Reset Content). Alles andere als ein
2xxCode veranlasst die Vonage-Server, die Rückrufzustellung erneut zu versuchen. - Veröffentlichen Sie Ihre Skripte, indem Sie sie auf einem Server bereitstellen (für die lokale Entwicklung versuchen Sie Ngrok).
- Konfigurieren Sie einen Webhook-Endpunkt in der API, die Sie verwenden möchten.
- Führen Sie eine Aktion durch (z. B. das Senden einer SMS), die diesen Webhook auslöst.
Die Informationen über Ihre Anfrage werden dann an Ihren Webhook-Endpunkt gesendet.
Dekodierung signierter Webhooks
Die Webhook-Signierung wird aktiviert durch Standard für die Messages-, Dispatch-, Verify- und Voice APIs. Sie bieten eine Methode, mit der Ihre Anwendung überprüfen kann, ob eine Anfrage von Vonage kommt und die Nutzdaten während der Übertragung nicht manipuliert wurden. Beim Empfang einer Anfrage enthält der eingehende Webhook ein JWT-Token im Autorisierungs-Header, das mit Ihrem Signaturgeheimnis signiert ist.
ANMERKUNG: Bei bereits erstellten Voice Applications ist Signed Webhooks standardmäßig deaktiviert. Um sie manuell zu aktivieren, gehen Sie zu den Anwendungseinstellungen im Dashboard, klicken Sie auf den Link "Erweiterte Funktionen anzeigen" im Abschnitt "Sprachfunktionen" und aktivieren Sie dann die Option "Signierte Webhooks". Signierte Webhooks verwenden prüfen:

Sie können diese Funktion auch für neue Anwendungen deaktivieren (nicht empfohlen, nur in Ausnahmefällen).
Die Validierung signierter Webhooks bietet eine Reihe von Sicherheitsvorteilen, darunter:
- Die Möglichkeit zu verifizieren, dass eine Anfrage von Vonage stammt
- Sicherstellung, dass die Nachricht während der Übermittlung nicht manipuliert wurde
- Verteidigung gegen Abfangen und spätere Wiederholung
Validierung signierter Webhooks
Die Validierung signierter Webhooks besteht aus zwei Teilen:
- Verify der Anfrage
- Verify der Nutzlast (optional)
Verify der Anfrage
Webhooks enthalten ein JWT in der Authorization Kopfzeile. Verwenden Sie den in den JWT-Ansprüchen enthaltenen API-Schlüssel, um festzustellen, welches Ihrer Signaturgeheimnisse zum Signieren der Anforderung verwendet wurde. Das zum Signieren der Anforderung verwendete Geheimnis entspricht dem Signaturgeheimnis, das mit dem api_key in den JWT-Ansprüchen enthalten. Sie können Ihr Signaturgeheimnis auf der Dashboard. Es wird empfohlen, dass die Signaturgeheimnisse nicht weniger als 32 Bit betragen, um ihre Sicherheit zu gewährleisten.
ANMERKUNG: Die signature method hat keinen Einfluss auf die Methode zum Signieren von Messages API-Webhooks, es wird immer SHA-256 verwendet.
Verify, dass die Nutzlast während des Transports nicht manipuliert wurde
Nachdem Sie die Authentizität der Anfrage überprüft haben, können Sie optional überprüfen, dass die Nutzdaten der Anfrage nicht manipuliert wurden, indem Sie einen SHA-256-Hash der Nutzdaten mit dem payload_hash Feld in den JWT-Ansprüchen gefunden. Wenn sie nicht übereinstimmen, wurde die Nutzlast während der Übertragung manipuliert. Sie müssen die Nutzdaten nur verifizieren, wenn Sie HTTP und nicht HTTPS verwenden, da TLS (Transport Layer Security) verhindert, dass MITM-Angriffe.
HINWEIS: In dem seltenen Fall eines internen Fehlers ist es möglich, dass der Rückrufdienst einen nicht signierten Rückruf sendet. Durch die Rückgabe einer HTTP-5xx-Antwort wird ein erneuter Versuch ausgelöst, der dem System Zeit gibt, den Fehler zu beheben und zukünftige Rückrufe zu signieren.
Das folgende Codebeispiel zeigt, wie eine Webhook-Signatur verifiziert wird. Es wird empfohlen, das HTTPS-Protokoll zu verwenden, da es sicherstellt, dass die Anfrage und die Antwort sowohl auf der Client- als auch auf der Serverseite verschlüsselt sind.
| Schlüssel | Beschreibung |
|---|---|
VONAGE_API_KEY | Your Vonage API key (see it on your dashboard). |
VONAGE_SIGNATURE_SECRET | The secret used to sign the request corresponds to the signature secret associated with the |
Voraussetzungen
npm install @vonage/jwt expressSchreiben Sie den Code
Fügen Sie Folgendes zu verify-signed-webhook.js hinzu:
const app = require('express')();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true,
}));
app
.route('/webhooks/inbound-message')
.post(handleInboundMessage);
const handleInboundMessage = (request, response) => {
const token = request.headers.authorization.split(' ')[1];
if (verifySignature(token, VONAGE_API_SIGNATURE_SECRET)) {
console.log('Valid signature');
} else {
console.log('Invalid signature');
}
response.send(200);
};
app.listen(process.env.PORT || 3000);
Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
composer require vonage/clientErstellen Sie eine Datei mit dem Namen verify-signed-webhooks.php und fügen Sie den folgenden Code hinzu:
Schreiben Sie den Code
Fügen Sie Folgendes zu verify-signed-webhooks.php hinzu:
Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Voraussetzungen
pip install vonage python-dotenv fastapi[standard]Schreiben Sie den Code
Fügen Sie Folgendes zu verify-signed-webhooks.py hinzu:
import os
from os.path import dirname, join
from dotenv import load_dotenv
# Load the environment
envpath = join(dirname(__file__), '../.env')
load_dotenv(envpath)
VONAGE_SIGNATURE_SECRET = os.getenv('VONAGE_SIGNATURE_SECRET')
from fastapi import FastAPI, Request
from vonage_jwt.verify_jwt import verify_signature
app = FastAPI()
@app.get('/inbound')
async def verify_signed_webhook(request: Request):
# Need to get the JWT after "Bearer " in the authorization header
auth_header = request.headers["authorization"].split()
token = auth_header[1].strip()
if verify_signature(token, VONAGE_SIGNATURE_SECRET):
print('Valid signature')
else:
print('Invalid signature')Führen Sie Ihren Code aus
Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:
Beispiel für ein signiertes JWT
// header
{
"alg": "HS256",
"typ": "JWT",
}
// payload
{
"iat": 1587494962,
"jti": "c5ba8f24-1a14-4c10-bfdf-3fbe8ce511b5",
"iss": "Vonage",
"payload_hash" : "d6c0e74b5857df20e3b7e51b30c0c2a40ec73a77879b6f074ddc7a2317dd031b",
"api_key": "a1b2c3d",
"application_id": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}
Signierter JWT-Header
Der Inhalt des signierten JWT-Headers wird in der folgenden Tabelle beschrieben:
| Kopfzeile | Wert |
|---|---|
alg | HS256 |
typ | JWT |
Signierte JWT-Nutzdaten
Der Inhalt des signierten JWT-Payloads wird in der folgenden Tabelle beschrieben, wobei die Werte verwendet werden, die in dem zuvor gezeigten signierten JWT-Beispiel enthalten sind:
| Feld | Beispielwert | Beschreibung |
|---|---|---|
iat | 1587494962 | Die Zeit, zu der das JWT ausgestellt wurde. Unix-Zeitstempel in SEKUNDEN. |
jti | c5ba8f24-1a14-4c10-bfdf-3fbe8ce511b5 | Eine eindeutige ID für das JWT. |
iss | Vonage | Der Aussteller des JWT. Dies wird immer "Vonage" sein. |
payload_hash | d6c0e74b5857df20e3b7e51b30c0c2a40ec73a77879b6f074ddc7a2317dd031b | Ein SHA-256-Hash der Nutzdaten der Anfrage. Kann mit der Nutzlast der Anfrage verglichen werden, um sicherzustellen, dass sie während der Übertragung nicht manipuliert wurde. |
api_key | a1b2c3d | Der API-Schlüssel, der mit dem Account verbunden ist, der die ursprüngliche Anfrage gestellt hat. |
application_id | aaaaaaaa-bbbb-cccc-dddd-0123456789ab | (Optional) Die ID der Anwendung, die die ursprüngliche Anfrage gestellt hat, wenn eine Anwendung verwendet wurde. |
Webhooks lokal testen
Um die korrekte Funktion von Webhooks in Ihrer lokal laufenden Anwendung zu testen, müssen Sie einen sicheren Tunnel zwischen Vonage und Ihrer Anwendung erstellen. Dies können Sie mit einer sicheren Tunnelanwendung tun, wie z.B. Ngrok. Siehe die Testen mit Ngrok für weitere Informationen.
Konfigurieren der Firewall
Wenn Sie den eingehenden Datenverkehr (einschließlich Lieferscheine) beschränken, müssen Sie die IP-Adressen von Vonage in die Liste der zugelassenen IP-Adressen Ihrer Firewall aufnehmen. Weitere Informationen hierzu finden Sie in unserer Wissensdatenbank:
- Sprach-IP-Bereiche
- SMS-IP-Bereiche
- Nachrichten und Versand-IP-Bereiche
- Number Insight Erweiterte Async-IP-Bereiche
Tipps zur Fehlersuche bei Webhooks
Klein anfangen - Veröffentlichen Sie das kleinstmögliche Skript, das Sie sich vorstellen können, um zu reagieren, wenn der Webhook empfangen wird, und geben Sie eventuell einige Debug-Informationen aus. So stellen Sie sicher, dass die URL das ist, wofür Sie sie halten, und dass Sie die Ausgaben oder Protokolle der Anwendung sehen können.
Defensiver Code - Vergewissern Sie sich, dass die Datenwerte vorhanden sind und das enthalten, was Sie erwartet haben, bevor Sie sie verwenden. Je nach Ihrer Einrichtung könnten Sie unerwartete Daten erhalten, denken Sie also immer daran.
Sehen Sie sich Beispiele an - Vonage bietet Beispiele, die mit verschiedenen Technologie-Stacks implementiert wurden, um so viele Entwickler wie möglich zu unterstützen. Ein Beispiel für Code, der Webhooks verwendet, finden Sie im Folgenden:
Sie können auch den Abschnitt mit den Codeschnipseln in der Dokumentation für die von Ihnen verwendete API prüfen.
Siehe auch
- Weitere Informationen zu Webhook-Typen und Anwendungsmöglichkeiten finden Sie in der Dokumentation der Applications.