-
Team-, Professional-, Business- und Enterprise-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 setzen, wenn ein bestimmtes Ereignis stattfindet.
Wichtig
Datei uploads lösen nur die uploads:erstellen
und uploads:Verarbeitung
von Webhook Ereignissen aus.
keys:erstellen
, keys:aktualisieren
, übersetzungen:erstellen
und übersetzen:aktualisieren
Webhook Ereignisse werden nicht durch Datei uploads oder automatisierte Importe ausgelöst über:
Für den Verlauf des Webhooks gibt es eine 30-tägige Aufbewahrungsfrist.
Webhook Antwort
Ein Webhook Endpunkt muss innerhalb von 5 Sekunden nach Erhalt eines Rückrufs einen HTTP Status Code im Bereich 200–299 zurückgeben. Andere Status Codes und Anforderungs-Timeouts gelten als Lieferfehler. Ein Webhook wird deaktiviert, wenn die Lieferung für mehr als 10 aufeinanderfolgende Ereignisse fehlschlägt. Rückrufe werden nicht wiederholt.
Wenn du einen Rückruf erhältst, antworte innerhalb des 5-Sekunden-Anforderungszeitraums. Um sicherzustellen, dass Anwendungen nicht versehentlich ein Timeout auslösen, verschieben Sie die Verarbeitung bis nach dem Senden der HTTP-Antwort.
Integrität Webhook anfordern
Jede Webhook Anfrage umfasst einen X-PhraseApp-Signature
Header, der unter Verwendung des Webhook Verifizierungs Tokens als Geheimnis zusammen mit den in der Anfrage gesendeten Daten erzeugt wird. Überprüfe den Ursprung der Anfrage, indem du den HMAC-Verdau des Anfragetextes berechnest und mit dem Wert im X-PhraseApp-Signature
-Header vergleichst.
Beispiele:
Rubin
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; }
Eventname |
Beschreibung |
---|---|
|
Ein Branch wurde erstellt. |
|
Ein Branch wurde zusammengeführt. |
|
Ein Translation Key wurde kommentiert. |
|
Ein benutzerdefinierter Metadatenfeldwert wurde in mehreren Keys aktualisiert. |
|
Ein benutzerdefinierter Metadatenfeldwert wurde auf Key Ebene aktualisiert. |
|
Ein Job wurde als Abgeschlossen markiert. |
|
Es wird ein Job erstellt. |
|
Eine Sprache eines Jobs wurde als abgeschlossen markiert. |
|
Eine Sprache eines Jobs wurde wieder geöffnet. |
|
Die Sprache eines Jobs wurde geprüft und als Abgeschlossen 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. |
|
Es wurde ein Key erstellt. |
|
Ein Key wurde gelöscht. |
|
Ein Key wurde umbenannt oder geändert. |
|
In einem Projekt wurde eine neue Sprache 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. |
|
Es wurde ein Screenshot erstellt. |
|
Ein Screenshot wurde gelöscht. |
|
Ein Screenshot wurde geändert oder umbenannt. |
|
Eine Liste der Übersetzungen wurde gelöscht. |
|
Eine Liste geprüfter Übersetzungen wurde erstellt. |
|
Eine Liste der Übersetzungen wurde ungeprüft. |
|
Eine Liste der Übersetzungen wurde nicht verifiziert. |
|
Eine Liste der Übersetzungen wurde überprüft. |
|
Es wurde eine Übersetzung eines Key in einer bestimmten Sprache hinzugefügt. |
|
Eine Übersetzung eines Keys in einer bestimmten Sprache wurde von einem Dienstleister für Sprachen geliefert. |
|
Eine Übersetzung eines Key in einer bestimmten Sprache wurde geprüft. |
|
Eine Übersetzung eines Key in einer bestimmten Sprache wurde nicht geprüft. |
|
Eine Übersetzung eines Key in einer bestimmten Sprache wurde nicht verifiziert verifiziert. |
|
Eine Übersetzung eines Key in einer bestimmten Sprache wurde bearbeitet. |
|
Eine Übersetzung eines Key in einer bestimmten Sprache wurde überprüft. |
|
Eine Sprachdatei wurde erfolgreich verarbeitet. |
|
Eine Sprachdatei wird gerade bearbeitet. |
Um einen Webhook hinzufügen, folge diesen Schritten:
-
Scrolle auf der Seite Konfigurieren.
nach unten zu und klicke aufDie Seite
öffnet sich. -
Klicke auf Webhook hinzufügen.
Das Fenster
öffnet sich. -
Gib Webhook Details an.
-
Optional
. -
Klicke auf Speichern. Der angegebene Webhook wird der Liste auf der
-Seite hinzugefügt.
Ein Webhook kann über das Menü
eines bestimmten Webhooks deaktiviert werden.So testen Sie einen Webhook:
-
Wähle auf der Seite Test-Benachrichtigung senden.
einen Webhook aus und wähle im MenüEs wird ein Hinweis angezeigt, dass der Test erfolgreich war.
Verwende eine Dienstleistung wie RequestBin, um den Inhalt eines Webhooks zu erfassen. RequestBin stellt eine URL bereit, die Anforderungsdaten zur Prüfung sammelt.
Jedes Mal, wenn ein Ereignis des angegebenen Typs auftritt, wird eine POST-Anfrage an die angegebene Callback-URL gesendet. Die POST Payload der Anfrage ist ein JSON-kodiertes Dokument mit relevanten Daten für das Ereignis. Die Attribute events
und message
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
: Die Art des Ereignisses, das den Webhook ausgelöst hat. -
X-PhraseApp-Signatur
: Der HMAC Hex-Verdau der Nutzlast, wobei das Geheimnis des Hooks als Key verwendet wird.
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.", "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" } }