-
É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;
}
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 |
|---|---|
|
|
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ées a été mise à jour dans plusieurs clés. |
|
|
Une valeur de champ de métadonnées personnalisées a été mise à jour au niveau de la clé. |
|
|
Une tâche a été marquée comme terminée. |
|
|
Une tâche est créée. |
|
|
Un paramètre régional d'une tâche a été marqué comme terminé. |
|
|
Un paramètre régional d'une tâche a été rouvert. |
|
|
Un paramètre régional d'une tâche a été révisé et marqué comme terminé. |
|
|
Un paramètre régional d'une tâche a été révisé et rouvert. |
|
|
Une tâche a été rouverte. |
|
|
Une tâche a été commencée. |
|
|
Une tâche est mise à jour. |
|
|
Plusieurs clés ont été supprimées. |
|
|
Une clé a été créée. |
|
|
Une clé a été supprimée. |
|
|
Des tags ont été ajoutés à plusieurs clés. |
|
|
Des tags ont été ajoutés à 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 n'a pas été révisée. |
|
|
Une liste de traductions n'a pas été 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 fournisseur 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 n'a pas été révisée. |
|
|
Une traduction d'une clé dans une certaine version linguistique n'a pas été vérifiée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été édité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 Configurer.
La page s'ouvre.
-
Cliquez sur Ajouter un webhook.
La fenêtre s'ouvre.
-
Fournir 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 sélectionnez Envoyer une notification de test 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 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"
}
}