flows

package
v0.9.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2018 License: AGPL-3.0 Imports: 15 Imported by: 44

Documentation

Index

Constants

View Source
const (
	LocationLevelState    = utils.LocationLevel(1)
	LocationLevelDistrict = utils.LocationLevel(2)
	LocationLevelWard     = utils.LocationLevel(3)
)

location levels which can be field types

Variables

View Source
var EmptyFieldValue = &FieldValue{}

EmptyFieldValue is used when a contact doesn't have a value set for a field

View Source
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 IsPossibleLocationPath added in v0.9.6

func IsPossibleLocationPath(str string) bool

IsPossibleLocationPath returns whether the given string could be a location path

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
}

Action is an action within a flow node

type ActionUUID

type ActionUUID utils.UUID

ActionUUID is the UUID of an action

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, and it has the following properties which can be accessed:

  • `content_type` the MIME type of the attachment
  • `url` the URL of the attachment

Examples:

@run.input.attachments.0.content_type -> image/jpeg
@run.input.attachments.0.url -> http://s3.amazon.com/bucket/test.jpg
@(json(run.input.attachments.0)) -> {"content_type":"image/jpeg","url":"http://s3.amazon.com/bucket/test.jpg"}

@context attachment

func (Attachment) ContentType added in v0.4.0

func (a Attachment) ContentType() string

ContentType returns the MIME type of this attachment

func (Attachment) Reduce added in v0.8.0

func (a Attachment) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (Attachment) Resolve added in v0.4.0

func (a Attachment) Resolve(key string) types.XValue

Resolve resolves the given key when this attachment is referenced in an expression

func (Attachment) ToXJSON added in v0.8.0

func (a Attachment) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

func (Attachment) URL added in v0.4.0

func (a Attachment) URL() string

URL returns the full URL of this attachment

type AttachmentList added in v0.8.0

type AttachmentList []Attachment

AttachmentList is a list of attachments

func (AttachmentList) Index added in v0.8.0

func (a AttachmentList) Index(index int) types.XValue

Index is called when this object is indexed into in an expression

func (AttachmentList) Length added in v0.8.0

func (a AttachmentList) Length() int

Length is called when the length of this object is requested in an expression

func (AttachmentList) Reduce added in v0.8.0

func (a AttachmentList) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (AttachmentList) ToXJSON added in v0.8.0

func (a AttachmentList) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

type BaseMsg added in v0.6.0

type BaseMsg struct {
	UUID_        MsgUUID           `json:"uuid"`
	URN_         urns.URN          `json:"urn" validate:"omitempty,urn"`
	Channel_     *ChannelReference `json:"channel,omitempty"`
	Text_        string            `json:"text"`
	Attachments_ []Attachment      `json:"attachments,omitempty"`
}

BaseMsg represents a incoming or outgoing message with the session contact

func (*BaseMsg) Attachments added in v0.6.0

func (m *BaseMsg) Attachments() []Attachment

Attachments returns the attachments of this message

func (*BaseMsg) Channel added in v0.6.0

func (m *BaseMsg) Channel() *ChannelReference

Channel returns the channel of this message

func (*BaseMsg) Text added in v0.6.0

func (m *BaseMsg) Text() string

Text returns the text of this message

func (*BaseMsg) URN added in v0.6.0

func (m *BaseMsg) URN() urns.URN

URN returns the URN of this message

func (*BaseMsg) UUID added in v0.6.0

func (m *BaseMsg) UUID() MsgUUID

UUID returns the UUID of this message

type Channel

type Channel interface {
	types.XValue
	types.XResolvable

	UUID() ChannelUUID
	Name() string
	Address() string
	Schemes() []string
	SupportsScheme(string) bool
	Roles() []ChannelRole
	HasRole(ChannelRole) bool
	Reference() *ChannelReference
}

Channel represents a means for sending and receiving input during a flow run. It renders as its name in a template, and has the following properties which can be accessed:

  • `uuid` the UUID of the channel
  • `name` the name of the channel
  • `address` the address of the channel

Examples:

@contact.channel -> My Android Phone
@contact.channel.name -> My Android Phone
@contact.channel.address -> +12345671111
@run.input.channel.uuid -> 57f1078f-88aa-46f4-a59a-948a5739c03d
@(json(contact.channel)) -> {"address":"+12345671111","name":"My Android Phone","uuid":"57f1078f-88aa-46f4-a59a-948a5739c03d"}

@context channel

func NewChannel added in v0.6.0

func NewChannel(uuid ChannelUUID, name string, address string, schemes []string, roles []ChannelRole) Channel

NewChannel creates a new channel

func ReadChannel

func ReadChannel(data json.RawMessage) (Channel, error)

ReadChannel decodes a channel from the passed in JSON

type ChannelReference added in v0.4.0

