Trigger
Trigger
Triggers define how flows are initiated. Resolute supports manual (API), scheduled (cron), signal, and webhook triggers.
Types
Trigger
type Trigger interface {
Type() TriggerType
Config() TriggerConfig
}Interface implemented by all trigger types.
TriggerType
type TriggerType string
const (
TriggerManual TriggerType = "manual"
TriggerSchedule TriggerType = "schedule"
TriggerSignal TriggerType = "signal"
TriggerWebhook TriggerType = "webhook"
)Identifies the type of trigger.
TriggerConfig
type TriggerConfig struct {
ID string // Identifier for manual triggers
CronSchedule string // Cron expression for scheduled triggers
SignalName string // Temporal signal name for signal triggers
WebhookPath string // HTTP path for webhook triggers
WebhookMethod string // HTTP method for webhook triggers (default: POST)
WebhookSecret string // HMAC secret for webhook signature verification
}Holds trigger-specific configuration.
Trigger Constructors
Manual
func Manual(id string) TriggerCreates a trigger for API-initiated flow execution.
Parameters:
id- Unique identifier for the trigger (used as API endpoint path)
Returns: Trigger for use with TriggeredBy()
Example:
flow := core.NewFlow("my-flow").
TriggeredBy(core.Manual("start-sync")).
Then(myNode).
Build()
// Start via Temporal client:
// client.ExecuteWorkflow(ctx, opts, flow.Execute, input)Schedule
func Schedule(cron string) TriggerCreates a trigger for cron-scheduled flow execution.
Parameters:
cron- Cron expression (minute hour day month weekday)
Returns: Trigger for use with TriggeredBy()
Cron Format:
┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sunday=0)
│ │ │ │ │
* * * * *Common Patterns:
| Expression | Description |
|---|---|
0 * * * * | Every hour |
0 0 * * * | Daily at midnight |
0 2 * * * | Daily at 2 AM |
*/15 * * * * | Every 15 minutes |
0 9 * * 1-5 | Weekdays at 9 AM |
0 0 1 * * | First day of month |
Example:
// Daily sync at 2 AM
flow := core.NewFlow("daily-sync").
TriggeredBy(core.Schedule("0 2 * * *")).
Then(syncNode).
Build()
// Hourly check
flow := core.NewFlow("hourly-check").
TriggeredBy(core.Schedule("0 * * * *")).
Then(checkNode).
Build()Signal
func Signal(name string) TriggerCreates a trigger that starts the flow from a Temporal signal.
Parameters:
name- Temporal signal name to listen for
Returns: Trigger for use with TriggeredBy()
Example:
flow := core.NewFlow("event-handler").
TriggeredBy(core.Signal("new-event")).
Then(handleEventNode).
Build()
// Send signal from another workflow or client:
// client.SignalWorkflow(ctx, workflowID, runID, "new-event", payload)Webhook
func Webhook(path string) *WebhookTriggerCreates a trigger for HTTP webhook-initiated flow execution.
Parameters:
path- HTTP path for the webhook endpoint
Returns: *WebhookTrigger for additional configuration
Example:
flow := core.NewFlow("github-webhook").
TriggeredBy(core.Webhook("/github/push").
WithMethod("POST").
WithSecret(os.Getenv("WEBHOOK_SECRET"))).
Then(handlePushNode).
Build()WebhookTrigger Methods
WithMethod
func (w *WebhookTrigger) WithMethod(method string) *WebhookTriggerSets the HTTP method for the webhook (default: POST).
Parameters:
method- HTTP method (GET, POST, PUT, etc.)
Returns: *WebhookTrigger for method chaining
WithSecret
func (w *WebhookTrigger) WithSecret(secret string) *WebhookTriggerSets the HMAC secret for webhook signature verification.
Parameters:
secret- Secret key for HMAC-SHA256 signature
Returns: *WebhookTrigger for method chaining
Trigger Interface Methods
Type
func (t Trigger) Type() TriggerTypeReturns the trigger type identifier.
Config
func (t Trigger) Config() TriggerConfigReturns the trigger-specific configuration.
Usage Patterns
Manual with Temporal Client
// Define flow
flow := core.NewFlow("process-order").
TriggeredBy(core.Manual("process")).
Then(processNode).
Build()
// Start workflow
c, _ := client.Dial(client.Options{})
we, err := c.ExecuteWorkflow(ctx, client.StartWorkflowOptions{
ID: "order-123",
TaskQueue: "orders",
}, flow.Execute, core.FlowInput{})Scheduled with Worker
// Define scheduled flow
flow := core.NewFlow("nightly-sync").
TriggeredBy(core.Schedule("0 2 * * *")).
Then(syncNode).
Build()
// Run worker (handles scheduling)
err := core.NewWorker().
WithConfig(core.WorkerConfig{TaskQueue: "sync"}).
WithFlow(flow).
Run()Webhook with Server
// Define webhook flow
flow := core.NewFlow("github-events").
TriggeredBy(core.Webhook("/webhooks/github").
WithSecret(os.Getenv("GITHUB_SECRET"))).
Then(handleEventNode).
Build()
// Run worker with webhook server
err := core.NewWorker().
WithConfig(core.WorkerConfig{TaskQueue: "webhooks"}).
WithFlow(flow).
WithWebhookServer(":8080").
Run()
// Webhook available at: POST http://localhost:8080/webhooks/githubSignal for Inter-Workflow Communication
// Parent workflow signals child
parentFlow := core.NewFlow("parent").
TriggeredBy(core.Manual("start")).
Then(prepareNode).
Then(signalChildNode). // Sends signal to child workflow
Then(waitForChildNode).
Build()
// Child workflow triggered by signal
childFlow := core.NewFlow("child").
TriggeredBy(core.Signal("start-processing")).
Then(processNode).
Build()Complete Example
package main
import (
"os"
"github.com/resolute/resolute/core"
)
func main() {
// Manual trigger for on-demand execution
manualFlow := core.NewFlow("manual-sync").
TriggeredBy(core.Manual("sync")).
Then(syncNode).
Build()
// Scheduled trigger for periodic execution
scheduledFlow := core.NewFlow("hourly-check").
TriggeredBy(core.Schedule("0 * * * *")).
Then(checkNode).
Build()
// Webhook trigger for external events
webhookFlow := core.NewFlow("github-events").
TriggeredBy(core.Webhook("/github").
WithMethod("POST").
WithSecret(os.Getenv("GITHUB_SECRET"))).
Then(handleGithubNode).
Build()
// Signal trigger for inter-workflow communication
signalFlow := core.NewFlow("event-processor").
TriggeredBy(core.Signal("process-event")).
Then(processEventNode).
Build()
}See Also
- Flow - Flow builder
- Worker - Worker configuration
- Deployment - Production setup