Documentation ¶
Index ¶
- Constants
- func ReadEvent(data json.RawMessage) (flows.Event, error)
- func RegisterType(name string, initFunc func() flows.Event)
- type BaseEvent
- type BroadcastCreatedEvent
- type BroadcastTranslation
- type ContactFieldChangedEvent
- type ContactGroupsChangedEvent
- type ContactLanguageChangedEvent
- type ContactNameChangedEvent
- type ContactRefreshedEvent
- type ContactTimezoneChangedEvent
- type ContactURNsChangedEvent
- type EmailCreatedEvent
- type EnvironmentRefreshedEvent
- type ErrorEvent
- type FlowEnteredEvent
- type IVRCreatedEvent
- type InputLabelsAddedEvent
- type MsgCreatedEvent
- type MsgReceivedEvent
- type MsgWaitEvent
- type ResthookCalledEvent
- type RunExpiredEvent
- type RunResultChangedEvent
- type SessionTriggeredEvent
- type WaitTimedOutEvent
- type WebhookCalledEvent
Constants ¶
const TypeBroadcastCreated string = "broadcast_created"
TypeBroadcastCreated is a constant for outgoing message events
const TypeContactFieldChanged string = "contact_field_changed"
TypeContactFieldChanged is the type of our save to contact event
const TypeContactGroupsChanged string = "contact_groups_changed"
TypeContactGroupsChanged is the type of our groups changed event
const TypeContactLanguageChanged string = "contact_language_changed"
TypeContactLanguageChanged is the type of our contact language changed event
const TypeContactNameChanged string = "contact_name_changed"
TypeContactNameChanged is the type of our contact name changed event
const TypeContactRefreshed string = "contact_refreshed"
TypeContactRefreshed is the type of our contact refreshed event
const TypeContactTimezoneChanged string = "contact_timezone_changed"
TypeContactTimezoneChanged is the type of our contact timezone changed event
const TypeContactURNsChanged string = "contact_urns_changed"
TypeContactURNsChanged is the type of our URNs changed event
const TypeEmailCreated string = "email_created"
TypeEmailCreated is our type for the email event
const TypeEnvironmentRefreshed string = "environment_refreshed"
TypeEnvironmentRefreshed is the type of our environment changed event
const TypeError string = "error"
TypeError is the type of our error events
const TypeFlowEntered string = "flow_entered"
TypeFlowEntered is the type of our flow entered event
const TypeIVRCreated string = "ivr_created"
TypeIVRCreated is a constant for IVR created events
const TypeInputLabelsAdded string = "input_labels_added"
TypeInputLabelsAdded is the type of our add label action
const TypeMsgCreated string = "msg_created"
TypeMsgCreated is a constant for incoming messages
const TypeMsgReceived string = "msg_received"
TypeMsgReceived is a constant for incoming messages
const TypeMsgWait string = "msg_wait"
TypeMsgWait is the type of our msg wait event
const TypeResthookCalled string = "resthook_called"
TypeResthookCalled is the type for our resthook events
const TypeRunExpired string = "run_expired"
TypeRunExpired is the type of our flow expired event
const TypeRunResultChanged string = "run_result_changed"
TypeRunResultChanged is the type of our run result event
const TypeSessionTriggered string = "session_triggered"
TypeSessionTriggered is the type of our session triggered event
const TypeWaitTimedOut string = "wait_timed_out"
TypeWaitTimedOut is the type of our wait timed out events
const TypeWebhookCalled string = "webhook_called"
TypeWebhookCalled is the type for our webhook events
Variables ¶
This section is empty.
Functions ¶
func ReadEvent ¶ added in v0.11.0
func ReadEvent(data json.RawMessage) (flows.Event, error)
ReadEvent reads a single event from the given JSON
func RegisterType ¶ added in v0.11.0
RegisterType registers a new type of router
Types ¶
type BaseEvent ¶
type BaseEvent struct { Type_ string `json:"type" validate:"required"` CreatedOn_ time.Time `json:"created_on" validate:"required"` StepUUID_ flows.StepUUID `json:"step_uuid,omitempty" validate:"omitempty,uuid4"` }
BaseEvent is the base of all event types
func NewBaseEvent ¶ added in v0.4.0
NewBaseEvent creates a new base event
func (*BaseEvent) SetStepUUID ¶ added in v0.11.0
SetStepUUID sets the UUID of the step in the path where this event occured
type BroadcastCreatedEvent ¶ added in v0.5.0
type BroadcastCreatedEvent struct { BaseEvent Translations map[envs.Language]*BroadcastTranslation `json:"translations,min=1" validate:"dive"` BaseLanguage envs.Language `json:"base_language" validate:"required"` URNs []urns.URN `json:"urns,omitempty" validate:"dive,urn"` Contacts []*flows.ContactReference `json:"contacts,omitempty" validate:"dive"` Groups []*assets.GroupReference `json:"groups,omitempty" validate:"dive"` }
BroadcastCreatedEvent events are created when an action wants to send a message to other contacts.
{ "type": "broadcast_created", "created_on": "2006-01-02T15:04:05Z", "translations": { "eng": { "text": "hi, what's up", "attachments": [], "quick_replies": ["All good", "Got 99 problems"] }, "spa": { "text": "Que pasa", "attachments": [], "quick_replies": ["Todo bien", "Tengo 99 problemas"] } }, "base_language": "eng", "urns": ["tel:+12065551212"], "contacts": [{"uuid": "0e06f977-cbb7-475f-9d0b-a0c4aaec7f6a", "name": "Bob"}] }
@event broadcast_created
func NewBroadcastCreatedEvent ¶ added in v0.5.0
func NewBroadcastCreatedEvent(translations map[envs.Language]*BroadcastTranslation, baseLanguage envs.Language, urns []urns.URN, contacts []*flows.ContactReference, groups []*assets.GroupReference) *BroadcastCreatedEvent
NewBroadcastCreatedEvent creates a new outgoing msg event for the given recipients
type BroadcastTranslation ¶ added in v0.6.1
type BroadcastTranslation struct { Text string `json:"text"` Attachments []utils.Attachment `json:"attachments,omitempty"` QuickReplies []string `json:"quick_replies,omitempty"` }
BroadcastTranslation is the broadcast content in a particular language
type ContactFieldChangedEvent ¶ added in v0.5.0
type ContactFieldChangedEvent struct { BaseEvent Field *assets.FieldReference `json:"field" validate:"required"` Value *flows.Value `json:"value"` }
ContactFieldChangedEvent events are created when a custom field value of the contact has been changed. A null values indicates that the field value has been cleared.
{ "type": "contact_field_changed", "created_on": "2006-01-02T15:04:05Z", "field": {"key": "gender", "name": "Gender"}, "value": {"text": "Male"} }
@event contact_field_changed
func NewContactFieldChangedEvent ¶ added in v0.5.0
func NewContactFieldChangedEvent(field *flows.Field, value *flows.Value) *ContactFieldChangedEvent
NewContactFieldChangedEvent returns a new save to contact event
type ContactGroupsChangedEvent ¶ added in v0.18.0
type ContactGroupsChangedEvent struct { BaseEvent GroupsAdded []*assets.GroupReference `json:"groups_added,omitempty" validate:"omitempty,dive"` GroupsRemoved []*assets.GroupReference `json:"groups_removed,omitempty" validate:"omitempty,dive"` }
ContactGroupsChangedEvent events are created when a contact is added or removed to/from one or more groups.
{ "type": "contact_groups_changed", "created_on": "2006-01-02T15:04:05Z", "groups_added": [{"uuid": "b7cf0d83-f1c9-411c-96fd-c511a4cfa86d", "name": "Reporters"}], "groups_removed": [{"uuid": "1e1ce1e1-9288-4504-869e-022d1003c72a", "name": "Customers"}] }
@event contact_groups_changed
func NewContactGroupsChangedEvent ¶ added in v0.18.0
func NewContactGroupsChangedEvent(added []*flows.Group, removed []*flows.Group) *ContactGroupsChangedEvent
NewContactGroupsChangedEvent returns a new contact_groups_changed event
type ContactLanguageChangedEvent ¶ added in v0.10.0
ContactLanguageChangedEvent events are created when the language of the contact has been changed.
{ "type": "contact_language_changed", "created_on": "2006-01-02T15:04:05Z", "language": "eng" }
@event contact_language_changed
func NewContactLanguageChangedEvent ¶ added in v0.10.0
func NewContactLanguageChangedEvent(language envs.Language) *ContactLanguageChangedEvent
NewContactLanguageChangedEvent returns a new contact language changed event
type ContactNameChangedEvent ¶ added in v0.10.0
ContactNameChangedEvent events are created when the name of the contact has been changed.
{ "type": "contact_name_changed", "created_on": "2006-01-02T15:04:05Z", "name": "Bob Smith" }
@event contact_name_changed
func NewContactNameChangedEvent ¶ added in v0.10.0
func NewContactNameChangedEvent(name string) *ContactNameChangedEvent
NewContactNameChangedEvent returns a new contact name changed event
type ContactRefreshedEvent ¶ added in v0.24.0
type ContactRefreshedEvent struct { BaseEvent Contact json.RawMessage `json:"contact"` }
ContactRefreshedEvent events are generated when the resume has a contact with differences to the current session contact.
{ "type": "contact_refreshed", "created_on": "2006-01-02T15:04:05Z", "contact": { "uuid": "0e06f977-cbb7-475f-9d0b-a0c4aaec7f6a", "name": "Bob", "urns": ["tel:+11231234567"] } }
@event contact_refreshed
func NewContactRefreshedEvent ¶ added in v0.24.0
func NewContactRefreshedEvent(contact *flows.Contact) *ContactRefreshedEvent
NewContactRefreshedEvent creates a new contact changed event
type ContactTimezoneChangedEvent ¶ added in v0.10.0
ContactTimezoneChangedEvent events are created when the timezone of the contact has been changed.
{ "type": "contact_timezone_changed", "created_on": "2006-01-02T15:04:05Z", "timezone": "Africa/Kigali" }
@event contact_timezone_changed
func NewContactTimezoneChangedEvent ¶ added in v0.10.0
func NewContactTimezoneChangedEvent(timezone *time.Location) *ContactTimezoneChangedEvent
NewContactTimezoneChangedEvent returns a new contact timezone changed event
type ContactURNsChangedEvent ¶ added in v0.23.0
ContactURNsChangedEvent events are created when a contact's URNs have changed.
{ "type": "contact_urns_changed", "created_on": "2006-01-02T15:04:05Z", "urns": [ "tel:+12345678900", "twitter:bob" ] }
@event contact_urns_changed
func NewContactURNsChangedEvent ¶ added in v0.23.0
func NewContactURNsChangedEvent(urns []urns.URN) *ContactURNsChangedEvent
NewContactURNsChangedEvent returns a new add URN event
type EmailCreatedEvent ¶ added in v0.5.0
type EmailCreatedEvent struct { BaseEvent Addresses []string `json:"addresses" validate:"required,min=1"` Subject string `json:"subject" validate:"required"` Body string `json:"body"` }
EmailCreatedEvent events are created when an action wants to send an email.
{ "type": "email_created", "created_on": "2006-01-02T15:04:05Z", "addresses": ["foo@bar.com"], "subject": "Your activation token", "body": "Your activation token is AAFFKKEE" }
@event email_created
func NewEmailCreatedEvent ¶ added in v0.5.0
func NewEmailCreatedEvent(addresses []string, subject string, body string) *EmailCreatedEvent
NewEmailCreatedEvent returns a new email event with the passed in subject, body and emails
type EnvironmentRefreshedEvent ¶ added in v0.24.0
type EnvironmentRefreshedEvent struct { BaseEvent Environment json.RawMessage `json:"environment"` }
EnvironmentRefreshedEvent events are sent by the caller to tell the engine to update the session environment.
{ "type": "environment_refreshed", "created_on": "2006-01-02T15:04:05Z", "environment": { "date_format": "YYYY-MM-DD", "time_format": "hh:mm", "timezone": "Africa/Kigali", "default_language": "eng", "allowed_languages": ["eng", "fra"] } }
@event environment_refreshed
func NewEnvironmentRefreshedEvent ¶ added in v0.24.0
func NewEnvironmentRefreshedEvent(env envs.Environment) *EnvironmentRefreshedEvent
NewEnvironmentRefreshedEvent creates a new environment changed event
type ErrorEvent ¶
type ErrorEvent struct { BaseEvent Text string `json:"text" validate:"required"` Fatal bool `json:"fatal"` }
ErrorEvent events are created when an error occurs during flow execution.
{ "type": "error", "created_on": "2006-01-02T15:04:05Z", "text": "invalid date format: '12th of October'" }
@event error
func NewErrorEvent ¶
func NewErrorEvent(err error) *ErrorEvent
NewErrorEvent returns a new error event for the passed in error
func NewErrorEventf ¶ added in v0.24.0
func NewErrorEventf(format string, a ...interface{}) *ErrorEvent
NewErrorEventf returns a new error event for the passed in format string and args
func NewFatalErrorEvent ¶ added in v0.4.0
func NewFatalErrorEvent(err error) *ErrorEvent
NewFatalErrorEvent returns a new fatal error event for the passed in error
type FlowEnteredEvent ¶
type FlowEnteredEvent struct { BaseEvent Flow *assets.FlowReference `json:"flow" validate:"required"` ParentRunUUID flows.RunUUID `json:"parent_run_uuid" validate:"omitempty,uuid4"` Terminal bool `json:"terminal"` }
FlowEnteredEvent events are created when an action has entered a sub-flow.
{ "type": "flow_entered", "created_on": "2006-01-02T15:04:05Z", "flow": {"uuid": "0e06f977-cbb7-475f-9d0b-a0c4aaec7f6a", "name": "Registration"}, "parent_run_uuid": "95eb96df-461b-4668-b168-727f8ceb13dd", "terminal": false }
@event flow_entered
func NewFlowEnteredEvent ¶ added in v0.25.0
func NewFlowEnteredEvent(flow *assets.FlowReference, parentRunUUID flows.RunUUID, terminal bool) *FlowEnteredEvent
NewFlowEnteredEvent returns a new flow entered event for the passed in flow and parent run
type IVRCreatedEvent ¶ added in v0.25.0
IVRCreatedEvent events are created when an action wants to send an IVR response to the current contact.
{ "type": "ivr_created", "created_on": "2006-01-02T15:04:05Z", "msg": { "uuid": "2d611e17-fb22-457f-b802-b8f7ec5cda5b", "channel": {"uuid": "61602f3e-f603-4c70-8a8f-c477505bf4bf", "name": "Twilio"}, "urn": "tel:+12065551212", "text": "hi there", "attachments": ["audio:https://s3.amazon.com/mybucket/attachment.m4a"] } }
@event ivr_created
func NewIVRCreatedEvent ¶ added in v0.25.0
func NewIVRCreatedEvent(msg *flows.MsgOut) *IVRCreatedEvent
NewIVRCreatedEvent creates a new IVR created event
type InputLabelsAddedEvent ¶ added in v0.5.0
type InputLabelsAddedEvent struct { BaseEvent InputUUID flows.InputUUID `json:"input_uuid" validate:"required,uuid4"` Labels []*assets.LabelReference `json:"labels" validate:"required,min=1,dive"` }
InputLabelsAddedEvent events are created when an action wants to add labels to the current input.
{ "type": "input_labels_added", "created_on": "2006-01-02T15:04:05Z", "input_uuid": "4aef4050-1895-4c80-999a-70368317a4f5", "labels": [{"uuid": "b7cf0d83-f1c9-411c-96fd-c511a4cfa86d", "name": "Spam"}] }
@event input_labels_added
func NewInputLabelsAddedEvent ¶ added in v0.5.0
func NewInputLabelsAddedEvent(inputUUID flows.InputUUID, labels []*flows.Label) *InputLabelsAddedEvent
NewInputLabelsAddedEvent returns a new labels added event
type MsgCreatedEvent ¶ added in v0.6.0
MsgCreatedEvent events are created when an action wants to send a reply to the current contact.
{ "type": "msg_created", "created_on": "2006-01-02T15:04:05Z", "msg": { "uuid": "2d611e17-fb22-457f-b802-b8f7ec5cda5b", "channel": {"uuid": "61602f3e-f603-4c70-8a8f-c477505bf4bf", "name": "Twilio"}, "urn": "tel:+12065551212", "text": "hi there", "attachments": ["image/jpeg:https://s3.amazon.com/mybucket/attachment.jpg"] } }
@event msg_created
func NewMsgCreatedEvent ¶ added in v0.5.0
func NewMsgCreatedEvent(msg *flows.MsgOut) *MsgCreatedEvent
NewMsgCreatedEvent creates a new outgoing msg event to a single contact
type MsgReceivedEvent ¶
MsgReceivedEvent events are sent by the caller to tell the engine that a message was received from the contact and that it should try to resume the session.
{ "type": "msg_received", "created_on": "2006-01-02T15:04:05Z", "msg": { "uuid": "2d611e17-fb22-457f-b802-b8f7ec5cda5b", "channel": {"uuid": "61602f3e-f603-4c70-8a8f-c477505bf4bf", "name": "Twilio"}, "urn": "tel:+12065551212", "text": "hi there", "attachments": ["https://s3.amazon.com/mybucket/attachment.jpg"] } }
@event msg_received
func NewMsgReceivedEvent ¶
func NewMsgReceivedEvent(msg *flows.MsgIn) *MsgReceivedEvent
NewMsgReceivedEvent creates a new incoming msg event for the passed in channel, URN and text
type MsgWaitEvent ¶
type MsgWaitEvent struct { BaseEvent TimeoutSeconds *int `json:"timeout_seconds,omitempty"` Hint flows.Hint `json:"hint,omitempty"` }
MsgWaitEvent events are created when a flow pauses waiting for a response from a contact. If a timeout is set, then the caller should resume the flow after the number of seconds in the timeout to resume it.
{ "type": "msg_wait", "created_on": "2019-01-02T15:04:05Z", "timeout_seconds": 300, "hint": { "type": "image" } }
@event msg_wait
func NewMsgWait ¶
func NewMsgWait(timeoutSeconds *int, hint flows.Hint) *MsgWaitEvent
NewMsgWait returns a new msg wait with the passed in timeout
func (*MsgWaitEvent) UnmarshalJSON ¶ added in v0.32.1
func (e *MsgWaitEvent) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals this event from the given JSON
type ResthookCalledEvent ¶ added in v0.10.20
type ResthookCalledEvent struct { BaseEvent Resthook string `json:"resthook"` Payload json.RawMessage `json:"payload"` }
ResthookCalledEvent events are created when a resthook is called. The event contains the payload that will be sent to any subscribers of that resthook. Note that this event is created regardless of whether there any subscriberes for that resthook.
{ "type": "resthook_called", "created_on": "2006-01-02T15:04:05Z", "resthook": "success", "payload": { "contact:":{ "name":"Bob" } } }
@event resthook_called
func NewResthookCalledEvent ¶ added in v0.10.20
func NewResthookCalledEvent(resthook string, payload json.RawMessage) *ResthookCalledEvent
NewResthookCalledEvent returns a new webhook called event
type RunExpiredEvent ¶ added in v0.4.0
type RunExpiredEvent struct { BaseEvent RunUUID flows.RunUUID `json:"run_uuid" validate:"required,uuid4"` }
RunExpiredEvent events are sent by the caller to tell the engine that a run has expired.
{ "type": "run_expired", "created_on": "2006-01-02T15:04:05Z", "run_uuid": "0e06f977-cbb7-475f-9d0b-a0c4aaec7f6a" }
@event run_expired
func NewRunExpiredEvent ¶ added in v0.20.0
func NewRunExpiredEvent(run flows.FlowRun) *RunExpiredEvent
NewRunExpiredEvent creates a new run expired event
type RunResultChangedEvent ¶ added in v0.5.0
type RunResultChangedEvent struct { BaseEvent Name string `json:"name" validate:"required"` Value string `json:"value"` Category string `json:"category"` CategoryLocalized string `json:"category_localized,omitempty"` Input string `json:"input,omitempty"` Extra json.RawMessage `json:"extra,omitempty"` }
RunResultChangedEvent events are created when a run result is saved. They contain not only the name, value and category of the result, but also the UUID of the node where the result was generated.
{ "type": "run_result_changed", "created_on": "2006-01-02T15:04:05Z", "name": "Gender", "value": "m", "category": "Male", "category_localized": "Homme", "node_uuid": "b7cf0d83-f1c9-411c-96fd-c511a4cfa86d", "input": "M" }
@event run_result_changed
func NewRunResultChangedEvent ¶ added in v0.5.0
func NewRunResultChangedEvent(result *flows.Result) *RunResultChangedEvent
NewRunResultChangedEvent returns a new save result event for the passed in values
type SessionTriggeredEvent ¶ added in v0.4.0
type SessionTriggeredEvent struct { BaseEvent Flow *assets.FlowReference `json:"flow" validate:"required"` URNs []urns.URN `json:"urns,omitempty" validate:"dive,urn"` Contacts []*flows.ContactReference `json:"contacts,omitempty" validate:"dive"` Groups []*assets.GroupReference `json:"groups,omitempty" validate:"dive"` CreateContact bool `json:"create_contact,omitempty"` RunSummary json.RawMessage `json:"run_summary"` }
SessionTriggeredEvent events are created when an action wants to start other people in a flow.
{ "type": "session_triggered", "created_on": "2006-01-02T15:04:05Z", "flow": {"uuid": "0e06f977-cbb7-475f-9d0b-a0c4aaec7f6a", "name": "Registration"}, "groups": [ {"uuid": "8f8e2cae-3c8d-4dce-9c4b-19514437e427", "name": "New contacts"} ], "run_summary": { "uuid": "b7cf0d83-f1c9-411c-96fd-c511a4cfa86d", "flow": {"uuid": "93c554a1-b90d-4892-b029-a2a87dec9b87", "name": "Other Flow"}, "contact": { "uuid": "c59b0033-e748-4240-9d4c-e85eb6800151", "name": "Bob", "fields": {"state": {"value": "Azuay", "created_on": "2000-01-01T00:00:00.000000000-00:00"}} }, "results": { "age": { "name": "Age", "value": "33", "node_uuid": "cd2be8c4-59bc-453c-8777-dec9a80043b8", "created_on": "2000-01-01T00:00:00.000000000-00:00" } } } }
@event session_triggered
func NewSessionTriggeredEvent ¶ added in v0.4.0
func NewSessionTriggeredEvent(flow *assets.FlowReference, urns []urns.URN, contacts []*flows.ContactReference, groups []*assets.GroupReference, createContact bool, runSummary json.RawMessage) *SessionTriggeredEvent
NewSessionTriggeredEvent returns a new session triggered event
type WaitTimedOutEvent ¶ added in v0.9.10
type WaitTimedOutEvent struct {
BaseEvent
}
WaitTimedOutEvent events are sent by the caller when a wait has timed out - i.e. they are sent instead of the item that the wait was waiting for.
{ "type": "wait_timed_out", "created_on": "2006-01-02T15:04:05Z" }
@event wait_timed_out
func NewWaitTimedOutEvent ¶ added in v0.9.10
func NewWaitTimedOutEvent() *WaitTimedOutEvent
NewWaitTimedOutEvent creates a new wait timed out event
type WebhookCalledEvent ¶
type WebhookCalledEvent struct { BaseEvent URL string `json:"url" validate:"required"` Resthook string `json:"resthook,omitempty"` Status flows.WebhookStatus `json:"status" validate:"required"` StatusCode int `json:"status_code,omitempty"` ElapsedMS int `json:"elapsed_ms"` Request string `json:"request" validate:"required"` Response string `json:"response,omitempty"` BodyIgnored bool `json:"body_ignored,omitempty"` }
WebhookCalledEvent events are created when a webhook is called. The event contains the URL and the status of the response, as well as a full dump of the request and response.
{ "type": "webhook_called", "created_on": "2006-01-02T15:04:05Z", "url": "http://localhost:49998/?cmd=success", "status": "success", "status_code": 200, "elapsed_ms": 123, "request": "GET /?format=json HTTP/1.1", "response": "HTTP/1.1 200 OK\r\n\r\n{\"ip\":\"190.154.48.130\"}" }
@event webhook_called
func NewWebhookCalledEvent ¶ added in v0.4.0
func NewWebhookCalledEvent(webhook *flows.WebhookCall) *WebhookCalledEvent
NewWebhookCalledEvent returns a new webhook called event
Source Files ¶
- base.go
- broadcast_created.go
- contact_field_changed.go
- contact_groups_changed.go
- contact_language_changed.go
- contact_name_changed.go
- contact_refreshed.go
- contact_timezone_changed.go
- contact_urns_changed.go
- email_created.go
- environment_refreshed.go
- error.go
- flow_entered.go
- input_labels_added.go
- ivr_created.go
- msg_created.go
- msg_received.go
- msg_wait.go
- resthook_called.go
- run_expired.go
- run_result_changed.go
- session_triggered.go
- wait_timed_out.go
- webhook_called.go