Intégrations

Webhooks (Strings)

Le contenu est traduit de l’anglais par Phrase Language AI.

Disponible pour

  • Équipe, Professionnel, Entreprise, Entreprise et Plans UI/UX de logiciel

Contactez le service commercial pour toute question relative aux licences.

Les webhooks notifient les services externes tels que les clients de chat ou d'autres API externes des événements. Un webhook peut définir une URL lorsqu'un événement spécifique se produit.

Important

Les téléchargements de fichiers déclenchent uniquement les événements de webhook uploads:create et uploads:processing.

Les événements de webhook keys:create, keys:update, translations:create et translations:update ne sont pas déclenchés par les téléchargements de fichiers ou les imports automatisés via :

Il y a une période de rétention de 30 jours pour l'historique des webhooks.

Réponse du webhook

Un point de terminaison de webhook doit renvoyer un code de statut HTTP dans la plage 200–299 dans les 5 secondes suivant la réception d'un rappel. D'autres codes de statut et les délais d'attente des requêtes sont considérés comme des échecs de livraison. Un webhook sera désactivé si la livraison échoue pendant plus de 10 événements consécutifs. Les rappels ne sont pas répétés.

Si vous recevez un rappel, répondez dans la période de délai d'attente de 5 secondes. Pour s'assurer que les applications ne déclenchent pas accidentellement un délai d'attente, différer le traitement jusqu'après l'envoi de la réponse HTTP.

Intégrité de la requête du webhook

Chaque requête de webhook inclut un en-tête X-PhraseApp-Signature qui est généré en utilisant le jeton de vérification du webhook comme secret avec les données envoyées dans la requête. Vérifiez l'origine de la requête en calculant le hachage HMAC du corps de la requête et en le comparant à la valeur dans l'en-tête X-PhraseApp-Signature.

Exemples :

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

Événements Webhook

La structure de chaque charge utile de webhook est définie dans un fichier de schéma disponible à https://app.phrase.com/webhook_schemas/<event_underscored_name>.json où <event_underscored_name> correspond au nom de l'événement webhook avec des underscores.

branches:créer peut être accessible via https://app.phrase.com/webhook_schemas/branches_create.json

Nom de l'événement

Description

branches:create

Une branche a été créée.

branches:merge

Une branche a été fusionnée.

comments:create

Un commentaire sur une clé de traduction a été ajouté.

custom_metadata_values:batch_update

Une valeur de champ de métadonnées personnalisées a été mise à jour dans plusieurs clés.

custom_metadata_values:update

Une valeur de champ de métadonnées personnalisées a été mise à jour au niveau de la clé.

jobs:complete

Une tâche a été marquée comme terminée.

jobs:create

Une tâche est créée.

jobs:locale:complete

Un paramètre régional d'une tâche a été marqué comme terminé.

jobs:locale:reopened

Un paramètre régional d'une tâche a été rouvert.

jobs:locale:review:complete

Un paramètre régional d'une tâche a été révisé et marqué comme terminé.

jobs:locale:review:reopen

Un paramètre régional d'une tâche a été révisé et rouvert.

jobs:reopened

Une tâche a été rouverte.

jobs:start

Une tâche a été commencée.

jobs:update

Une tâche est mise à jour.

keys:batch_delete

Plusieurs clés ont été supprimées.

keys:create

Une clé a été créée.

keys:delete

Une clé a été supprimée.

keys:tags:batch_create

Des tags ont été ajoutés à plusieurs clés.

keys:tags:create

Des tags ont été ajoutés à une clé.

keys:update

Une clé a été renommée ou modifiée.

locales:create

Une nouvelle version linguistique a été créée dans un projet.

locales:delete

Une version linguistique a été supprimée.

locales:update

Une version linguistique a été modifiée, renommée ou reconfigurée.

project:update

Un projet a été modifié ou reconfiguré.

releases:create

Une version OTA a été créée.

releases:delete

Une version OTA a été supprimée.

screenshots:create

Une capture d'écran a été créée.

screenshots:delete

Une capture d'écran a été supprimée.

screenshots:update

Une capture d'écran a été modifiée ou renommée.

translations:batch_delete

