Appeler votre app de n'importe où
Vous allez construire : votre application pilotée entièrement de l'extérieur — curl en entrée, curl en sortie, flux en direct — la surface contre laquelle tout système externe (n8n, LangGraph, Temporal, votre propre code) s'intègre.
Prérequis
- Une application déployée (le
hellodu démarrage rapide convient). - Son serveur Pulse joignable (mode dev :
http://localhost:9090).
1 · Obtenez un token
TOKEN=$(curl -s -X POST http://localhost:9090/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"you","password":"…"}' | jq -r .accessToken)
Le JWT revient sous accessToken. En mode dev, la CLI s'est déjà connectée — cette étape est pour les clients externes.
2 · Envoyez un événement en HTTP simple
curl -X POST "http://localhost:9090/api/pulse/x/hello/in" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"severity":"error","msg":"from curl"}'
C'est exactement ce que fait pulse events send — et ce que fait un nœud HTTP n8n, une activité Temporal ou n'importe quel backend. Une seule surface, tous les clients.
3 · Relisez les résultats
curl -H "Authorization: Bearer $TOKEN" \
"http://localhost:9090/api/pulse/events/hello.triage.out"
4 · Ou diffusez-les en direct (SSE)
curl -N -H "Authorization: Bearer $TOKEN" \
"http://localhost:9090/api/pulse/events/stream"
Les server-sent events poussent chaque résultat dès qu'il arrive — le flux en direct natif du navigateur, sans dépendance.
5 · Niveau supérieur : requête/réponse corrélée
# pulse-py
from pulse import Client
async with Client(...).duplex() as d:
reply = await d.send({"severity": "error", "msg": "hi"})
Le duplex() du SDK Python donne une sémantique requête/réponse sur WebSocket — envoyez un événement, attendez son résultat corrélé. Des SDKs existent pour JS, Python, Rust, Go et Java.
Ce qui vient de se passer
Chaque application déployée expose la même surface à quatre verbes : POST en entrée, GET en sortie, flux SSE, WebSocket duplex. Cette uniformité est la raison pour laquelle 14 bridges d'orchestrateurs (n8n, Node-RED, LangGraph, Temporal, Prefect, Dagster, Kestra, Airflow, Camel, Spring Integration, Step Functions, GCP Workflows, Azure Durable Functions & Logic Apps) ne sont chacun qu'un client léger — le côté Pulse ne change jamais.
Dépannage
401 Unauthorized
Le token est manquant ou expiré — relancez l'appel de login. Notez que le champ est accessToken, pas token.
La connexion SSE se ferme immédiatement
Gardez -N (pas de bufferisation) sur curl, et confirmez que vous visez bien le point d'accès /stream avec un en-tête Bearer valide.