-
Team-, Professional-, Business-, Enterprise- und Software-UI/UX-Pläne
Nimm Kontakt mit Vertrieb für Fragen zur Lizenzierung auf.
Webhooks benachrichtigen externe Dienste wie Chat-Clients oder andere externe APIs über Ereignisse. Ein Webhook kann eine URL festlegen, wenn ein bestimmtes Ereignis eintritt.
Wichtig
Datei-Uploads lösen nur die uploads:create und uploads:processing Webhook-Ereignisse aus.
Die Webhook-Ereignisse keys:create, keys:update, translations:create und translations:update werden nicht durch Datei-Uploads oder automatisierte Importe über:
Es gibt eine Aufbewahrungsfrist von 30 Tagen für die Webhook-Historie.
Webhook-Antwort
Ein Webhook-Endpunkt muss innerhalb von 5 Sekunden nach Erhalt eines Callbacks einen HTTP-Statuscode im Bereich von 200–299 zurückgeben. Andere Statuscodes und Anforderungszeitüberschreitungen gelten als Zustellfehler. Ein Webhook wird deaktiviert, wenn die Zustellung bei mehr als 10 aufeinanderfolgenden Ereignissen fehlschlägt. Callbacks werden nicht wiederholt.
Wenn ein Callback empfangen wird, antworte innerhalb der 5-Sekunden-Anforderungszeitüberschreitung. Um sicherzustellen, dass Anwendungen nicht versehentlich eine Zeitüberschreitung auslösen, verzögere die Verarbeitung, bis die HTTP-Antwort gesendet wurde.
Integrität der Webhook-Anfrage
Jede Webhook-Anfrage enthält einen X-PhraseApp-Signature-Header, der unter Verwendung des Webhook-Überprüfungstokens als Geheimnis zusammen mit den im Request gesendeten Daten generiert wird. Überprüfen Sie den Ursprung der Anfrage, indem Sie den HMAC-Digest des Anfragekörpers berechnen und mit dem Wert im X-PhraseApp-Signature-Header vergleichen.
Beispiele:
Ruby
def verify_webhook(signatureheader)
digest = OpenSSL::Digest::Digest.new('sha256')
hmac = OpenSSL::HMAC.digest(digest, VERIFICATION_TOKEN, request.body)
hmac = Base64.encode64(hmac).strip
hmac == signatureheader
end
PHP
function verify_webhook($signatureheader){
$hmac = hash_hmac('sha256', $requestBody, $verificationToken, true);
$hmac = trim(base64_encode($hash));
return $hmac == $signatureheader;
}
Die Struktur jeder Webhook-Nutzlast ist in einer Schema-Datei definiert, die unter https://app.phrase.com/webhook_schemas/<event_underscored_name>.json verfügbar ist, wobei <event_underscored_name> dem Namen des Webhook-Ereignisses mit Unterstrichen entspricht.
branches:create kann über https://app.phrase.com/webhook_schemas/branches_create.json aufgerufen werden.
|
Ereignisname |
Beschreibung |
|---|---|
|
|
Ein Branch wurde erstellt. |
|
|
Ein Branch wurde zusammengeführt. |
|
|
Ein Kommentar zu einem Übersetzungsschlüssel wurde hinzugefügt. |
|
|
Ein benutzerdefinierter Wert für ein Metadatenfeld wurde in mehreren Schlüsseln aktualisiert. |
|
|
Ein benutzerdefinierter Wert für ein Metadatenfeld wurde auf Schlüsselniveau aktualisiert. |
|
|
Ein Job wurde als abgeschlossen markiert. |
|
|
Ein Job wird erstellt. |
|
|
Ein Locale eines Jobs wurde als abgeschlossen markiert. |
|
|
Ein Locale eines Jobs wurde wiedereröffnet. |
|
|
Ein Locale eines Jobs wurde überprüft und als abgeschlossen markiert. |
|
|
Ein Locale eines Jobs wurde überprüft und wiedereröffnet. |
|
|
Ein Job wurde wiedereröffnet. |
|
|
Ein Job wurde gestartet. |
|
|
Ein Job wird aktualisiert. |
|
|
Mehrere Schlüssel wurden gelöscht. |
|
|
Ein Schlüssel wurde erstellt. |
|
|
Ein Schlüssel wurde gelöscht. |
|
|
Tags wurden mehreren Schlüsseln hinzugefügt. |
|
|
Tags wurden einem Schlüssel hinzugefügt. |
|
|
Ein Schlüssel wurde umbenannt oder geändert. |
|
|
Eine neue Sprachversion wurde in einem Projekt erstellt. |
|
|
Eine Sprachversion wurde gelöscht. |
|
|
Eine Sprachversion wurde geändert, umbenannt oder neu konfiguriert. |
|
|
Ein Projekt wurde geändert oder neu konfiguriert. |
|
|
Ein OTA-Release wurde erstellt. |
|
|
Ein OTA-Release wurde gelöscht. |
|
|
Ein Screenshot wurde erstellt. |
|
|
Ein Screenshot wurde gelöscht. |
|
|
Ein Screenshot wurde geändert oder umbenannt. |
|
|
Eine Liste von Übersetzungen wurde gelöscht. |
|
|
Eine Liste von Übersetzungen wurde hinzugefügt. |
|
|
Eine Liste von Übersetzungen wurde geprüft. |
|
|
Eine Liste von Übersetzungen wurde nicht geprüft. |
|
|
Eine Liste von Übersetzungen wurde nicht verifiziert. |
|
|
Eine Liste von Übersetzungen wurde verifiziert. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde hinzugefügt. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde von einem Sprachdienstleister geliefert. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde ausgeschlossen. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde eingeschlossen. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde überprüft. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde nicht überprüft. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde nicht verifiziert. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde bearbeitet. |
|
|
Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde überprüft. |
|
|
Eine Locale-Datei wurde erfolgreich verarbeitet. |
|
|
Eine Locale-Datei wird verarbeitet. |
Um einen Webhook hinzuzufügen, befolgen Sie diese Schritte:
-
Gehen Sie von der -Seite nach unten zu und klicken Sie auf Konfigurieren.
Die -Seite öffnet sich.
-
Klicken Sie auf Webhook hinzufügen.
Das Fenster öffnet sich.
-
Geben Sie die Webhook-Details an.
-
Optional .
-
Klicken Sie auf Speichern. Der angegebene Webhook wird der Liste auf der -Seite hinzugefügt.
Ein Webhook kann über das -Menü eines bestimmten Webhooks deaktiviert werden.
Um einen Webhook zu testen:
-
Wählen Sie von der -Seite einen Webhook aus und wählen Sie Testbenachrichtigung senden aus dem -Menü.
Eine Benachrichtigung wird angezeigt, die angibt, dass der Test erfolgreich war.
Verwenden Sie einen Dienst wie RequestBin, um die Inhalte eines Webhooks zu erfassen. RequestBin bietet eine URL, die Anforderungsdaten zur Inspektion sammelt.
Bei jedem Auftreten eines Ereignisses des angegebenen Typs wird eine POST-Anforderung an die angegebene Callback-URL gesendet. Die POST-Nutzlast der Anfrage ist ein JSON-kodiertes Dokument mit relevanten Daten für das Ereignis. Die Attribute event, message und sent_at werden immer enthalten sein, zusammen mit zusätzlichen für das Ereignis relevanten Attributen wie User, Projekt und Branch, von dem aus der Webhook ausgelöst wurde.
Antwort-Header
HTTP-Anforderungen, die an die Callback-URL gesendet werden, enthalten mehrere spezielle Header.
-
X-PhraseApp-Event: Der Typ des Ereignisses, das den Webhook ausgelöst hat. -
X-PhraseApp-Signature: Der HMAC-Hex-Digest der Nutzlast, wobei das Geheimnis des Hooks als Schlüssel verwendet wird.
Beispiel:
Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123
{
"event": "translations:create",
"message": "Peter hat page.help.title ins Französische übersetzt.",
"sent_at": "2015-01-29T09:52:53Z"
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"email": "joe@phrase.com",
"position": "Lead Developer",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"project_image_url": "http://assets.phrase.com/project.png",
"account": "account",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"branch": {
"name": "Branch_Name",
},
"translation": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "Meine Übersetzung",
"unverified": false,
"excluded": false,
"plural_suffix": "",
"key": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"plural": false,
},
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE",
},
"placeholders": [
"%{count}"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}