Une liste de traductions a été supprimée.

translations:batch_include

Une liste de traductions a été incluse.

translations:batch_review

Une liste de traductions a été révisée.

translations:batch_unreview

Une liste de traductions n'a pas été révisée.

translations:batch_unverify

Une liste de traductions n'a pas été vérifiée.

translations:batch_verify

Une liste de traductions a été vérifiée.

translations:create

Une traduction d'une clé dans une certaine version linguistique a été ajoutée.

translations:deliver

Une traduction d'une clé dans une certaine version linguistique a été fournie par un fournisseur de services linguistiques.

translations:exclude

Une traduction d'une clé dans une certaine version linguistique a été exclue.

translations:include

Une traduction d'une clé dans une certaine version linguistique a été incluse.

translations:review

Une traduction d'une clé dans une certaine version linguistique a été révisée.

translations:unreview

Une traduction d'une clé dans une certaine version linguistique n'a pas été révisée.

translations:unverify

Une traduction d'une clé dans une certaine version linguistique n'a pas été vérifiée.

translations:update

Une traduction d'une clé dans une certaine version linguistique a été éditée.

translations:verify

Une traduction d'une clé dans une certaine version linguistique a été vérifiée.

uploads:create

Un fichier de paramètres régionaux a été traité avec succès.

uploads:processing

Un fichier de paramètres régionaux est en cours de traitement.

Ajouter un Webhook

Pour ajouter un webhook, procédez comme suit : 

  1. Depuis la page Intégrations, faites défiler vers le bas jusqu'à Webhooks et cliquez sur Configurer.

    La page Webhooks s'ouvre.

  2. Cliquez sur Ajouter un webhook.

    La fenêtre Ajouter un webhook s'ouvre.

  3. Fournir les détails du webhook.

  4. Optionnellement Inclure les branches.

  5. Cliquez sur Enregistrer. Le webhook spécifié est ajouté à la liste sur la page Webhooks.

Un webhook peut être désactivé depuis le menu Plus d'un webhook spécifique.

Tester un Webhook

Pour tester un webhook :

  • Depuis la page Webhooks, sélectionnez un webhook et sélectionnez Envoyer une notification de test dans le menu Plus.

    Un avis s'affiche indiquant que le test a réussi.

Utilisez un service tel que RequestBin pour capturer le contenu d'un webhook. RequestBin fournit une URL qui collecte les données de requête pour inspection.

Utilisation des données du Webhook

Une requête POST est envoyée à l'URL de rappel spécifiée chaque fois qu'un événement du type spécifié se produit. Le payload POST de la requête est un document JSON encodé avec les données pertinentes pour l'événement. Les attributs event, message et sent_at seront toujours inclus, ainsi que des attributs supplémentaires pertinents pour l'événement tels que le utilisateur, projet et branche à partir duquel le webhook a été déclenché.

En-têtes de réponse

Les requêtes HTTP envoyées à l'URL de rappel contiendront plusieurs en-têtes spéciaux.

  • X-PhraseApp-Event : Le type d'événement qui a déclenché le webhook.

  • X-PhraseApp-Signature : Le hachage hexadécimal HMAC du payload, utilisant le secret du hook comme clé.

Exemple :

Content-Type: application/json
X-PhraseApp-Event: translation:create
X-PhraseApp-Signature: abc123

{
  "event": "translations:create",
  "message": "Peter a traduit page.help.title en fr.",
  "sent_at": "2015-01-29T09:52:53Z"   
  "user": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "username": "joe.doe",
    "name": "Joe Doe",
    "email": "joe@phrase.com",
    "position": "Développeur principal",
    "créé_le": "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  },
  "project": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "name": "Mon projet Android",
    "main_format": "xml",
    "project_image_url": "http://assets.phrase.com/project.png",
    "account": "account",
    "créé_le": "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  },
  "branch": {
  "name": "branch_name"
  },
  "translation": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "contenu" : "Ma traduction",
    "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}"
    ],
    "créé_le": "2015-01-28T09:52:53Z",
    "updated_at": "2015-01-28T09:52:53Z"
  }
}
Cet article vous a-t-il été utile ?

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.