honcho/src/webhooks
Rajat Ahuja d7bdcc3bc1
feat: codify queue columns (#254)
* feat: codify queue columns

* fix: batch with python loop control

* fix: cleanup merge

* fix: down revision

* fix: batch delete in migration

* feat: only run alembic tests for changed migration / test (#264)

* feat: only run alembic tests for changed migration / test
* fix: Run full test suite if alembic testing infra changes

* feat: codify times_derived + level on Document (#260)

* feat: codify times_derived + level on Document
* fix: CR comment

* fix: CodeRabbit comments

* fix: batch migrations; move types; remove fields from payload

* fix: rm duplicate table args

* fix: add messages.id FK
2025-11-07 13:22:24 -05:00
..
README.md feat: webhooks (#168) 2025-08-06 17:52:35 -04:00
events.py feat: codify queue columns (#254) 2025-11-07 13:22:24 -05:00
webhook_delivery.py feat: codify queue columns (#254) 2025-11-07 13:22:24 -05:00

README.md

Webhooks

Webhooks are used to deliver event notifications to user-configured URLs.

System Architecture

The webhooks system consists of several key components:

  • API Endpoints (routers/webhooks.py): Provides endpoints for users to create, list, delete, and test their webhook subscriptions.
  • Event Publishing (webhooks/events.py): Defines the event types and allows us to publish new events to the processing queue.
  • Webhook Delivery (webhooks/webhook_delivery.py): Contains the logic for sending the webhook to the subscriber's URL.

Event Flow

  1. An event is triggered within the application by calling publish_webhook_event with a defined event payload.
  2. This function creates a QueueItem and stores it in the database.
  3. The QueueManager background process polls the database for new items.
  4. When a new event is found, it is passed to the deliver_webhook function.
  5. deliver_webhook fetches all subscriber URLs for the event's workspace, signs the payload with a secret key, and sends an HTTP POST request to each URL.

Note that the webhooks require the deriver process to be running to facilitate the delivery of the webhook.