Intégrations

webhook (Strings)

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

Disponible pour

  • Plans Team, Professional, Business, Enterprise et Software UI/UX

Contactez le service commercial pour toute question relative aux licences.

Les webhook 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 des téléchargements de fichiers ou des importations automatisées via :

Il existe une période de rétention de 30 jours pour l'historique des webhook.

Réponse du webhook

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

Si vous recevez un rappel, répondez dans le délai d'expiration de requête de 5 secondes. Pour garantir que les applications ne déclenchent pas accidentellement un délai d'expiration, différez le traitement jusqu'à ce que la réponse HTTP ait été envoyée.

Intégrité de la requête webhook

Chaque requête 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 ainsi que les données envoyées dans la requête. Vérifier l'origine de la requête en calculant le condensé 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 sur https://app.phrase.com/webhook_schemas/<event_underscored_name>.json où <event_underscored_name> correspond au nom de l'événement webhook avec des traits de soulignement.

Nom de l'événement

Description

branches:create

Une branche a été créer.

branches:merge

Une branche a été fusionnée.

comments:create

Un commenter sur une Phrase clé a été ajouté.

custom_metadata_values:batch_update

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

custom_metadata_values:update

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

jobs:complete

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

jobs:create

Une tâche est créer.

jobs:locale:complete

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

jobs:locale:reopened

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

jobs:locale:review:complete

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

jobs:locale:review:reopen

Un paramètre linguistique 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é démarré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:Créer

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

keys:update

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

locales:create

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

locales:delete

Une version de langue a été supprimée.

locales:update

Une version de langue 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 a été non révisée.

translations:batch_unverify

Une liste de traductions a été non 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 langue a été ajoutée.

translations:deliver

Une traduction d'une clé dans une certaine langue a été fournie par un fournisseur de service linguistique.

translations:exclude

Une traduction d'une clé dans une certaine langue a été Exclure.

translations:include

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

translations:review

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

translations:unreview

Une traduction d'une clé dans une certaine langue a été non révisée.

translations:unverify

Une traduction d'une clé dans une certaine langue a été non vérifiée.

translations:update

Une traduction d'une clé dans une certaine langue a été modifiée.

translations:verify

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

uploads:create

Un paramètre linguistique de fichier a été traité avec succès.

uploads:processing

Un paramètre linguistique de fichier est en cours de traitement.

ajouter un webhook

Pour ajouter un webhook, procédez comme suit : 

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

    La page Webhooks s'ouvre.

  2. Cliquez sur ajouter webhook.

    La fenêtre Ajouter webhook s'ouvre.

  3. Fournissez 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électionner un webhook et Sélectionner Envoyer notification de test depuis le menu Plus.

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

Utiliser 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.

Utiliser les données de 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. La charge utile POST de la requête est un document encodé en JSON contenant 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 utilisateur, projet et branche depuis lesquels le webhook a été déclenché.

En-têtes de réponse

Les requêtes HTTP effectuées vers 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 condensé hexadécimal HMAC de la charge utile, utilisant le secret du webhook comme clé.

Exemple :

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