Obtenez des mises à jour automatiques et en temps réel de la part d'airfocus en connectant vos applications préférées à l'aide de nos Webhooks.
Avantages de l'utilisation des webhooks
Les webhooks permettent à airfocus et à d'autres applications de travailler ensemble facilement et en temps réel. Cela signifie que les mises à jour et les notifications se font rapidement, sans qu'il soit nécessaire d'utiliser des applications supplémentaires ou des codes compliqués.
Configuration initiale d'un nouveau webhook
Créez un nouvel espace de travail dans airfocus, ou sélectionnez celui dans lequel vous souhaitez créer un nouveau webhook.
Exigences :
- Permissions "complètes" sur l'espace de travail dans lequel vous souhaitez configurer le webhook.
- Abonnement payant au plan professionnel ou au plan d'entreprise.
- Connaissances techniques pour une configuration correcte.
Vous pouvez ajouter plusieurs webhooks à un espace de travail donné (par exemple, à différents canaux Slack pour différentes audiences de parties prenantes).
Pour ce faire, il vous suffit de vous rendre dans la section Extensions de votre espace de travail, de cliquer sur "Add integrations" et "Connect" sous Webhook.
Ensuite, donnez un nom à votre webhook (facultatif) et sélectionnez les événements pour lesquels les demandes doivent être déclenchées.
Dans les options de la demande, choisissez le format de l'espace réservé et la méthode et collez l'URL de votre webhook dans le champ URL. Vous pouvez également ajouter des en-têtes à vos demandes si nécessaire.
En option, vous pouvez également configurer le corps de votre requête dans le format choisi ci-dessus.
{
"blocs": [
{
"type": "divider"
},
{
"type": "section",
"texte": {
"type": "mrkdwn",
"texte": "{{title|esc}}"
},
"accessoire": {
"type": "bouton",
"texte": {
"type": "plain_text",
"text": "Open in airfocus",
"emoji": true
},
"valeur": "click_me_123",
"url": "{{url}}",
"action_id": "button-action
}
},
{
"type": "section",
"texte": {
"type": "mrkdwn",
"texte": "{{details|esc}}"
}
}
]
}Pour une documentation détaillée des options de personnalisation de vos webhooks, veuillez lire la section suivante.
Cas d'utilisation - recevoir des notifications Slack pour les mises à jour d'airfocus
Pour ce cas d'utilisation, notre objectif est de configurer un webhook qui enverra un message Slack à un canal de notre choix à chaque fois qu'un élément de l'espace de travail pour lequel nous configurons le webhook sera mis à jour.
Pour ce faire, nous devons configurer une application Slack pour générer une URL webhook, puis configurer le reste de l'intégration dans airfocus.
Comment créer une URL webhook vers votre canal Slack :
-
Créez une nouvelle application Slack dans l'espace de travail Slack où vous souhaitez recevoir les notifications airfocus.
- Dans la page Fonctionnalités, activez l'option Activer les webhooks entrants.
- Cliquez sur Ajouter un nouveau Webhook à l'espace de travail.
- Choisissez un canal sur lequel l'application sera publiée, puis cliquez sur Autoriser.
-
Copiez l'URL du webhook et ouvrez l'espace de travail airfocus pour lequel vous souhaitez configurer les mises à jour.
Comment configurer votre webhook dans airfocus pour envoyer des notifications de mise à jour d'événements à Slack :
- Dans le popover des extensions, cliquez sur "Ajouter des intégrations".
- Dans l'aperçu des intégrations, cliquez sur "Connecter" sous l'intégration "Webhooks".
- Donnez un nom à votre webhook (facultatif) et sélectionnez les événements pour lesquels les demandes doivent être déclenchées. → "Statut mis à jour" pour ce cas d'utilisation.
- Dans les options de demande, sélectionnez "Slack markdown" comme format d'espace réservé et "POST" comme méthode. Collez maintenant l'URL du webhook que vous avez copié depuis Slack dans le champ URL.
- Pour recevoir des messages Slack correctement formatés, collez le modèle suivant dans le champ "corps" et appuyez sur "actualiser".
-
{
"blocs": [
{
"type": "divider"
},
{
"type": "section",
"texte": {
"type": "mrkdwn",
"texte": "{{title|esc}}"
},
"accessoire": {
"type": "bouton",
"texte": {
"type": "plain_text",
"text": "Open in airfocus",
"emoji": true
},
"valeur": "click_me_123",
"url": "{{url}}",
"action_id": "button-action
}
},
{
"type": "section",
"texte": {
"type": "mrkdwn",
"texte": "{{details|esc}}"
}
}
]
}
-
- Vous recevrez désormais un message Slack sur le canal que vous avez choisi lorsque le statut d'un élément de l'espace de travail est modifié.
Recevez les mises à jour d'airfocus dans Microsoft Teams
Remarque : la fonction de connecteur webhook de Microsoft Teams sera supprimée à la fin du mois d'avril 2026. Le guide ci-dessous présente les étapes à suivre pour utiliser la fonction Flux de travail comme alternative.
La fonctionnalité Microsoft Teams Workflows vous permet de configurer un webhook qui envoie un message Teams à un canal désigné lorsque des éléments d'un espace de travail airfocus particulier sont mis à jour. Pour ce faire, vous devrez générer une URL webhook sur Microsoft Teams, puis configurer le reste de l'intégration dans airfocus.
Créer une URL webhook dans Microsoft Teams
Pour générer une URL de webhook dans Microsoft Teams, procédez comme suit :
- Connectez-vous à Microsoft Teams.
- Cliquez sur le menu à trois points situé dans la barre de navigation à l'extrême gauche.
- Sélectionnez les flux de travail.
- Dans la barre de recherche, tapez « webhook ».
- Sélectionnez « Publier sur une chaîne » lorsqu'une requête Webhook est reçue.
- Saisissez un nom pour votre flux de travail (par exemple, « "Airfocus updates" »).
- Cliquez sur Suivant.
- Dans la section « Détails », sélectionnez l'équipe et le canal dans lesquels vous souhaitez que les mises à jour s'affichent.
- Cliquez sur « Ajouter un flux de travail ».
- Sur l'écran de confirmation, copiez l'URL POST.
- Voici l'URL du webhook que vous devrez coller dans AirFocus.
- Cliquez sur « Terminé » pour terminer la configuration.
Configurez votre webhook dans airfocus
Pour configurer votre webhook dans airfocus, suivez les étapes suivantes :
- Ouvrez l'espace de travail airfocus pour lequel vous souhaitez envoyer des mises à jour à Microsoft Teams.
- Cliquez sur Extensions dans le coin supérieur droit de l'espace de travail.
- Sélectionnez Ajouter des intégrations.
- Sous "Webhooks", cliquez sur Connecter.
- Saisissez un nom pour le webhook.
- Sous "Événements", sélectionnez le type de mises à jour que vous souhaitez envoyer à Microsoft Teams.
- Sous "Format de l'espace réservé", sélectionnez Markdown.
- Sous "Méthode", sélectionnez POST puis collez l'URL que vous avez généré dans Microsoft Teams sous "URL".
- Sélectionnez + Ajouter un en-tête.
- Sous "Header name", tapez "Content-Type".
- Sous "Header value", tapez "application/json".
- Pour recevoir des messages Microsoft Teams correctement formatés, collez le modèle suivant dans le champ du corps du message.
{ " type": "AdaptiveCard", " $schema": "http://adaptivecards.io/schemas/adaptive-card.json", " version": "1.4", "body": [ { " type": "TextBlock", " texte": "{{title}}", " size": "Moyen", " poids": "Plus gras", " wrap": true }, { " type": "TextBlock", " text": "{{details}}", " wrap": true } ], " actions": [ { " type": "Action.OpenUrl", " title": "Ouvrir dans l'airfocus", " url": "{{url}}" } ] }
- Cliquez sur Mise à jour en bas à droite de la page.
Vous recevrez maintenant des mises à jour sur le canal Microsoft Teams que vous avez configuré dans la première section.
Configuration des requêtes HTTP - documentation technique
Méthode
Il est défini par défaut sur POST, mais peut également être modifié sur GET ou PUT. Les autres méthodes ne sont pas prises en charge.
URL
- ne doit pas être vide
- ne peut commencer que par https:// (les autres schémas ou les schémas vides ne sont pas pris en charge)
- doit avoir un nom de domaine public avec un domaine de premier niveau bien connu (les IP ne sont pas prises en charge)
En-têtes
- L'autorisation est prise en charge
- Content-Type est pris en charge
- les en-têtes personnalisés commençant par x- sont pris en charge
- tout autre en-tête n'est pas pris en charge
Corps
Définit le corps de la requête du webhook.
Il peut contenir n'importe quel texte d'une longueur maximale de 2000 caractères.
Afin de remplir le corps de la requête avec des données d'événement significatives, nous fournissons un certain nombre d'espaces réservés que notre serveur remplace par des données d'événement avant d'envoyer la requête.
Format de l'espace réservé
Spécifie comment les espaces réservés de type RichText doivent être pré-rendus par notre serveur. Par exemple {{title}} placeholder peut contenir une chaîne comme "John updated field Labels on item Fix the button" qui contient un certain formatage de texte riche comme le gras, l'italique, etc, et donc le format placeholder spécifie dans quelle syntaxe spécifique ce formatage doit être transformé. Formats disponibles :
| Nom | Description | Exemple |
| démarque | markdown par défaut | John a mis à jour le champ Étiquettes sur l'article Fixer le bouton |
| HTML | <b>John</b> champ mis à jour <i>Étiquettes</i> sur l'article <b>Fixer le bouton</b> |
|
| Texte | formatage supprimé | John a mis à jour le champ Étiquettes sur l'article Fixer le bouton |
| Slack | spécial Slack mrkdwn | *John* a mis à jour le champ *Etiquettes* sur l'article *Réparez le bouton* |
Placeholders
| Photo | Type | Description | Exemple |
{{type}} |
String | type d'événement | élément mis à jour |
{{title}} |
Chaîne (RichText) | décrit l'action de l'événement | John a mis à jour le champ Étiquettes sur l'article Fixer le bouton |
{{details}} |
Chaîne (RichText) | des détails supplémentaires sur l'événement (par exemple ce qui a été modifié) | Ancienne valeur ⇒ Nouvelle valeur |
{{url}} |
String | URL d'appel à l'action pour chaque événement spécifique (par exemple, un lien vers un espace de travail ou un élément) |
https:// myteam.airfocus.com/w/workspaceId?item=itemId *Remplacez airfocus.com par airfocus.app si vous êtes situé aux Etats-Unis ou dans la région APAC et que votre compte a été créé après septembre 2025. |
{{event}} |
JSON | données JSON complètes sur l'événement en cours | Voir le modèle de charge utile d'événement ci-dessous |
{{title|esc}} |
Chaîne (RichText) | comme {{title}} mais tous les guillemets doubles sont échappés |
transforme la chaîne avec "double" quotes en chaîne avec \"double" quotes |
{{details|esc}} |
Chaîne (RichText) | comme {{details}} mais tous les guillemets doubles sont échappés |
transforme la chaîne avec "double" quotes en chaîne avec \"double" quotes |
Modèles de données
Modèle de charge utile d'événement
Un objet de premier niveau, produit pour chaque événement. Il contient des données sur l'événement ainsi que des données de base intégrées sur toutes les entités liées à cet événement.
| Champ | Type | Obligatoire | Description |
| Événement | Événement | oui | données de base sur l'événement |
| Intégrer | EventEmbed | oui | des données supplémentaires sur l'événement - principalement des noms d'éléments/espaces de travail/champs/etc qui sont liés à cet événement |
| matchedFilter | Filtre d'événements | oui | l'un des filtres d'événements sélectionnés dans les paramètres d'intégration, qui correspond à l'événement en cours |
Modèle d'événement
Données de base sur l'événement
| Champ | Type | Obligatoire | Description |
| id | UUID | oui | ID unique de l'événement |
| Initiateur | Initiateur d'événement | oui | des informations sur la personne à l'origine de l'événement |
| Données | Données d'événement | oui | les données réelles de l'événement. Il est différent pour chaque type d'événement spécifique |
| Créé le | Horodatage | oui | lorsque l'événement s'est produit |
Modèle EventInitiator
Informations sur la personne à l'origine de cet événement. Dans la plupart des cas, l'identifiant de l'utilisateur sera défini. Il est également possible qu'un userId et un integrationId soient définis - par exemple, si un utilisateur a appuyé sur le bouton "synchroniser l'intégration", ce qui a produit l'événement.
| Champ | Type | Obligatoire | Description |
| IDutilisateur | UUID | Non | défini si cet événement a été initié par un utilisateur |
| appId | UUID | Non | défini si cet événement a été initié par une application |
| integrationId | UUID | Non | défini si cet événement a été initié par une intégration |
| eventId | UUID | Non | défini si cet événement a été déclenché par un autre événement |
| requestId | UUID | Non | défini si cet événement a été initié dans le cadre d'une requête HTTP |
Modèle EventEmbed
Données supplémentaires sur l'événement - principalement des noms d'éléments/espaces de travail/champs/etc qui sont liés à cet événement.
| Champ | Type | Obligatoire | Description |
| Équipes | {UUID: TeamInfo} | Non | une carte de hachage des ID d'équipe vers les données d'équipe |
| utilisateurs | {UUID: UserInfo} | Non | une carte de hachage des identifiants d'utilisateurs vers les données d'utilisateurs |
| applications | {UUID: AppInfo} | Non | une carte de hachage des identifiants d'application pour les données d'application |
| Espaces de travail | {UUID: WorkspaceInfo} | Non | une carte de hachage des identifiants de l'espace de travail vers les données de l'espace de travail |
| Intégrations | {UUID: IntegrationInfo} | Non | une carte de hachage des ID d'intégration vers les données d'intégration |
| champs | {UUID: FieldInfo} | Non | une carte de hachage des identifiants des champs aux données des champs |
| statuts | {UUID: StatusInfo} | Non | une carte de hachage des ID d'état vers les données d'état |
| éléments | {UUID: ItemInfo} | Non | une carte de hachage des ID d'éléments vers les données d'éléments |
Modèle TeamInfo
| Champ | Type | Obligatoire | Description |
| nom | String | oui | Nom de l'équipe |
| slug | String | oui | URL de l'équipe |
| baseUrl | String | oui | exemple : https://myteam.airfocus.com *Remplacez airfocus.com par airfocus.app si vous êtes situé aux Etats-Unis ou dans la région APAC et que votre compte a été créé après septembre 2025. |
Modèle UserInfo
| Champ | Type | Obligatoire | Description |
| teamId | UUID | oui | ID de l'équipe à laquelle appartient cet utilisateur |
| Nom complet | String | oui | nom complet de l'utilisateur |
Modèle AppInfo
| Champ | Type | Obligatoire | Description |
| teamId | UUID | oui | ID de l'équipe à laquelle appartient cette application |
| typeId | String | oui | dont : formulaires, insights, miroir, portail, priorisation |
Modèle WorkspaceInfo
| Champ | Type | Obligatoire | Description |
| teamId | UUID | oui | ID de l'équipe à laquelle appartient cet espace de travail |
| nom | String | oui | nom de l'espace de travail |
Modèle IntegrationInfo
| Champ | Type | Obligatoire | Description |
| workspaceId | UUID | oui | ID de l'espace de travail auquel appartient cette intégration |
| typeId | String | oui | un de : asana, azure-devops, clubhouse, github, intercom, jira, planner, trello |
Modèle StatusInfo
| Champ | Type | Obligatoire | Description |
| workspaceId | UUID | oui | ID de l'espace de travail auquel ce statut appartient |
| nom | String | oui | nom du statut |
| catégorie | String | oui | l'un des éléments suivants : brouillon, actif, fermé |
Modèle ItemInfo
| Champ | Type | Obligatoire | Description |
| workspaceId | UUID | oui | ID de l'espace de travail auquel cet élément appartient |
| statusId | UUID | oui | ID de l'état de l'élément |
| nom | String | oui | nom de l'article |
Modèle de données d'événements
EventData est un type d'union - il peut être l'un ou l'autre des types spécifiés :
Élément créé
| Champ | Type | Obligatoire | Description |
| ID de l'article | UUID | oui | identifiant de l'élément créé |
Article mis à jour
| Champ | Type | Obligatoire | Description |
| ID de l'article | UUID | oui | identifiant de l'élément mis à jour |
| Statut | {prev: UUID, next: UUID} | Non | l'ancien et le nouveau numéro d'identification de l'état (s'il a été modifié) |
| couleur | {prev: String, next: String} | Non | l'ancien et le nouveau numéro d'identification de la couleur de l'article (s'il a été modifié) |
| identifiants de l'assigné | {prev: UUID[], next: UUID[]} | Non | l'ancienne et la nouvelle liste des ID d'utilisateurs attribués (en cas de modification) |
| nom | {prev: String, next: String} | Non | l'ancien et le nouveau nom de l'article (s'il a été modifié) |
| Description | {prev: RichText, next: RichText} | Non | l'ancienne et la nouvelle description de l'article (si elle a été modifiée) |
| Description | { UUID : { prev: JSON, next: JSON } } | Non | une carte de hachage des identifiants de champs vers leurs valeurs modifiées chaque valeur est un JSON qui dépend du type de champ |
| archivées | {prev: Boolean, next: Boolean} | Non | l'ancien et le nouveau archivés (s'ils ont été modifiés) |
Donnez votre avis sur cet article
Vous avez des commentaires sur cet article ? Racontez-nous votre expérience ici.