Integrationen

Webhooks (Strings)

Inhalte werden von Phrase Language AI maschinell aus dem Englischen übersetzt.

Verfügbar für

  • 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;
}

Webhook-Ereignisse

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

branches:create

Ein Branch wurde erstellt.

branches:merge

Ein Branch wurde zusammengeführt.

comments:create

Ein Kommentar zu einem Übersetzungsschlüssel wurde hinzugefügt.

custom_metadata_values:batch_update

Ein benutzerdefinierter Wert für ein Metadatenfeld wurde in mehreren Schlüsseln aktualisiert.

custom_metadata_values:update

Ein benutzerdefinierter Wert für ein Metadatenfeld wurde auf Schlüsselniveau aktualisiert.

jobs:complete

Ein Job wurde als abgeschlossen markiert.

jobs:create

Ein Job wird erstellt.

jobs:locale:complete

Ein Locale eines Jobs wurde als abgeschlossen markiert.

jobs:locale:reopened

Ein Locale eines Jobs wurde wiedereröffnet.

jobs:locale:review:complete

Ein Locale eines Jobs wurde überprüft und als abgeschlossen markiert.

jobs:locale:review:reopen

Ein Locale eines Jobs wurde überprüft und wiedereröffnet.

jobs:reopened

Ein Job wurde wiedereröffnet.

jobs:start

Ein Job wurde gestartet.

jobs:update

Ein Job wird aktualisiert.

keys:batch_delete

Mehrere Schlüssel wurden gelöscht.

keys:create

Ein Schlüssel wurde erstellt.

keys:delete

Ein Schlüssel wurde gelöscht.

keys:tags:batch_create

Tags wurden mehreren Schlüsseln hinzugefügt.

keys:tags:create

Tags wurden einem Schlüssel hinzugefügt.

keys:update

Ein Schlüssel wurde umbenannt oder geändert.

locales:create

Eine neue Sprachversion wurde in einem Projekt erstellt.

locales:delete

Eine Sprachversion wurde gelöscht.

locales:update

Eine Sprachversion wurde geändert, umbenannt oder neu konfiguriert.

project:update

Ein Projekt wurde geändert oder neu konfiguriert.

releases:create

Ein OTA-Release wurde erstellt.

releases:delete

Ein OTA-Release wurde gelöscht.

screenshots:create

Ein Screenshot wurde erstellt.

screenshots:delete

Ein Screenshot wurde gelöscht.

screenshots:update

Ein Screenshot wurde geändert oder umbenannt.

translations:batch_delete

Eine Liste von Übersetzungen wurde gelöscht.

translations:batch_include

Eine Liste von Übersetzungen wurde hinzugefügt.

translations:batch_review

Eine Liste von Übersetzungen wurde geprüft.

translations:batch_unreview

Eine Liste von Übersetzungen wurde nicht geprüft.

translations:batch_unverify

Eine Liste von Übersetzungen wurde nicht verifiziert.

translations:batch_verify

Eine Liste von Übersetzungen wurde verifiziert.

translations:create

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde hinzugefügt.

translations:deliver

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde von einem Sprachdienstleister geliefert.

translations:exclude

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde ausgeschlossen.

translations:include

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde eingeschlossen.

translations:review

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde überprüft.

translations:unreview

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde nicht überprüft.

translations:unverify

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde nicht verifiziert.

translations:update

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde bearbeitet.

translations:verify

Eine Übersetzung eines Schlüssels in einer bestimmten Sprachversion wurde überprüft.

uploads:create

Eine Locale-Datei wurde erfolgreich verarbeitet.

uploads:processing

Eine Locale-Datei wird verarbeitet.

Fügen Sie einen Webhook hinzu

Um einen Webhook hinzuzufügen, befolgen Sie diese Schritte:

  1. Gehen Sie von der Integrationen-Seite nach unten zu Webhooks und klicken Sie auf Konfigurieren.

    Die Webhooks-Seite öffnet sich.

  2. Klicken Sie auf Webhook hinzufügen.

    Das Fenster Webhook hinzufügen öffnet sich.

  3. Geben Sie die Webhook-Details an.

  4. Optional Zweige einbeziehen.

  5. Klicken Sie auf Speichern. Der angegebene Webhook wird der Liste auf der Webhooks-Seite hinzugefügt.

Ein Webhook kann über das Mehr-Menü eines bestimmten Webhooks deaktiviert werden.

Testen Sie einen Webhook

Um einen Webhook zu testen:

  • Wählen Sie von der Webhooks-Seite einen Webhook aus und wählen Sie Testbenachrichtigung senden aus dem Mehr-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.

Webhook-Daten verwenden

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"
  }
}
War dieser Beitrag hilfreich?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.