Skip to content

Events Providers Overview

Events Providers enable your digital worker to respond to external triggers beyond messaging. They handle:

  • Webhooks from external services
  • Scheduled tasks (timers/cron)
  • Email notifications
  • SMS notifications
External Service / Timer
▼ HTTP / Schedule
┌─────────────────────────────────────────┐
│ Events Ingress │
│ (Process incoming event) │
└─────────────────────────────────────────┘
▼ Normalized Event
┌─────────────────────────────────────────┐
│ NATS Bus │
│ greentic.events.{env}.{tenant}.{type}│
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Flow Executor │
│ (Process with event flows) │
└─────────────────────────────────────────┘

All events are normalized to a common format:

pub struct Event {
pub id: String,
pub event_type: String,
pub source: String,
pub timestamp: u64,
pub payload: Value,
pub metadata: Option<Value>,
}
greentic.demo.yaml
providers:
events-webhook:
pack: "providers/events/events-webhook.gtpack"
events-timer:
pack: "providers/events/events-timer.gtpack"
flows/on_event.ygtc
name: handle_event
version: "1.0"
nodes:
- id: process
type: script
config:
script: |
// Process the event
let payload = event.payload;
process_payload(payload)
next: respond
triggers:
- type: event
event_type: "order.created"
target: process

Events flow through NATS:

SubjectPurpose
greentic.events.{env}.{tenant}.{type}Event notifications
greentic.events.{env}.{tenant}.{type}.resultEvent processing results
nodes:
- id: on_order
type: branch
config:
conditions:
- expression: "event.event_type == 'order.created'"
next: send_confirmation
- expression: "event.event_type == 'order.shipped'"
next: send_tracking
nodes:
- id: daily_report
type: http
config:
method: GET
url: "https://api.example.com/reports/daily"
next: send_email
triggers:
- type: timer
cron: "0 9 * * *" # 9 AM daily
target: daily_report