Documentation ¶
Index ¶
- Variables
- func GroupReferenceValidation(sl validator.StructLevel)
- func LabelReferenceValidation(sl validator.StructLevel)
- func ValidateURN(fl validator.FieldLevel) bool
- func ValidateURNScheme(fl validator.FieldLevel) bool
- type Action
- type ActionUUID
- type Attachment
- type Channel
- type ChannelReference
- type ChannelType
- type ChannelUUID
- type Contact
- func (c *Contact) AddURN(urn urns.URN)
- func (c *Contact) Channel() Channel
- func (c *Contact) Clone() *Contact
- func (c *Contact) Default() interface{}
- func (c *Contact) Fields() FieldValues
- func (c *Contact) Groups() *GroupList
- func (c *Contact) Language() utils.Language
- func (c *Contact) MarshalJSON() ([]byte, error)
- func (c *Contact) Name() string
- func (c *Contact) Reference() *ContactReference
- func (c *Contact) Resolve(key string) interface{}
- func (c *Contact) ResolveQueryKey(key string) []interface{}
- func (c *Contact) SetChannel(channel Channel)
- func (c *Contact) SetLanguage(lang utils.Language)
- func (c *Contact) SetName(name string)
- func (c *Contact) SetTimezone(tz *time.Location)
- func (c *Contact) String() string
- func (c *Contact) Timezone() *time.Location
- func (c *Contact) URNs() URNList
- func (c *Contact) UUID() ContactUUID
- func (c *Contact) UpdateDynamicGroups(session Session) error
- type ContactReference
- type ContactUUID
- type Event
- type EventLog
- type Exit
- type ExitUUID
- type Field
- type FieldKey
- type FieldReference
- type FieldSet
- type FieldValue
- type FieldValueType
- type FieldValues
- type Flow
- type FlowReference
- type FlowRun
- type FlowTranslations
- type FlowUUID
- type Group
- func (g *Group) CheckDynamicMembership(session Session, contact *Contact) (bool, error)
- func (g *Group) Default() interface{}
- func (g *Group) IsDynamic() bool
- func (g *Group) Name() string
- func (g *Group) ParsedQuery() (*contactql.ContactQuery, error)
- func (g *Group) Query() string
- func (g *Group) Reference() *GroupReference
- func (g *Group) Resolve(key string) interface{}
- func (g *Group) String() string
- func (g *Group) UUID() GroupUUID
- type GroupList
- func (l *GroupList) Add(group *Group) bool
- func (l *GroupList) All() []*Group
- func (l *GroupList) Clone() *GroupList
- func (l *GroupList) Count() int
- func (l GroupList) Default() interface{}
- func (l *GroupList) FindByUUID(uuid GroupUUID) *Group
- func (l *GroupList) Remove(group *Group) bool
- func (l *GroupList) Resolve(key string) interface{}
- func (l GroupList) String() string
- type GroupReference
- type GroupSet
- type GroupUUID
- type Input
- type InputUUID
- type Label
- type LabelReference
- type LabelSet
- type LabelUUID
- type LogEntry
- type MsgDirection
- type Node
- type NodeUUID
- type Result
- type Results
- type Route
- type Router
- type RunStatus
- type RunSummary
- type RunUUID
- type Session
- type SessionAssets
- type SessionStatus
- type Step
- type StepUUID
- type Translations
- type Trigger
- type URNList
- type UUID
- type Wait
Constants ¶
This section is empty.
Variables ¶
var NoRoute = Route{}
Functions ¶
func GroupReferenceValidation ¶ added in v0.4.0
func GroupReferenceValidation(sl validator.StructLevel)
GroupReferenceValidation validates that the given group reference is either a concrete reference or a name matcher
func LabelReferenceValidation ¶ added in v0.4.0
func LabelReferenceValidation(sl validator.StructLevel)
LabelReferenceValidation validates that the given label reference is either a concrete reference or a name matcher
func ValidateURN ¶ added in v0.4.0
func ValidateURN(fl validator.FieldLevel) bool
ValidateURN validates whether the field value is a valid URN
func ValidateURNScheme ¶ added in v0.4.0
func ValidateURNScheme(fl validator.FieldLevel) bool
ValidateURNScheme validates whether the field value is a valid URN scheme
Types ¶
type Action ¶
type Action interface { UUID() ActionUUID Execute(FlowRun, Step, EventLog) error Validate(SessionAssets) error utils.Typed }
type ActionUUID ¶
type ActionUUID UUID
func (ActionUUID) String ¶
func (u ActionUUID) String() string
type Attachment ¶ added in v0.4.0
type Attachment string
Attachment is a media attachment on a message
func (Attachment) ContentType ¶ added in v0.4.0
func (a Attachment) ContentType() string
ContentType returns the MIME type of this attachment
func (Attachment) Default ¶ added in v0.4.0
func (a Attachment) Default() interface{}
func (Attachment) Resolve ¶ added in v0.4.0
func (a Attachment) Resolve(key string) interface{}
func (Attachment) String ¶ added in v0.4.0
func (a Attachment) String() string
func (Attachment) URL ¶ added in v0.4.0
func (a Attachment) URL() string
URL returns the full URL of this attachment
type Channel ¶
type Channel interface { UUID() ChannelUUID Name() string Address() string Type() ChannelType Reference() *ChannelReference }
Channel represents a channel for sending and receiving messages
func ReadChannel ¶
func ReadChannel(data json.RawMessage) (Channel, error)
ReadChannel decodes a channel from the passed in JSON
func ReadChannels ¶ added in v0.4.0
func ReadChannels(data []json.RawMessage) ([]Channel, error)
ReadChannels decodes channels from the passed in JSON
type ChannelReference ¶ added in v0.4.0
type ChannelReference struct { UUID ChannelUUID `json:"uuid" validate:"required,uuid4"` Name string `json:"name"` }
ChannelReference is used to reference a channel
func NewChannelReference ¶ added in v0.4.0
func NewChannelReference(uuid ChannelUUID, name string) *ChannelReference
NewChannelReference creates a new channel reference with the given UUID and name
type ChannelType ¶
type ChannelType string
ChannelType represents the type of a Channel
func (ChannelType) String ¶
func (ct ChannelType) String() string
type ChannelUUID ¶
type ChannelUUID UUID
func (ChannelUUID) String ¶
func (u ChannelUUID) String() string
type Contact ¶
type Contact struct {
// contains filtered or unexported fields
}
Contact represents a single contact
func NewContact ¶ added in v0.5.1
func NewContact(uuid ContactUUID, name string, language utils.Language, timezone *time.Location) *Contact
NewContact returns a new contact
func ReadContact ¶
func ReadContact(session Session, data json.RawMessage) (*Contact, error)
ReadContact decodes a contact from the passed in JSON
func (*Contact) Default ¶
func (c *Contact) Default() interface{}
Default returns our default value in the context
func (*Contact) Fields ¶
func (c *Contact) Fields() FieldValues
Fields returns this contact's field values
func (*Contact) MarshalJSON ¶
func (*Contact) Reference ¶ added in v0.4.0
func (c *Contact) Reference() *ContactReference
Reference returns a reference to this contact
func (*Contact) ResolveQueryKey ¶ added in v0.4.0
ResolveQueryKey resolves a contact query search key for this contact
func (*Contact) SetChannel ¶ added in v0.4.0
SetChannel sets the preferred channel of this contact
func (*Contact) SetLanguage ¶
SetLanguage sets the language for this contact
func (*Contact) SetTimezone ¶
SetTimezone sets the timezone of this contact
func (*Contact) UpdateDynamicGroups ¶ added in v0.4.0
UpdateDynamicGroups reevaluates membership of all dynamic groups for this contact
type ContactReference ¶
type ContactReference struct { UUID ContactUUID `json:"uuid" validate:"required,uuid4"` Name string `json:"name"` }
ContactReference is used to reference a contact
func NewContactReference ¶ added in v0.4.0
func NewContactReference(uuid ContactUUID, name string) *ContactReference
NewContactReference creates a new contact reference with the given UUID and name
type ContactUUID ¶
type ContactUUID UUID
func (ContactUUID) String ¶
func (u ContactUUID) String() string
type Field ¶
type Field struct {
// contains filtered or unexported fields
}
Field represents a contact field
func NewField ¶ added in v0.4.0
func NewField(key FieldKey, label string, valueType FieldValueType) *Field
NewField returns a new field object with the passed in uuid, key and value type
func (*Field) ParseValue ¶ added in v0.4.0
func (f *Field) ParseValue(env utils.Environment, value string) (interface{}, error)
type FieldReference ¶ added in v0.4.0
type FieldReference struct { Key FieldKey `json:"key" validate:"required"` Label string `json:"label"` }
FieldReference is a reference to field
func NewFieldReference ¶ added in v0.4.0
func NewFieldReference(key FieldKey, label string) *FieldReference
NewFieldReference creates a new field reference with the given key and label
type FieldSet ¶ added in v0.4.0
type FieldSet struct {
// contains filtered or unexported fields
}
FieldSet defines the unordered set of all fields for a session
func NewFieldSet ¶ added in v0.4.0
func ReadFieldSet ¶ added in v0.4.0
func ReadFieldSet(data json.RawMessage) (*FieldSet, error)
type FieldValue ¶ added in v0.4.0
type FieldValue struct {
// contains filtered or unexported fields
}
FieldValue represents a contact's value for a specific field
func NewFieldValue ¶ added in v0.4.0
func NewFieldValue(field *Field, value interface{}, createdOn time.Time) *FieldValue
func (*FieldValue) Default ¶ added in v0.4.0
func (v *FieldValue) Default() interface{}
Default returns the default value for FieldValue, which is the value
func (*FieldValue) Resolve ¶ added in v0.4.0
func (v *FieldValue) Resolve(key string) interface{}
func (*FieldValue) SerializeValue ¶ added in v0.4.0
func (v *FieldValue) SerializeValue() string
SerializeValue returns the string representation of this field value for serialization
func (*FieldValue) String ¶ added in v0.4.0
func (v *FieldValue) String() string
String returns the string representation of this field value
type FieldValueType ¶ added in v0.4.0
type FieldValueType string
FieldValueType is the data type of values for each field
const ( FieldValueTypeText FieldValueType = "text" FieldValueTypeNumeric FieldValueType = "numeric" FieldValueTypeDatetime FieldValueType = "datetime" FieldValueTypeWard FieldValueType = "ward" FieldValueTypeDistrict FieldValueType = "district" FieldValueTypeState FieldValueType = "state" )
type FieldValues ¶ added in v0.4.0
type FieldValues map[FieldKey]*FieldValue
func (FieldValues) Clone ¶ added in v0.4.0
func (f FieldValues) Clone() FieldValues
func (FieldValues) Default ¶ added in v0.4.0
func (f FieldValues) Default() interface{}
Default returns the default value for FieldValues, which is ourselves
func (FieldValues) Resolve ¶ added in v0.4.0
func (f FieldValues) Resolve(key string) interface{}
func (FieldValues) Save ¶ added in v0.4.0
func (f FieldValues) Save(env utils.Environment, field *Field, rawValue string) error
func (FieldValues) String ¶ added in v0.4.0
func (f FieldValues) String() string
String returns the string representation of these Fields, which is our JSON representation
type Flow ¶
type Flow interface { UUID() FlowUUID Name() string Language() utils.Language ExpireAfterMinutes() int Translations() FlowTranslations Validate(SessionAssets) error Nodes() []Node GetNode(uuid NodeUUID) Node Reference() *FlowReference }
type FlowReference ¶ added in v0.4.0
type FlowReference struct { UUID FlowUUID `json:"uuid" validate:"uuid4"` Name string `json:"name"` }
FlowReference is used to reference a flow from another flow
func NewFlowReference ¶ added in v0.4.0
func NewFlowReference(uuid FlowUUID, name string) *FlowReference
NewFlowReference creates a new flow reference with the given UUID and name
type FlowRun ¶
type FlowRun interface { RunSummary Environment() utils.Environment Session() Session Context() utils.VariableResolver Input() Input Webhook() *utils.RequestResponse SetContact(*Contact) SetInput(Input) SetStatus(RunStatus) SetWebhook(*utils.RequestResponse) ApplyEvent(Step, Action, Event) error AddError(Step, Action, error) AddFatalError(Step, Action, error) CreateStep(Node) Step Path() []Step PathLocation() (Step, Node, error) GetText(uuid UUID, key string, native string) string GetTextArray(uuid UUID, key string, native []string) []string Snapshot() RunSummary Parent() RunSummary SessionParent() FlowRun Ancestors() []FlowRun CreatedOn() time.Time ExpiresOn() *time.Time ResetExpiration(*time.Time) ExitedOn() *time.Time Exit(RunStatus) }
FlowRun represents a run in the current session
type FlowTranslations ¶
type FlowTranslations interface {
GetLanguageTranslations(utils.Language) Translations
}
FlowTranslations provide a way to get the Translations for a flow for a specific language
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
Group represents a grouping of contacts
func (*Group) CheckDynamicMembership ¶ added in v0.4.0
func (*Group) Default ¶
func (g *Group) Default() interface{}
Default returns the default value for this group
func (*Group) ParsedQuery ¶ added in v0.4.0
func (g *Group) ParsedQuery() (*contactql.ContactQuery, error)
ParsedQuery returns the parsed query of a dynamic group (cached)
func (*Group) Reference ¶ added in v0.4.0
func (g *Group) Reference() *GroupReference
type GroupList ¶
type GroupList struct {
// contains filtered or unexported fields
}
GroupList defines a contact's list of groups
func NewGroupList ¶ added in v0.4.0
func (GroupList) Default ¶
func (l GroupList) Default() interface{}
Default returns the default value for this group, which is our entire list
func (*GroupList) FindByUUID ¶ added in v0.4.0
FindGroup returns the group with the passed in UUID or nil if not found
type GroupReference ¶ added in v0.4.0
type GroupReference struct { UUID GroupUUID `json:"uuid,omitempty" validate:"omitempty,uuid4"` Name string `json:"name,omitempty"` NameMatch string `json:"name_match,omitempty"` }
GroupReference is used to reference a group
func NewGroupReference ¶ added in v0.4.0
func NewGroupReference(uuid GroupUUID, name string) *GroupReference
NewGroupReference creates a new group reference with the given UUID and name
func NewVariableGroupReference ¶ added in v0.4.0
func NewVariableGroupReference(nameMatch string) *GroupReference
NewVariableGroupReference creates a new group reference from the given templatized name match
type GroupSet ¶ added in v0.4.0
type GroupSet struct {
// contains filtered or unexported fields
}
GroupSet defines the unordered set of all groups for a session
func NewGroupSet ¶ added in v0.4.0
func ReadGroupSet ¶ added in v0.4.0
func ReadGroupSet(data json.RawMessage) (*GroupSet, error)
func (*GroupSet) FindByName ¶ added in v0.4.0
FindByName looks for a group with the given name (case-insensitive)
func (*GroupSet) FindByUUID ¶ added in v0.4.0
type Label ¶
type Label struct {
// contains filtered or unexported fields
}
Label represents a message label
func (*Label) Reference ¶ added in v0.4.0
func (l *Label) Reference() *LabelReference
type LabelReference ¶ added in v0.4.0
type LabelReference struct { UUID LabelUUID `json:"uuid,omitempty" validate:"omitempty,uuid4"` Name string `json:"name,omitempty"` NameMatch string `json:"name_match,omitempty"` }
LabelReference is used to reference a label
func NewLabelReference ¶ added in v0.4.0
func NewLabelReference(uuid LabelUUID, name string) *LabelReference
NewLabelReference creates a new label reference with the given UUID and name
func NewVariableLabelReference ¶ added in v0.4.0
func NewVariableLabelReference(nameMatch string) *LabelReference
NewVariableLabelReference creates a new label reference from the given templatized name match
type LabelSet ¶ added in v0.4.0
type LabelSet struct {
// contains filtered or unexported fields
}
LabelSet defines the unordered set of all labels for a session
func NewLabelSet ¶ added in v0.4.0
func ReadLabelSet ¶ added in v0.4.0
func ReadLabelSet(data json.RawMessage) (*LabelSet, error)
func (*LabelSet) FindByName ¶ added in v0.4.0
FindByName looks for a label with the given name (case-insensitive)
func (*LabelSet) FindByUUID ¶ added in v0.4.0
type LogEntry ¶ added in v0.4.0
LogEntry is a container for a new event generated by the engine, i.e. not from the caller
type MsgDirection ¶
type MsgDirection string
MsgDirection is the direction of a Msg (either in or out)
const ( // MsgOut represents an outgoing message MsgOut MsgDirection = "O" // MsgIn represents an incoming message MsgIn MsgDirection = "I" )
type Result ¶
type Result struct { Name string `json:"name"` Value string `json:"value"` Category string `json:"category,omitempty"` CategoryLocalized string `json:"category_localized,omitempty"` NodeUUID NodeUUID `json:"node_uuid"` Input string `json:"input"` CreatedOn time.Time `json:"created_on"` }
Result represents a result value in our flow run. Results have a name for which they are the result for, the value itself of the result, optional category and the date and node the result was collected on
func (*Result) Default ¶
func (r *Result) Default() interface{}
Default returns the default value for a result, which is our value
type Results ¶
Results is our wrapper around a map of snakified result names to result objects
func NewResults ¶
func NewResults() Results
func (Results) Default ¶
func (r Results) Default() interface{}
Default returns the default value for our Results, which is the entire map
type RunStatus ¶
type RunStatus string
RunStatus represents the current status of the flow run
const ( // RunStatusActive represents a run that is still active RunStatusActive RunStatus = "active" // RunStatusCompleted represents a run that has run to completion RunStatusCompleted RunStatus = "completed" // RunStatusWaiting represents a run which is waiting for something from the caller RunStatusWaiting RunStatus = "waiting" // RunStatusErrored represents a run that encountered an error RunStatusErrored RunStatus = "errored" // RunStatusExpired represents a run that expired due to inactivity RunStatusExpired RunStatus = "expired" // RunStatusInterrupted represents a run that was interrupted by another flow RunStatusInterrupted RunStatus = "interrupted" )
type RunSummary ¶ added in v0.4.0
type RunSummary interface { UUID() RunUUID Contact() *Contact Flow() Flow Status() RunStatus Results() Results }
RunSummary represents the minimum information available about all runs (current or related) and is the representation of runs made accessible to router tests.
func NewRunSummaryFromRun ¶ added in v0.4.0
func NewRunSummaryFromRun(run FlowRun) RunSummary
func ReadRunSummary ¶ added in v0.4.0
func ReadRunSummary(session Session, data json.RawMessage) (RunSummary, error)
type Session ¶
type Session interface { Assets() SessionAssets Environment() utils.Environment SetEnvironment(utils.Environment) Contact() *Contact SetContact(*Contact) Status() SessionStatus Trigger() Trigger PushFlow(Flow, FlowRun) Wait() Wait FlowOnStack(FlowUUID) bool Start(Trigger, []Event) error Resume([]Event) error Runs() []FlowRun GetRun(RunUUID) (FlowRun, error) GetCurrentChild(FlowRun) FlowRun Log() []LogEntry LogEvent(Step, Action, Event) ClearLog() }
Session represents the session of a flow run which may contain many runs
type SessionAssets ¶ added in v0.4.0
type SessionAssets interface { GetChannel(ChannelUUID) (Channel, error) GetField(FieldKey) (*Field, error) GetFieldSet() (*FieldSet, error) GetFlow(FlowUUID) (Flow, error) GetGroup(GroupUUID) (*Group, error) GetGroupSet() (*GroupSet, error) GetLabel(LabelUUID) (*Label, error) GetLabelSet() (*LabelSet, error) HasLocations() bool GetLocationHierarchy() (*utils.LocationHierarchy, error) }
type SessionStatus ¶ added in v0.4.0
type SessionStatus string
RunStatus represents the current status of the engine session
const ( // SessionStatusActive represents a session that is still active SessionStatusActive SessionStatus = "active" // SessionStatusCompleted represents a session that has run to completion SessionStatusCompleted SessionStatus = "completed" // SessionStatusWaiting represents a session which is waiting for something from the caller SessionStatusWaiting SessionStatus = "waiting" // SessionStatusErrored represents a session that encountered an error SessionStatusErrored SessionStatus = "errored" )
func (SessionStatus) String ¶ added in v0.4.0
func (r SessionStatus) String() string
type Translations ¶
Translations provide a way to get the translation for a specific language for a uuid/key pair
type Trigger ¶ added in v0.4.0
type Trigger interface { utils.VariableResolver utils.Typed Environment() utils.Environment Flow() Flow Contact() *Contact Params() utils.JSONFragment TriggeredOn() time.Time }