type ChannelReference struct {
	UUID ChannelUUID `json:"uuid" validate:"required,uuid"`
	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 ChannelRole added in v0.6.0

type ChannelRole string

ChannelRole is a role that a channel can perform

const (
	ChannelRoleSend    ChannelRole = "send"
	ChannelRoleReceive ChannelRole = "receive"
	ChannelRoleCall    ChannelRole = "call"
	ChannelRoleAnswer  ChannelRole = "answer"
	ChannelRoleUSSD    ChannelRole = "ussd"
)

different roles that channels can perform

type ChannelSet added in v0.6.0

type ChannelSet struct {
	// contains filtered or unexported fields
}

ChannelSet defines the unordered set of all channels for a session

func NewChannelSet added in v0.6.0

func NewChannelSet(channels []Channel) *ChannelSet

NewChannelSet creates a new channel set

func ReadChannelSet added in v0.6.0

func ReadChannelSet(data json.RawMessage) (*ChannelSet, error)

ReadChannelSet decodes channels from the passed in JSON

func (*ChannelSet) FindByUUID added in v0.6.0

func (s *ChannelSet) FindByUUID(uuid ChannelUUID) Channel

FindByUUID finds the channel with the given UUID

func (*ChannelSet) GetForURN added in v0.6.0

func (s *ChannelSet) GetForURN(urn *ContactURN) Channel

GetForURN returns the best channel for the given URN

type ChannelUUID

type ChannelUUID utils.UUID

ChannelUUID is the UUID of a channel

func (ChannelUUID) String

func (u ChannelUUID) String() string

type Contact

type Contact struct {
	// contains filtered or unexported fields
}

Contact represents a person who is interacting with the flow. It renders as the person's name (or perferred URN if name isn't set) in a template, and has the following properties which can be accessed:

  • `uuid` the UUID of the contact
  • `name` the full name of the contact
  • `first_name` the first name of the contact
  • `language` the [ISO-639-3](http://www-01.sil.org/iso639-3/) language code of the contact
  • `urns` all [URNs](#context:urn) the contact has set
  • `urns.[scheme]` all the [URNs](#context:urn) the contact has set for the particular URN scheme
  • `urn` shorthand for `@(format_urn(c.urns.0))`, i.e. the contact's preferred [URN](#context:urn) in friendly formatting
  • `groups` all the [groups](#context:group) that the contact belongs to
  • `fields` all the custom contact fields the contact has set
  • `fields.[snaked_field_name]` the value of the specific field
  • `channel` shorthand for `contact.urns.0.channel`, i.e. the [channel](#context:channel) of the contact's preferred URN

Examples:

@contact -> Ryan Lewis
@contact.name -> Ryan Lewis
@contact.first_name -> Ryan
@contact.language -> eng
@contact.urns -> ["tel:+12065551212","twitterid:54784326227#nyaruka","mailto:foo@bar.com"]
@contact.urns.0 -> tel:+12065551212
@contact.urns.tel -> ["tel:+12065551212"]
@contact.urns.mailto.0 -> mailto:foo@bar.com
@contact.urn -> (206) 555-1212
@contact.groups -> ["Testers","Males"]
@contact.fields -> {"activation_token":"AACC55","age":"23","gender":"Male","join_date":"2017-12-02T00:00:00.000000-02:00"}
@contact.fields.activation_token -> AACC55
@contact.fields.gender -> Male

@context 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) AddURN added in v0.4.0

func (c *Contact) AddURN(urn urns.URN) bool

AddURN adds a new URN to this contact

func (*Contact) Clone added in v0.4.0

func (c *Contact) Clone() *Contact

Clone creates a copy of this contact

func (*Contact) Fields

func (c *Contact) Fields() FieldValues

Fields returns this contact's field values

func (*Contact) Groups

func (c *Contact) Groups() *GroupList

Groups returns the groups that this contact belongs to

func (*Contact) HasURN added in v0.6.1

func (c *Contact) HasURN(urn urns.URN) bool

HasURN checks whether the contact has the given URN

func (*Contact) Language

func (c *Contact) Language() utils.Language

Language gets the language for this contact

func (*Contact) MarshalJSON

func (c *Contact) MarshalJSON() ([]byte, error)

MarshalJSON marshals this contact into JSON

func (*Contact) Name

func (c *Contact) Name() string

Name returns the name of this contact

func (*Contact) Reduce added in v0.8.0

func (c *Contact) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (*Contact) ReevaluateDynamicGroups added in v0.9.6

func (c *Contact) ReevaluateDynamicGroups(session Session) error

ReevaluateDynamicGroups reevaluates membership of all dynamic groups for this contact

func (*Contact) Reference added in v0.4.0

func (c *Contact) Reference() *ContactReference

Reference returns a reference to this contact

func (*Contact) Resolve

func (c *Contact) Resolve(key string) types.XValue

Resolve resolves the given key when this contact is referenced in an expression

func (*Contact) ResolveQueryKey added in v0.4.0

func (c *Contact) ResolveQueryKey(key string) []interface{}

ResolveQueryKey resolves a contact query search key for this contact

func (*Contact) SetFieldValue added in v0.8.0

func (c *Contact) SetFieldValue(env utils.Environment, fieldSet *FieldSet, key string, rawValue string)

SetFieldValue updates the given contact field value for this contact

func (*Contact) SetLanguage

func (c *Contact) SetLanguage(lang utils.Language)

SetLanguage sets the language for this contact

func (*Contact) SetName

func (c *Contact) SetName(name string)

SetName sets the name of this contact

func (*Contact) SetTimezone

func (c *Contact) SetTimezone(tz *time.Location)

SetTimezone sets the timezone of this contact

func (*Contact) Timezone

func (c *Contact) Timezone() *time.Location

Timezone returns the timezone of this contact

func (*Contact) ToXJSON added in v0.8.0

func (c *Contact) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

func (*Contact) URNs

func (c *Contact) URNs() URNList

URNs returns the URNs of this contact

func (*Contact) UUID

func (c *Contact) UUID() ContactUUID

UUID returns the UUID of this contact

func (*Contact) UpdatePreferredChannel added in v0.6.0

func (c *Contact) UpdatePreferredChannel(channel Channel)

UpdatePreferredChannel updates the preferred channel

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 ContactURN added in v0.6.0

type ContactURN struct {
	urns.URN
	// contains filtered or unexported fields
}

ContactURN represents a destination for an outgoing message or a source of an incoming message. It is string composed of 3 components: scheme, path, and display (optional). For example:

  • _tel:+16303524567_
  • _twitterid:54784326227#nyaruka_
  • _telegram:34642632786#bobby_

It has several properties which can be accessed in expressions:

  • `scheme` the scheme of the URN, e.g. "tel", "twitter"
  • `path` the path of the URN, e.g. "+16303524567"
  • `display` the display portion of the URN, e.g. "+16303524567"
  • `channel` the preferred [channel](#context:channel) of the URN

To render a URN in a human friendly format, use the [format_urn](#function:format_urn) function.

Examples:

@contact.urns.0 -> tel:+12065551212
@contact.urns.0.scheme -> tel
@contact.urns.0.path -> +12065551212
@contact.urns.1.display -> nyaruka
@(format_urn(contact.urns.0)) -> (206) 555-1212
@(json(contact.urns.0)) -> {"display":"","path":"+12065551212","scheme":"tel"}

@context urn

func NewContactURN added in v0.6.0

func NewContactURN(urn urns.URN, channel Channel) *ContactURN

NewContactURN creates a new contact URN with associated channel

func (*ContactURN) Channel added in v0.6.0

func (u *ContactURN) Channel() Channel

Channel gets the channel associated with this URN

func (*ContactURN) Reduce added in v0.8.0

func (u *ContactURN) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (*ContactURN) Resolve added in v0.6.0

func (u *ContactURN) Resolve(key string) types.XValue

Resolve resolves the given key when this URN is referenced in an expression

func (*ContactURN) SetChannel added in v0.6.0

func (u *ContactURN) SetChannel(channel Channel)

SetChannel sets the channel associated with this URN

func (*ContactURN) ToXJSON added in v0.8.0

func (u *ContactURN) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

type ContactUUID

type ContactUUID utils.UUID

ContactUUID is the UUID of a contact

func (ContactUUID) String

func (u ContactUUID) String() string

type EngineConfig added in v0.9.3

type EngineConfig interface {
	MaxWebhookResponseBytes() int
}

type Event

type Event interface {
	CreatedOn() time.Time
	SetCreatedOn(time.Time)

	StepUUID() StepUUID
	SetStepUUID(StepUUID)

	FromCaller() bool
	SetFromCaller(bool)

	AllowedOrigin() EventOrigin
	Validate(SessionAssets) error

	Apply(FlowRun) error

	utils.Typed
}

Event describes a state change

type EventLog added in v0.4.0

type EventLog interface {
	Add(Event)
	Events() []Event
}

EventLog is the log of events the caller must apply after each call

type EventOrigin added in v0.6.0

type EventOrigin int

EventOrigin is the allowed origin of an event

const (
	// EventOriginCaller means an event can originate from the caller
	EventOriginCaller EventOrigin = 1

	// EventOriginEngine means an event can originate from the engine
	EventOriginEngine EventOrigin = 2
)

type Exit

type Exit interface {
	UUID() ExitUUID
	DestinationNodeUUID() NodeUUID
	Name() string
}

type ExitUUID

type ExitUUID utils.UUID

ExitUUID is the UUID of a node exit

func (ExitUUID) String

func (u ExitUUID) 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 string, name string, valueType FieldValueType) *Field

NewField returns a new field object with the passed in uuid, key and value type

func ReadField added in v0.4.0

func ReadField(data json.RawMessage) (*Field, error)

ReadField reads a contact field from the given JSON

func (*Field) Key added in v0.4.0

func (f *Field) Key() string

Key returns the key of the field

type FieldReference added in v0.4.0

type FieldReference struct {
	Key  string `json:"key" validate:"required"`
	Name string `json:"name"`
}

FieldReference is a reference to field

func NewFieldReference added in v0.4.0

func NewFieldReference(key string, 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 NewFieldSet(fields []*Field) *FieldSet

NewFieldSet creates a new set of fields

func ReadFieldSet added in v0.4.0

func ReadFieldSet(data json.RawMessage) (*FieldSet, error)

ReadFieldSet reads a set of contact fields from the given JSON

func (*FieldSet) All added in v0.8.0

func (s *FieldSet) All() []*Field

All returns all the fields in this set

func (*FieldSet) FindByKey added in v0.4.0

func (s *FieldSet) FindByKey(key string) *Field

FindByKey finds the contact field with the given key

func (*FieldSet) FirstOfType added in v0.9.6

func (s *FieldSet) FirstOfType(valueType FieldValueType) *Field

FirstOfType returns the first field in this set with the given value type

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 NewEmptyFieldValue added in v0.9.6

func NewEmptyFieldValue(field *Field) *FieldValue

NewEmptyFieldValue creates a new empty value for the given field

func (*FieldValue) IsEmpty added in v0.8.0

func (v *FieldValue) IsEmpty() bool

IsEmpty returns whether this field value is set for any type

func (*FieldValue) Reduce added in v0.8.0

func (v *FieldValue) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (*FieldValue) Resolve added in v0.4.0

func (v *FieldValue) Resolve(key string) types.XValue

Resolve resolves the given key when this field value is referenced in an expression

func (*FieldValue) ToXJSON added in v0.8.0

func (v *FieldValue) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

func (*FieldValue) TypedValue added in v0.8.0

func (v *FieldValue) TypedValue() types.XValue

TypedValue returns the value in its proper type

type FieldValueType added in v0.4.0

type FieldValueType string

FieldValueType is the data type of values for each field

const (
	FieldValueTypeText     FieldValueType = "text"
	FieldValueTypeNumber   FieldValueType = "number"
	FieldValueTypeDatetime FieldValueType = "datetime"
	FieldValueTypeWard     FieldValueType = "ward"
	FieldValueTypeDistrict FieldValueType = "district"
	FieldValueTypeState    FieldValueType = "state"
)

field value types

type FieldValues added in v0.4.0

type FieldValues map[string]*FieldValue

FieldValues is the set of all field values for a contact

func (FieldValues) Length added in v0.8.0

func (f FieldValues) Length() int

Length is called to get the length of this object

func (FieldValues) Reduce added in v0.8.0

func (f FieldValues) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (FieldValues) Resolve added in v0.4.0

func (f FieldValues) Resolve(key string) types.XValue

Resolve resolves the given key when this set of field values is referenced in an expression

func (FieldValues) ToXJSON added in v0.8.0

func (f FieldValues) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

type Flow

type Flow interface {
	types.XValue
	types.XResolvable

	UUID() FlowUUID
	Name() string
	Language() utils.Language
	ExpireAfterMinutes() int
	Localization() Localization

	Validate(SessionAssets) error
	Nodes() []Node
	GetNode(uuid NodeUUID) Node

	Reference() *FlowReference
}

Flow describes the ordered logic of actions and routers. It renders as its name in a template, and has the following properties which can be accessed:

  • `uuid` the UUID of the flow
  • `name` the name of the flow

Examples:

@run.flow -> Registration
@child.flow -> Collect Age
@run.flow.uuid -> 50c3706e-fedb-42c0-8eab-dda3335714b7
@(json(run.flow)) -> {"name":"Registration","uuid":"50c3706e-fedb-42c0-8eab-dda3335714b7"}

@context flow

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 {
	types.XValue
	types.XResolvable
	RunSummary

	Environment() RunEnvironment
	Session() Session
	Context() types.XValue
	Input() Input
	Webhook() *WebhookCall

	SetContact(*Contact)
	SetInput(Input)
	SetStatus(RunStatus)
	SetWebhook(*WebhookCall)

	ApplyEvent(Step, Action, Event) error
	AddError(Step, Action, error)
	AddFatalError(Step, Action, error)

	CreateStep(Node) Step
	Path() []Step
	PathLocation() (Step, Node, error)

	EvaluateTemplate(template string) (types.XValue, error)
	EvaluateTemplateAsString(template string, urlEncode bool) (string, error)

	GetText(utils.UUID, string, string) string
	GetTextArray(utils.UUID, string, []string) []string
	GetTranslatedTextArray(utils.UUID, string, []string, utils.LanguageList) []string

	Snapshot() RunSummary
	Parent() RunSummary
	ParentInSession() FlowRun
	Ancestors() []FlowRun

	CreatedOn() time.Time
	ExpiresOn() *time.Time
	ResetExpiration(*time.Time)
	ExitedOn() *time.Time
	Exit(RunStatus)
}

FlowRun is a single contact's journey through a flow. It records the path they have taken, and the results that have been collected. It has several properties which can be accessed in expressions:

  • `uuid` the UUID of the run
  • `flow` the [flow](#context:flow) of the run
  • `contact` the [contact](#context:contact) of the flow run
  • `input` the [input](#context:input) of the current run
  • `results` the results that have been saved for this run
  • `results.[snaked_result_name]` the value of the specific result, e.g. `run.results.age`
  • `webhook` the last [webhook](#context:webhook) call made in the current run

Examples:

@run.flow.name -> Registration

@context run

type FlowUUID

type FlowUUID utils.UUID

FlowUUID is the UUID of a flow

func (FlowUUID) String

func (u FlowUUID) String() string

type Group

type Group struct {
	// contains filtered or unexported fields
}

Group represents a grouping of contacts. It can be static (contacts are added and removed manually through [actions](#action:add_contact_groups)) or dynamic (contacts are added automatically by a query). It renders as its name in a template, and has the following properties which can be accessed:

  • `uuid` the UUID of the group
  • `name` the name of the group

Examples:

@contact.groups -> ["Testers","Males"]
@contact.groups.0.uuid -> b7cf0d83-f1c9-411c-96fd-c511a4cfa86d
@contact.groups.1.name -> Males
@(json(contact.groups.1)) -> {"name":"Males","uuid":"4f1f98fc-27a7-4a69-bbdb-24744ba739a9"}

@context group

func NewGroup

func NewGroup(uuid GroupUUID, name string, query string) *Group

NewGroup returns a new group object with the passed in uuid and name

func ReadGroup added in v0.4.0

func ReadGroup(data json.RawMessage) (*Group, error)

ReadGroup reads a group from the given JSON

func (*Group) CheckDynamicMembership added in v0.4.0

func (g *Group) CheckDynamicMembership(session Session, contact *Contact) (bool, error)

CheckDynamicMembership returns whether the given contact belongs in this dynamic group

func (*Group) IsDynamic added in v0.4.0

func (g *Group) IsDynamic() bool

IsDynamic returns whether this group is dynamic

func (*Group) Name

func (g *Group) Name() string

Name returns the name of the 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) Query added in v0.4.0

func (g *Group) Query() string

Query returns the query of a dynamic group

func (*Group) Reduce added in v0.8.0

func (g *Group) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (*Group) Reference added in v0.4.0

func (g *Group) Reference() *GroupReference

Reference returns a reference to this group

func (*Group) Resolve

func (g *Group) Resolve(key string) types.XValue

Resolve resolves the given key when this group is referenced in an expression

func (*Group) ToXJSON added in v0.8.0

func (g *Group) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

func (*Group) UUID

func (g *Group) UUID() GroupUUID

UUID returns the UUID of the group

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 NewGroupList(groups []*Group) *GroupList

NewGroupList creates a new group list

func (*GroupList) Add added in v0.4.0

func (l *GroupList) Add(group *Group) bool

Add adds the given group to this group list

func (*GroupList) All added in v0.4.0

func (l *GroupList) All() []*Group

All returns all groups in this group list

func (*GroupList) Count added in v0.4.0

func (l *GroupList) Count() int

Count returns the number of groups in this group list

func (*GroupList) FindByUUID added in v0.4.0

func (l *GroupList) FindByUUID(uuid GroupUUID) *Group

FindByUUID returns the group with the passed in UUID or nil if not found

func (*GroupList) Index added in v0.8.0

func (l *GroupList) Index(index int) types.XValue

Index is called when this object is indexed into in an expression

func (*GroupList) Length added in v0.8.0

func (l *GroupList) Length() int

Length is called when the length of this object is requested in an expression

func (GroupList) Reduce added in v0.8.0

func (l GroupList) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (*GroupList) Remove added in v0.4.0

func (l *GroupList) Remove(group *Group) bool

Remove removes the given group from this group list

func (GroupList) ToXJSON added in v0.8.0

func (l GroupList) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

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 NewGroupSet(groups []*Group) *GroupSet

NewGroupSet creates a new group set from the given list of groups

func ReadGroupSet added in v0.4.0

func ReadGroupSet(data json.RawMessage) (*GroupSet, error)

ReadGroupSet reads a group set from the given JSON

func (*GroupSet) All added in v0.4.0

func (s *GroupSet) All() []*Group

All returns all groups in this group set

func (*GroupSet) FindByName added in v0.4.0

func (s *GroupSet) FindByName(name string) *Group

FindByName looks for a group with the given name (case-insensitive)

func (*GroupSet) FindByUUID added in v0.4.0

func (s *GroupSet) FindByUUID(uuid GroupUUID) *Group

FindByUUID finds the group with the given UUID

type GroupUUID

type GroupUUID utils.UUID

GroupUUID is the UUID of a group

func (GroupUUID) String

func (u GroupUUID) String() string

type Input

type Input interface {
	types.XValue
	utils.Typed

	UUID() InputUUID
	CreatedOn() time.Time
	Channel() Channel
}

Input describes input from the contact and currently we only support one type of input: `msg`. Any input has the following properties which can be accessed:

  • `uuid` the UUID of the input
  • `type` the type of the input, e.g. `msg`
  • `channel` the [channel](#context:channel) that the input was received on
  • `created_on` the time when the input was created

An input of type `msg` renders as its text and attachments in a template, and has the following additional properties:

  • `text` the text of the message
  • `attachments` any [attachments](#context:attachment) on the message
  • `urn` the [URN](#context:urn) that the input was received on

Examples:

@run.input -> Hi there\nhttp://s3.amazon.com/bucket/test.jpg\nhttp://s3.amazon.com/bucket/test.mp3
@run.input.type -> msg
@run.input.text -> Hi there
@run.input.attachments -> ["http://s3.amazon.com/bucket/test.jpg","http://s3.amazon.com/bucket/test.mp3"]
@(json(run.input)) -> {"attachments":[{"content_type":"image/jpeg","url":"http://s3.amazon.com/bucket/test.jpg"},{"content_type":"audio/mp3","url":"http://s3.amazon.com/bucket/test.mp3"}],"channel":{"address":"+12345671111","name":"My Android Phone","uuid":"57f1078f-88aa-46f4-a59a-948a5739c03d"},"created_on":"2000-01-01T00:00:00.000000Z","text":"Hi there","type":"msg","urn":{"display":"","path":"+12065551212","scheme":"tel"},"uuid":"9bf91c2b-ce58-4cef-aacc-281e03f69ab5"}

@context input

type InputUUID added in v0.4.0

type InputUUID utils.UUID

InputUUID is the UUID of an input

func (InputUUID) String added in v0.4.0

func (u InputUUID) String() string

type Label

type Label struct {
	// contains filtered or unexported fields
}

Label represents a message label

func NewLabel

func NewLabel(uuid LabelUUID, name string) *Label

NewLabel creates a new label given the passed in uuid and name

func ReadLabel added in v0.4.0

func ReadLabel(data json.RawMessage) (*Label, error)

ReadLabel reads a label from the given JSON

func (*Label) Name

func (l *Label) Name() string

Name returns the name of this label

func (*Label) Reference added in v0.4.0

func (l *Label) Reference() *LabelReference

Reference returns a reference to this label

func (*Label) UUID

func (l *Label) UUID() LabelUUID

UUID returns the UUID of this label

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 NewLabelSet(labels []*Label) *LabelSet

NewLabelSet creates a new label set from the given slice of labels

func ReadLabelSet added in v0.4.0

func ReadLabelSet(data json.RawMessage) (*LabelSet, error)

ReadLabelSet reads a label set from the given JSON

func (*LabelSet) FindByName added in v0.4.0

func (s *LabelSet) FindByName(name string) *Label

FindByName looks for a label with the given name (case-insensitive)

func (*LabelSet) FindByUUID added in v0.4.0

func (s *LabelSet) FindByUUID(uuid LabelUUID) *Label

FindByUUID finds the label with the given UUID

type LabelUUID

type LabelUUID utils.UUID

LabelUUID is the UUID of a label

func (LabelUUID) String

func (u LabelUUID) String() string

type Localization added in v0.6.2

type Localization interface {
	AddItemTranslation(utils.Language, utils.UUID, string, []string)
	GetTranslations(utils.Language) Translations
	Languages() utils.LanguageList
}

Localization provide a way to get the translations for a specific language

type LocationPath added in v0.9.6

type LocationPath string

LocationPath is a location described by a path Country > State ...

func (LocationPath) Name added in v0.9.6

func (p LocationPath) Name() string

Name returns the name of the location referenced

func (LocationPath) Reduce added in v0.9.6

func (p LocationPath) Reduce() types.XPrimitive

Reduce returns the primitive version of this type

func (LocationPath) String added in v0.9.6

func (p LocationPath) String() string

func (LocationPath) ToXJSON added in v0.9.6

func (p LocationPath) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

type MsgIn

type MsgIn struct {
	BaseMsg
}

MsgIn represents a incoming message from the session contact

func NewMsgIn added in v0.6.0

func NewMsgIn(uuid MsgUUID, urn urns.URN, channel Channel, text string, attachments []Attachment) *MsgIn

NewMsgIn creates a new incoming message

type MsgOut

type MsgOut struct {
	BaseMsg
	QuickReplies_ []string `json:"quick_replies,omitempty"`
}

MsgOut represents a outgoing message to the session contact

func NewMsgOut added in v0.6.0

func NewMsgOut(urn urns.URN, channel Channel, text string, attachments []Attachment, quickReplies []string) *MsgOut

NewMsgOut creates a new outgoing message

func (*MsgOut) QuickReplies added in v0.6.0

func (m *MsgOut) QuickReplies() []string

QuickReplies returns the quick replies of this outgoing message

type MsgUUID added in v0.6.0

type MsgUUID utils.UUID

MsgUUID is the UUID of a message

func (MsgUUID) String added in v0.6.0

func (u MsgUUID) String() string

type Node

type Node interface {
	UUID() NodeUUID

	Actions() []Action
	AddAction(Action)

	Router() Router
	Exits() []Exit
	Wait() Wait
}

Node is a single node in a flow

type NodeUUID

type NodeUUID utils.UUID

NodeUUID is a UUID of a flow node

func (NodeUUID) String

func (u NodeUUID) String() string

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 describes a value captured during a run's execution. It might have been implicitly created by a router, or explicitly created by a [set_run_result](#action:set_run_result) action.It renders as its value in a template, and has the following properties which can be accessed:

  • `value` the value of the result
  • `category` the category of the result
  • `category_localized` the localized category of the result
  • `created_on` the time when the result was created

Examples:

@run.results.favorite_color -> red
@run.results.favorite_color.value -> red
@run.results.favorite_color.category -> Red

@context result

func (*Result) Reduce added in v0.8.0

func (r *Result) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (*Result) Resolve

func (r *Result) Resolve(key string) types.XValue

Resolve resolves the passed in key to a value. Result values have a name, value, category, node and created_on

func (*Result) ToXJSON added in v0.8.0

func (r *Result) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

type Results

type Results map[string]*Result

Results is our wrapper around a map of snakified result names to result objects

func NewResults

func NewResults() Results

NewResults creates a new empty set of results

func (Results) Clone added in v0.4.0

func (r Results) Clone() Results

Clone returns a clone of this results set

func (Results) Length added in v0.8.0

func (r Results) Length() int

Length is called to get the length of this object

func (Results) Reduce added in v0.8.0

func (r Results) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (Results) Resolve

func (r Results) Resolve(key string) types.XValue

Resolve resolves the passed in key, which is snakified before lookup

func (Results) Save

func (r Results) Save(name string, value string, category string, categoryLocalized string, nodeUUID NodeUUID, input string, createdOn time.Time)

Save saves a new result in our map. The key is saved in a snakified format

func (Results) ToXJSON added in v0.8.0

func (r Results) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

type Route

type Route struct {
	// contains filtered or unexported fields
}

func NewRoute

func NewRoute(exit ExitUUID, match string) Route

func (Route) Exit

func (r Route) Exit() ExitUUID

func (Route) Match

func (r Route) Match() string

type Router

type Router interface {
	PickRoute(FlowRun, []Exit, Step) (string, Route, error)
	Validate([]Exit) error
	ResultName() string
	utils.Typed
}

type RunEnvironment added in v0.8.0

type RunEnvironment interface {
	utils.Environment

	FindLocations(string, utils.LocationLevel, *utils.Location) ([]*utils.Location, error)
	FindLocationsFuzzy(string, utils.LocationLevel, *utils.Location) ([]*utils.Location, error)
	LookupLocation(LocationPath) (*utils.Location, error)
}

RunEnvironment is a run specific environment which adds location functionality required by some router tests

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"
)

func (RunStatus) String

func (r RunStatus) String() string

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.

type RunUUID

type RunUUID utils.UUID

RunUUID is the UUID of a flow run

func (RunUUID) String

func (u RunUUID) String() string

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
	ParentRun() RunSummary

	Events() []Event
	LogEvent(Event)

	EngineConfig() EngineConfig
	HTTPClient() *utils.HTTPClient
}

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)
	GetChannelSet() (*ChannelSet, error)

	GetField(string) (*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)
}

SessionAssets is the assets available to a session

type SessionStatus added in v0.4.0

type SessionStatus string

SessionStatus 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 Step

type Step interface {
	types.XValue
	types.XResolvable

	UUID() StepUUID
	NodeUUID() NodeUUID
	ExitUUID() ExitUUID

	ArrivedOn() time.Time
	LeftOn() *time.Time

	Leave(ExitUUID)
}

type StepUUID

type StepUUID utils.UUID

StepUUID is the UUID of a run step

func (StepUUID) String

func (u StepUUID) String() string

type Translations

type Translations interface {
	GetTextArray(uuid utils.UUID, key string) []string
}

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.Typed
	types.XValue
	types.XResolvable

	Environment() utils.Environment
	Flow() Flow
	Contact() *Contact
	Params() types.XValue
	TriggeredOn() time.Time
}

Trigger represents something which can initiate a session with the flow engine. It has several properties which can be accessed in expressions:

  • `type` the type of the trigger, one of "manual" or "flow"
  • `params` the parameters passed to the trigger

Examples:

@trigger.type -> flow_action
@trigger.params -> {"source": "website","address": {"state": "WA"}}
@(json(trigger)) -> {"params":{"source":"website","address":{"state":"WA"}},"type":"flow_action"}

@context trigger

type URNList

type URNList []*ContactURN

URNList is the list of a contact's URNs

func ReadURNList added in v0.6.0

func ReadURNList(session Session, rawURNs []urns.URN) (URNList, error)

ReadURNList parses contact URN list from the given list of raw URNs

func (URNList) Index added in v0.8.0

func (l URNList) Index(index int) types.XValue

Index is called when this object is indexed into in an expression

func (URNList) Length added in v0.8.0

func (l URNList) Length() int

Length is called when the length of this object is requested in an expression

func (URNList) RawURNs added in v0.6.0

func (l URNList) RawURNs(includeChannels bool) []urns.URN

RawURNs returns the raw URNs with or without channel information

func (URNList) Reduce added in v0.8.0

func (l URNList) Reduce() types.XPrimitive

Reduce is called when this object needs to be reduced to a primitive

func (URNList) Resolve

func (l URNList) Resolve(key string) types.XValue

Resolve resolves the given key when this URN list is referenced in an expression

func (URNList) ToXJSON added in v0.8.0

func (l URNList) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

func (URNList) WithScheme added in v0.4.4

func (l URNList) WithScheme(scheme string) URNList

WithScheme returns a new URN list containing of only URNs of the given scheme

type Wait

type Wait interface {
	utils.Typed

	Begin(FlowRun, Step)
	CanResume([]Event) bool
	HasTimedOut() bool

	Resume(FlowRun)
	ResumeByTimeOut(FlowRun)
}

type WebhookCall added in v0.8.0

type WebhookCall struct {
	// contains filtered or unexported fields
}

WebhookCall describes a call made to an external service. It has several properties which can be accessed in expressions:

  • `status` the status of the webhook - one of "success", "connection_error" or "response_error"
  • `status_code` the status code of the response
  • `body` the body of the response
  • `json` the parsed JSON response (if response body was JSON)
  • `json.[key]` sub-elements of the parsed JSON response
  • `request` the raw request made, including headers
  • `response` the raw response received, including headers

Examples:

@run.webhook.status_code -> 200
@run.webhook.json.results.0.state -> WA

@context webhook

func MakeWebhookCall added in v0.8.0

func MakeWebhookCall(session Session, request *http.Request) (*WebhookCall, error)

MakeWebhookCall fires the passed in http request, returning any errors encountered. RequestResponse is always set regardless of any errors being set

func (*WebhookCall) Body added in v0.8.0

func (w *WebhookCall) Body() string

Body returns the response body

func (*WebhookCall) JSON added in v0.8.0

func (w *WebhookCall) JSON() types.XValue

JSON returns the response as a JSON fragment

func (*WebhookCall) MarshalJSON added in v0.8.0

func (r *WebhookCall) MarshalJSON() ([]byte, error)

MarshalJSON marshals this request response into JSON

func (*WebhookCall) Method added in v0.9.3

func (w *WebhookCall) Method() string

Method returns the full HTTP method

func (*WebhookCall) Reduce added in v0.8.0

func (w *WebhookCall) Reduce() types.XPrimitive

Reduce reduces this to a string of method and URL, e.g. "GET http://example.com/hook.php"

func (*WebhookCall) Request added in v0.8.0

func (w *WebhookCall) Request() string

Request returns the request trace

func (*WebhookCall) Resolve added in v0.8.0

func (w *WebhookCall) Resolve(key string) types.XValue

Resolve resolves the given key when this webhook is referenced in an expression

func (*WebhookCall) Response added in v0.8.0

func (w *WebhookCall) Response() string

Response returns the response trace

func (*WebhookCall) Status added in v0.8.0

func (w *WebhookCall) Status() WebhookStatus

Status returns the response status message

func (*WebhookCall) StatusCode added in v0.8.0

func (w *WebhookCall) StatusCode() int

StatusCode returns the response status code

func (*WebhookCall) ToXJSON added in v0.8.0

func (w *WebhookCall) ToXJSON() types.XText

ToXJSON is called when this type is passed to @(json(...))

func (*WebhookCall) URL added in v0.8.0

func (w *WebhookCall) URL() string

URL returns the full URL

func (*WebhookCall) UnmarshalJSON added in v0.8.0

func (w *WebhookCall) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals a request response from the given JSON

type WebhookStatus added in v0.8.0

type WebhookStatus string

WebhookStatus represents the status of a WebhookRequest

const (
	// WebhookStatusSuccess represents that the webhook was successful
	WebhookStatusSuccess WebhookStatus = "success"

	// WebhookStatusConnectionError represents that the webhook had a connection error
	WebhookStatusConnectionError WebhookStatus = "connection_error"

	// WebhookStatusResponseError represents that the webhook response had a non 2xx status code
	WebhookStatusResponseError WebhookStatus = "response_error"
)

func (WebhookStatus) String added in v0.8.0

func (r WebhookStatus) String() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL