Aller au contenu

Intégrations

L’API Apprise est conçue comme une passerelle de notification unique. Au lieu de construire des webhooks directs vers Discord, Slack, l’email et les SMS dans chaque projet, envoyez vos messages à l’API Apprise et laissez-la router le message.

Si vous voulez…Approche recommandée
Éviter d’intégrer Python dans votre applicationAPI Apprise (Avec État ou Sans État)
Garder la logique de notification hors de votre codebaseAPI Apprise (Avec État)
Utiliser Apprise comme simple passerelle HTTPAPI Apprise (Sans État)
Envoyer des notifications depuis des scripts ou la CLICLI Apprise ou Bibliothèque Python Apprise
Intégration API sans état

Si vous ne pouvez pas, ou ne souhaitez pas, stocker la configuration côté serveur, vous pouvez également utiliser des notifications sans état :

  • POST /notify

Les appels sans état incluent les URL de destination Apprise dans la charge utile de la requête.

Consultez la référence des endpoints pour la liste complète des chemins pris en charge.

Intégration API avec état

Pour les notifications avec état, recommandées pour la plupart des intégrations, vous appelez un seul point de terminaison :

  • POST /notify/{KEY}

Ici, {KEY} identifie une configuration enregistrée sur le serveur. Votre code client reste petit et stable, tandis que l’instance API Apprise conserve les véritables URL de notification ainsi que les éventuels tags de routage.

Étant donné :

  • scheme : http ou https
  • host : le nom d’hôte ou l’adresse IP de l’API Apprise
  • port : optionnel ; omettez-le pour 80 (http) ou 443 (https)
  • key : votre clé de configuration enregistrée

Construisez ensuite :

  • BASE = {scheme}://{host}
  • Si un port non standard est utilisé : BASE = {scheme}://{host}:{port}
  • NOTIFY = {BASE}/notify/{key}

L’API Apprise accepte dans de nombreux cas les payloads de formulaire comme les payloads JSON. Pour les intégrations, JSON est généralement le plus simple.

  • body (requis) : contenu du message
  • title (optionnel) : titre du message
  • type (optionnel) : info (par défaut), success, warning ou failure
  • format (optionnel) : text (par défaut), markdown ou html
  • tag (optionnel, avec état) : route vers un sous-ensemble d’URL enregistrées

Les tags n’ont de sens que pour les appels avec état (/notify/{KEY}), parce que le serveur sait déjà quelles URL appartiennent à cette clé.

La valeur tag suit les règles suivantes :

Valeur de tagServices sélectionnés
"TagA"Possède TagA
"TagA TagB"Possède TagA ET TagB
"TagA+TagB"Possède TagA ET TagB
"TagA&TagB"Possède TagA ET TagB
"TagA,TagB"Possède TagA OU TagB
"TagA|TagB"Possède TagA OU TagB
"TagA TagC,TagB"Possède (TagA ET TagC) OU TagB

Pour envoyer des pièces jointes, utilisez multipart/form-data.

  • Utilisez attach comme nom de champ recommandé. Les alias attachment et attachments sont également acceptés.
  • La valeur de la pièce jointe peut être :
    • un upload de fichier local
    • une URL distante que l’API Apprise télécharge puis transmet
  • Les charges utiles JSON qui fournissent des pièces jointes distantes ou encodées utilisent les mêmes noms de champ.

Si un outil tiers ne peut pas modifier ses clés JSON, l’API Apprise peut faire correspondre les champs entrants aux champs Apprise via des paramètres de requête préfixés par deux-points (:).

SyntaxeEffet
?:incoming_field=apprise_fieldRenomme incoming_field en apprise_field
?:incoming_field=Supprime incoming_field du payload
?:apprise_field=literal valueForce apprise_field à une chaîne fixe

Exemple de champ plat — un outil envoie {"message": "Server Down"} :

POST /notify/{KEY}?:message=body

Lorsqu’un payload tiers contient des objets imbriqués ou des tableaux, l’API Apprise peut les parcourir en utilisant la notation pointée pour les objets imbriqués et la notation entre crochets pour les éléments de tableau. Les deux syntaxes peuvent être librement mélangées du côté source de la règle de mapping.

Parcourez des dictionnaires imbriqués avec un chemin séparé par des points :

Fenêtre de terminal
# Payload from a monitoring tool:
# {
# "event": { "title": "CPU spike", "state": "critical" },
# "component": { "name": "web-server-01" }
# }
curl -X POST \
-H "Content-Type: application/json" \
-d '{"event":{"title":"CPU spike","state":"critical"},"component":{"name":"web-server-01"}}' \
"http://apprise-host/notify/{KEY}?:event.title=title&:event.state=type&:component.name=body"

Ajoutez [N] après un nom de clé pour déréférencer l’index N de ce tableau. Les indices multiples et le mélange avec la notation pointée sont tous deux pris en charge :

Fenêtre de terminal
# Payload from a forum / project-management webhook (e.g. Scoold / Para):
# {
# "items": [ { "title": "New post", "objectURI": "https://example.com/q/1234" } ]
# }
curl -g -X POST \
-H "Content-Type: application/json" \
-d '{"items":[{"title":"New post","objectURI":"https://example.com/q/1234"}]}' \
"http://apprise-host/notify/{KEY}?:items[0].title=title&:items[0].objectURI=body"

Référence rapide des expressions de chemin :

Clé sourceRésout vers
items[0]Premier élément de items
items[0].objectURIPropriété .objectURI du premier élément
matrix[0][1]Ligne 0, colonne 1 d’un tableau 2D
a[0][1][2].value[3]Tableaux imbriqués -> dict -> tableau (6 traversées)

Règles et limites :

  • Seul le côté source de la règle peut utiliser la notation de chemin ; la cible doit être un champ Apprise plat (title, body, type, format, tag, etc.).
  • N dans [N] doit être un entier positif ou nul. Les formes key[abc] (non entière) et key[0 / key0] (crochet non apparié) sont rejetées immédiatement.
  • Si une étape est introuvable — clé absente, index hors limites ou nœud non liste à une étape d’index — le serveur renvoie 400 et journalise un WARNING. Aucune notification n’est envoyée, ce qui rend les règles mal configurées visibles dans les logs au lieu d’être ignorées silencieusement.
  • La profondeur correspond au nombre total d’opérations de traversée : chaque recherche de clé dans un dict et chaque déréférencement d’index dans un tableau comptent pour une étape. items[0].objectURI = 3 étapes ; a[0][1][2].value[3] = 6 étapes.
  • La profondeur maximale de traversée est de 5 par défaut. Définissez APPRISE_WEBHOOK_MAPPING_MAX_DEPTH pour modifier cette limite.
Fenêtre de terminal
# Notification minimale sans état avec curl
curl -X POST "http://localhost:8000/notify" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"discord://TOKEN/CHANNEL",
"mailto://user:pass@example.com"
],
"body": "Hello from Apprise (stateless)"
}'
Fenêtre de terminal
# Notification sans état avec une pièce jointe
curl -X POST "http://localhost:8000/notify" \
-F 'payload={
"urls": ["discord://TOKEN/CHANNEL"],
"title": "Build Complete",
"body": "Artifact attached"
};type=application/json' \
-F "attach=@/path/to/file.txt"
Questions ou commentaires ?

Documentation

Vous avez repéré une faute de frappe ou une erreur ? Signalez-la ou proposez une correction .

Problèmes Techniques

Vous rencontrez un problème avec le code ? Ouvrez un ticket sur GitHub :

Conçu avec amour depuis le Canada