-
Équipe, Professionnel, Business, Entreprise et plans UI/UX logiciels
Contactez le service commercial pour toute question relative aux licences.
Les webhooks notifient des services externes tels que des clients de chat 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 imports automatisés via :
Il y a une période de conservation 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 garantir 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 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 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 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 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:create 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é. |
|
|
La valeur d'un champ de métadonnées personnalisé a été mise à jour dans plusieurs clés. |
|
|
La valeur d'un champ de métadonnées personnalisé 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. |
|
|
Le paramètre linguistique d'une tâche a été marqué comme terminé. |
|
|
Le paramètre linguistique d'une tâche a été rouvert. |
|
|
Le paramètre linguistique d'une tâche a été révisé et marqué comme terminé. |
|
|
Le paramètre linguistique d'une tâche a été révisé et rouvert. |
|
|
Un travail a été rouvert. |
|
|
Un travail a été commencé. |
|
|
Un travail est mis à jour. |
|
|
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 de la langue a été changée, renommée ou reconfigurée. |
|
|
Un projet a été changé 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é changé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 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é livrée 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é modifiée. |
|
|
Une traduction d'une clé dans une certaine version linguistique a été vérifiée. |
|
|
Un fichier de paramètre linguistique a été traité avec succès. |
|
|
Un fichier de paramètre linguistique 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.
-
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 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 encodé en JSON contenant des 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 user, project et branch à partir desquels 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 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": "Mon projet Android",
"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": "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}"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}