-
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;
}
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.
branches:créer est accessible via https://app.phrase.com/webhook_schemas/branches_create.json
|
Nom de l'événement |
Description |
|---|---|
|
|
Une branche a été créer. |
|
|
Une branche a été fusionnée. |
|
|
Un commenter sur une Phrase clé a été ajouté. |
|
|
Une valeur de champ de métadonnées Personnalisé a été mise à jour dans plusieurs clé. |
|
|
Une valeur de champ de métadonnées Personnalisé a été mise à jour au niveau de la clé. |
|
|
Une tâche a été marquée comme Terminer. |
|
|
Une tâche est créer. |
|
|
Un paramètre linguistique d'une tâche a été marqué comme terminé. |
|
|
Un paramètre linguistique d'une tâche a été rouvert. |
|
|
Un paramètre linguistique d'une tâche a été révisé et marqué comme Terminer. |
|
|
Un paramètre linguistique d'une tâche a été révisé et rouvert. |
|
|
Une tâche a été rouverte. |
|
|
Une tâche a été démarré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 de langue a été créée dans un projet. |
|
|
Une version de langue a été supprimée. |
|
|
Une version de langue 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é non révisée. |
|
|
Une liste de traductions a été non vérifiée. |
|
|
Une liste de traductions a été vérifiée. |
|
|
Une traduction d'une clé dans une certaine langue a été ajoutée. |
|
|
Une traduction d'une clé dans une certaine langue a été fournie par un fournisseur de service linguistique. |
|
|
Une traduction d'une clé dans une certaine langue a été Exclure. |
|
|
Une traduction d'une clé dans une certaine langue a été incluse. |
|
|
Une traduction d'une clé dans une certaine langue a été révisée. |
|
|
Une traduction d'une clé dans une certaine langue a été non révisée. |
|
|
Une traduction d'une clé dans une certaine langue a été non vérifiée. |
|
|
Une traduction d'une clé dans une certaine langue a été modifiée. |
|
|
Une traduction d'une clé dans une certaine langue a été vérifiée. |
|
|
Un paramètre linguistique de fichier a été traité avec succès. |
|
|
Un paramètre linguistique de fichier 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 ajouter 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électionner un webhook et Sélectionner Envoyer notification de test depuis le menu .
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.
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"
}
}