Files
wehub-resource-sync a9cd7750f4
CI / unit-test (push) Has been cancelled
CI / detect-changes (push) Has been cancelled
CI / build (push) Has been cancelled
Publish docs via GitHub Pages / Deploy docs (push) Has been cancelled
CI / test-harness (push) Has been cancelled
CI / generate-e2e-matrix (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / build-ui (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled
UI v2 Integration CI / E2E (Integration) (push) Has been cancelled
UI v2 CI / Lint, Format & Test (push) Has been cancelled
UI v2 CI / E2E (Mocked) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:37:56 +08:00

213 lines
5.1 KiB
Markdown

---
description: "Conductor Event Handlers API — create, update, delete, and list event handlers for event-driven workflow orchestration."
---
# Event Handlers API
The Event Handlers API manages event handler definitions — rules that start workflows or complete tasks in response to events from message brokers (Kafka, NATS, SQS, AMQP). All endpoints use the base path `/api/event`.
For details on configuring event handlers, see [Event Handler Configuration](../configuration/eventhandlers.md). For configuring message broker connections, see the [Event Bus Orchestration](../../devguide/how-tos/event-bus.md) guide.
## Endpoints
| Endpoint | Method | Description |
|---|---|---|
| `/event` | `POST` | Create a new event handler |
| `/event` | `PUT` | Update an existing event handler |
| `/event` | `GET` | Get all event handlers |
| `/event/{name}` | `DELETE` | Delete an event handler |
| `/event/{event}` | `GET` | Get event handlers for a specific event |
### Create an Event Handler
```
POST /api/event
```
```shell
curl -X POST 'http://localhost:8080/api/event' \
-H 'Content-Type: application/json' \
-d '{
"name": "order_event_handler",
"event": "kafka:orders_topic:new_order",
"active": true,
"actions": [
{
"action": "start_workflow",
"start_workflow": {
"name": "order_processing",
"version": 1,
"input": {
"orderId": "${eventPayload.orderId}",
"customerId": "${eventPayload.customerId}",
"payload": "${eventPayload}"
}
}
}
]
}'
```
**Response** `200 OK` — no response body.
#### Event Handler Fields
| Field | Description | Required |
|---|---|---|
| `name` | Unique name for the event handler | Yes |
| `event` | Event identifier in format `type:queue:subject` (e.g., `kafka:my_topic:my_event`) | Yes |
| `active` | Whether the handler is active | Yes |
| `actions` | List of actions to execute when the event is received | Yes |
| `condition` | Optional JavaScript expression to filter events | No |
| `evaluatorType` | Expression evaluator type (`javascript` or `graaljs`) | No |
#### Action Types
| Action | Description |
|---|---|
| `start_workflow` | Start a new workflow execution |
| `complete_task` | Complete a pending task (e.g., a WAIT task) |
| `fail_task` | Fail a pending task |
#### Complete Task Action Example
```json
{
"name": "approval_handler",
"event": "kafka:approvals_topic:approved",
"active": true,
"actions": [
{
"action": "complete_task",
"complete_task": {
"workflowId": "${eventPayload.workflowId}",
"taskRefName": "wait_for_approval",
"output": {
"approved": true,
"approvedBy": "${eventPayload.approver}"
}
}
}
]
}
```
### Update an Event Handler
```
PUT /api/event
```
Updates an existing event handler. The request body is the full event handler definition (same format as create).
```shell
curl -X PUT 'http://localhost:8080/api/event' \
-H 'Content-Type: application/json' \
-d '{
"name": "order_event_handler",
"event": "kafka:orders_topic:new_order",
"active": false,
"actions": [
{
"action": "start_workflow",
"start_workflow": {
"name": "order_processing",
"version": 2,
"input": {
"payload": "${eventPayload}"
}
}
}
]
}'
```
**Response** `200 OK` — no response body.
### Get All Event Handlers
```
GET /api/event
```
Returns a list of all registered event handlers.
```shell
curl 'http://localhost:8080/api/event'
```
**Response** `200 OK`
```json
[
{
"name": "order_event_handler",
"event": "kafka:orders_topic:new_order",
"active": true,
"actions": [
{
"action": "start_workflow",
"start_workflow": {
"name": "order_processing",
"version": 1,
"input": {
"payload": "${eventPayload}"
}
}
}
]
}
]
```
### Delete an Event Handler
```
DELETE /api/event/{name}
```
Removes an event handler by name.
```shell
curl -X DELETE 'http://localhost:8080/api/event/order_event_handler'
```
**Response** `200 OK` — no response body.
### Get Event Handlers for an Event
```
GET /api/event/{event}?activeOnly=true
```
Returns event handlers configured for a specific event.
| Parameter | Description | Default |
|---|---|---|
| `event` | Event identifier (e.g., `kafka:orders_topic:new_order`) | — |
| `activeOnly` | Only return active handlers | `true` |
```shell
curl 'http://localhost:8080/api/event/kafka:orders_topic:new_order?activeOnly=true'
```
**Response** `200 OK` — returns a list of matching event handler definitions.
---
## Event Identifier Format
Event identifiers follow the pattern:
```
{type}:{queue/topic}:{subject}
```
| Type | Example | Description |
|---|---|---|
| `kafka` | `kafka:my_topic:my_event` | Apache Kafka topic |
| `nats` | `nats:my_subject:my_event` | NATS subject |
| `sqs` | `sqs:my_queue:my_event` | Amazon SQS queue |
| `amqp_exchange` | `amqp_exchange:my_exchange:my_event` | RabbitMQ exchange |
| `conductor` | `conductor:my_event:my_event` | Conductor internal event queue |