-
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;
}
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.
branches:create est accessible via https://app.phrase.com/webhook_schemas/branches_create.json
|
Nom de l'événement |
Description |
|---|---|
|
|
Une branche a été créée. |
|
|
Une branche a été fusionnée. |
|
|
Un commentaire sur une clé de traduction a été ajouté. |
|
|
Une valeur de champ de métadonnées personnalisée a été mise à jour dans plusieurs clés. |
|
|
Une valeur de champ de métadonnées personnalisée a été mise à jour au niveau de la clé. |
|
|
Un travail a été marqué comme terminé. |
|
|
Un travail est créé. |
|
|
Une locale d'un travail a été marquée comme terminée. |
|
|
Une locale d'un travail a été rouverte. |
|
|
Une locale d'un travail a été révisée et marquée comme terminée. |
|
|
Une locale d'un travail a été révisée et rouverte. |
|
|
Un travail a été rouvert. |
|
|
Un travail a été démarré. |
|
|
Un travail est mis à jour. |
|
|
Une clé enfant est liée à une clé parente. |
|
|
Une clé enfant a été dissociée d'une clé parente. |
|
|
Plusieurs clés ont été supprimées. |
|
|
Une clé a été créée. |
|
|
Une clé a été supprimée. |
|
|
Des étiquettes ont été ajoutées à plusieurs clés. |
|
|
Des étiquettes ont été ajoutées à une clé. |
|
|
Une clé a été renommée ou modifiée. |
|
|
Une nouvelle version linguistique a été créée dans un projet. |
|
|
Une version linguistique a été supprimée. |
|
|
Une version linguistique a été modifiée, renommée ou reconfigurée. |
|
|
Un projet a été modifié ou reconfiguré. |
|
|
Une version OTA a été créée. |
|
|
Une version OTA a été supprimée. |
|
|
Une capture d'écran a été créée. |
|
|
Une capture d'écran a été supprimée. |
|
|
Une capture d'écran a été modifiée ou renommée. |
|
|
Une liste de traductions a été supprimée. |
|
|
Une liste de traductions a été incluse. |
|
|
Une liste de traductions a été révisée. |
|
|
Une liste de traductions a été marquée comme non révisée. |
|
|
Une liste de traductions a été marquée comme non vérifiée. |
|
|
Une liste de traductions a été vérifiée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été ajoutée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été fournie par un prestataire de services linguistiques. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été exclue. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été incluse. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été révisée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été marquée comme non révisée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été marquée comme non vérifiée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été modifiée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été vérifiée. |
|
|
Un fichier de paramètres régionaux a été traité avec succès. |
|
|
Un fichier de paramètres régionaux est en cours de traitement. |
Pour ajouter un webhook, procédez comme suit :
-
Depuis la page , faites défiler vers le bas jusqu'à et cliquez sur Configure.
La page s'ouvre.
-
Cliquez sur Add webhook.
La fenêtre s'ouvre.
-
Fournissez les détails du webhook.
-
Optionnellement .
-
Cliquez sur Enregistrer. Le webhook spécifié est ajouté à la liste sur la page .
Un webhook peut être désactivé depuis le menu d'un webhook spécifique.
Pour tester un webhook :
-
Depuis la page , sélectionnez un webhook et choisissez Send Test-Notification dans le menu .
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.
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"
}
}