Intégrations

Webhooks (Strings)

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

Disponible pour

  • les forfaits Team, Professional, Business, Enterprise et Software UI/UX

Contactez le service commercial pour toute question relative aux licences.

Les webhooks notifient des services externes tels que des clients de messagerie ou d'autres API externes d'é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 webhooks.

Réponse de webhook

Un point de terminaison de webhook doit renvoyer un code d'état HTTP compris entre 200 et 299 dans les 5 secondes suivant la réception d'un rappel. Les autres codes d'état et les délais d'attente 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'attente de requête de 5 secondes. Pour vous assurer que les applications ne déclenchent pas accidentellement un délai d'attente, reportez le traitement après l'envoi de la réponse HTTP.

Intégrité de la requête de 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 de webhook comme secret ainsi que les données envoyées dans la requête. Vérifiez 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 de 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 de webhook avec des traits de soulignement.

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ée a été mise à jour dans plusieurs clés.

custom_metadata_values:update

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

jobs:complete

Un travail a été marqué comme terminé.

jobs:create

Un travail est créé.

jobs:locale:complete

Une locale d'un travail a été marquée comme terminée.

jobs:locale:reopened

Une locale d'un travail a été rouverte.

jobs:locale:review:complete

Une locale d'un travail a été révisée et marquée comme terminée.

jobs:locale:review:reopen

Une locale d'un travail a été révisée et rouverte.

jobs:reopened

Un travail a été rouvert.

jobs:start

Un travail a été démarré.

jobs:update

Un travail est mis à jour.

key_links:create

Une clé enfant est liée à une clé parente.

key_links:delete

Une clé enfant a été dissociée d'une clé parente.

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 étiquettes ont été ajoutées à plusieurs clés.

keys:tags:create

Des étiquettes ont été ajoutées à 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 a été marquée comme non révisée.

translations:batch_unverify

Une liste de traductions a été marquée comme 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 version linguistique a été ajoutée.

translations:deliver

Une traduction d'une clé dans une certaine version linguistique a été fournie par un prestataire 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 a été marquée comme non révisée.

translations:unverify

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

translations:update

Une traduction d'une clé dans une certaine version linguistique a été modifié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 Integrations, faites défiler vers le bas jusqu'à Webhooks et cliquez sur Configure.

    La page Webhooks s'ouvre.

  2. Cliquez sur Add webhook.

    La fenêtre Add webhook s'ouvre.

  3. Fournissez les détails du webhook.

  4. Optionnellement Include 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 More d'un webhook spécifique.

Tester un webhook

Pour tester un webhook :

  • Depuis la page Webhooks, sélectionnez un webhook et choisissez Send Test-Notification dans le menu More.

    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 de webhook

Une requête POST est envoyée à l'URL de rappel spécifiée chaque fois qu'un événement du type indiqué 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 user, project et branch à partir desquels 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 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.",
  "envoyé_le" : "2015-01-29T09:52:53Z"   
  "user": {
    "id": "abcd1234cdef1234abcd1234cdef1234",
    "username": "joe.doe",
    "name": "Joe Doe",
    "email": "joe@phrase.com",
    Position "Lead Developer",
    Date de création "2015-01-28T09:52:53Z",
    Mise à jour  "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",
    Date de création "2015-01-28T09:52:53Z",
    Mise à jour  "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}"
    
    Date de création "2015-01-28T09:52:53Z",
    Mise à jour  "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.