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

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

Webhook-Ereignisse

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

branches:create

Ein Branch wurde erstellen.

branches:merge

Ein Branch wurde zusammengeführt.

comments:create

Ein Kommentar zu einem Phrase-Key wurde hinzugefügt.

custom_metadata_values:batch_update

Ein Individuell-Metadatenfeldwert wurde in mehreren Keys aktualisiert.

custom_metadata_values:update

Ein Individuell-Metadatenfeldwert wurde auf Key-Ebene aktualisiert.

jobs:complete

Ein Job wurde als Abschließen markiert.

jobs:create

Ein Job wird erstellen.

jobs:locale:complete

Eine Sprache eines Jobs wurde als abgeschlossen markiert.

jobs:locale:reopened

Eine Sprache eines Jobs wurde wieder geöffnet.

jobs:locale:review:complete

Eine Sprache eines Jobs wurde geprüft und als Abschließen markiert.

jobs:locale:review:reopen

Eine Sprache eines Jobs wurde geprüft und wieder geöffnet.

jobs:reopened

Ein Job wurde wieder geöffnet.

jobs:start

Ein Job wurde gestartet.

jobs:update

Ein Job wird aktualisiert.

keys:batch_delete

Mehrere Keys wurden gelöscht.

keys:create

Ein Key wurde erstellt.

keys:delete

Ein Key wurde gelöscht.

keys:tags:batch_create

Tags wurden zu mehreren Keys hinzugefügt.

keys:tags:create

Tags wurden zu einem Key hinzugefügt.

keys:update

Ein Key wurde umbenannt oder geändert.

locales:create

Eine neue Sprache wurde in einem Projekt erstellt.

locales:delete

Eine Sprache wurde gelöscht.

locales:update

Eine Sprache 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 als ungeprüft markiert.

translations:batch_unverify

Eine Liste von Übersetzungen wurde als nicht verifiziert markiert.

translations:batch_verify

Eine Liste von Übersetzungen wurde überprüft.

translations:create

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde hinzugefügt.

translations:deliver

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde von einem Dienstleister geliefert.

translations:exclude

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde ausgeschlossen.

translations:include

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde eingeschlossen.

translations:review

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde geprüft.

translations:unreview

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde nicht geprüft.

translations:unverify

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde als nicht verifiziert markiert.

translations:update

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde bearbeitet.

translations:verify

Eine Übersetzung eines Keys in einer bestimmten Sprache wurde überprüft.

uploads:create

Eine Sprache-Datei wurde erfolgreich verarbeitet.

uploads:processing

Eine Sprache-Datei wird verarbeitet.

Webhook hinzufügen

Um einen Webhook hinzuzufügen, folgen Sie diesen Schritten:

  1. Scrollen Sie auf der Integrations-Seite nach unten zu Webhooks und klicken Sie auf Configure.

    Die Webhooks-Seite öffnet sich.

  2. Klicken Sie auf Add webhook.

    Das Add webhook-Fenster öffnet sich.

  3. Webhook-Details angeben.

  4. Optional Branches einbeziehen.

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

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

Einen Webhook testen

Um einen Webhook zu testen:

  • Wähle auf der Webhooks-Seite einen Webhook aus und wähle Test-Benachrichtigung senden aus dem Mehr-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.

Webhook-Daten verwenden

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"
  }
}
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.