Aller au contenu principal

Appeler votre app de n'importe où

Intermédiaire ⏱ 12 min api · http · sse · intégrations

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.

POST /in → pipeline → GET /events · SSE

Prérequis

  • Une application déployée (le hello du 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.

Ensuite