-
Team, Professional, Business, Enterprise und Software UI/UX-Pläne
Kontaktiere Vertrieb für Fragen zur Lizenzierung.
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 Webhook-Ereignisse uploads:create und uploads:processing aus.
Die Webhook-Ereignisse keys:create, keys:update, translations:create und translations:update werden nicht durch Datei-Uploads oder automatisierte Importe über Folgendes ausgelöst:
Es gibt eine 30-tägige Aufbewahrungsfrist für den Webhook-Verlauf.
Webhook-Antwort
Ein Webhook-Endpunkt muss innerhalb von 5 Sekunden nach Erhalt eines Callbacks einen HTTP-Status-Code im Bereich 200–299 zurückgeben. Andere Status-Codes und Zeitüberschreitungen bei Anfragen gelten als Zustellungsfehler. Ein Webhook wird deaktiviert, wenn die Zustellung für mehr als 10 aufeinanderfolgende Ereignisse fehlschlägt. Callbacks werden nicht wiederholt.
Wenn Sie einen Callback erhalten, antworten Sie innerhalb des 5-sekündigen Zeitlimits für Anfragen. Um sicherzustellen, dass Anwendungen nicht versehentlich eine Zeitüberschreitung auslösen, stellen Sie die Verarbeitung zurück, 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-Verifizierungs-Tokens als Geheimnis zusammen mit den in der Anfrage gesendeten Daten generiert wird. Überprüfen Sie den Ursprung der Anfrage, indem Sie den HMAC-Digest des Anfragekörpers berechnen und ihn 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 jedes Webhook-Payloads ist in einer Schemadatei 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 erstellen. |
|
|
Ein Branch wurde zusammengeführt. |
|
|
Ein Kommentar zu einem Phrase-Key wurde hinzugefügt. |
|
|
Ein Individuell-Metadatenfeldwert wurde in mehreren Keys aktualisiert. |
|
|
Ein Individuell-Metadatenfeldwert wurde auf Key-Ebene aktualisiert. |
|
|
Ein Job wurde als Abschließen markiert. |
|
|
Ein Job wird erstellen. |
|
|
Eine Sprache eines Jobs wurde als abgeschlossen markiert. |
|
|
Eine Sprache eines Jobs wurde wieder geöffnet. |
|
|
Eine Sprache eines Jobs wurde geprüft und als Abschließen markiert. |
|
|
Eine Sprache eines Jobs wurde geprüft und wieder geöffnet. |
|
|
Ein Job wurde wieder geöffnet. |
|
|
Ein Job wurde gestartet. |
|
|
Ein Job wird aktualisiert. |
|
|
Mehrere Keys wurden gelöscht. |
|
|
Ein Key wurde erstellt. |
|
|
Ein Key wurde gelöscht. |
|
|
Tags wurden zu mehreren Keys hinzugefügt. |
|
|
Tags wurden zu einem Key hinzugefügt. |
|
|
Ein Key wurde umbenannt oder geändert. |
|
|
Eine neue Sprache wurde in einem Projekt erstellt. |
|
|
Eine Sprache wurde gelöscht. |
|
|
Eine Sprache 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 als ungeprüft markiert. |
|
|
Eine Liste von Übersetzungen wurde als nicht verifiziert markiert. |
|
|
Eine Liste von Übersetzungen wurde überprüft. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde hinzugefügt. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde von einem Dienstleister geliefert. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde ausgeschlossen. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde eingeschlossen. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde geprüft. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde nicht geprüft. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde als nicht verifiziert markiert. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde bearbeitet. |
|
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde überprüft. |
|
|
Eine Sprache-Datei wurde erfolgreich verarbeitet. |
|
|
Eine Sprache-Datei wird verarbeitet. |
Um einen Webhook hinzuzufügen, folgen Sie diesen Schritten:
-
Scrollen Sie auf der -Seite nach unten zu und klicken Sie auf Configure.
Die -Seite öffnet sich.
-
Klicken Sie auf Add webhook.
Das -Fenster öffnet sich.
-
Webhook-Details angeben.
-
Optional .
-
Klicke auf Speichern. Der angegebene Webhook wird der Liste auf der -Seite hinzugefügt.
Ein Webhook kann über das -Menü eines bestimmten Webhook deaktiviert werden.
Um einen Webhook zu testen:
-
Wähle auf der -Seite einen Webhook aus und wähle Test-Benachrichtigung senden aus dem -Menü.
Es wird ein Hinweis angezeigt, der angibt, dass der Test erfolgreich war.
Verwende einen Dienstleistung wie RequestBin, um den Inhalt eines Webhook zu erfassen. RequestBin stellt eine URL bereit, die Anfragedaten zur Überprüfung sammelt.
Jedes Mal, wenn ein Ereignis des angegebenen Typs eintritt, wird eine POST-Anfrage an die angegebene Callback-URL gesendet. Der POST-Payload der Anfrage ist ein JSON-kodiertes Dokument mit relevanten Daten für das Ereignis. Die Attribute event, message und sent_at werden immer enthalten, 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-Anfragen an die Callback-URL enthalten mehrere spezielle Header.
-
X-PhraseApp-Event: Der Typ des Ereignisses, das den Webhook ausgelöst hat. -
X-PhraseApp-Signature: Der HMAC-Hex-Digest des Payloads unter Verwendung des Geheimnisses des Hooks als Key.
Beispiel:
Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123
{
"event": "translations:create",
"message": "Peter translated page.help.title in fr.",
"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": "My translation",
"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"
}
}