flows

package
v0.222.0 Latest Latest
Warning

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

Go to latest
Published: Aug 19, 2024 License: AGPL-3.0, AGPL-3.0-or-later Imports: 26 Imported by: 44

Documentation

Index

Constants

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

location levels which can be field types

View Source
const NilMsgID = MsgID(0)

NilMsgID is our constant for nil message ids

View Source
const RedactionMask = "****************"

RedactionMask is the redaction mask for HTTP service logs

Variables

View Source
var EmptyHistory = &SessionHistory{}

EmptyHistory is used for a session which has no history

View Source
var RunContextTopLevels = []string{
	"child",
	"contact",
	"fields",
	"globals",
	"input",
	"legacy_extra",
	"node",
	"parent",
	"results",
	"resume",
	"run",
	"ticket",
	"trigger",
	"urns",
	"webhook",
}

RunContextTopLevels are the allowed top-level variables for expression evaluations

Functions

func ContactQueryEscaping added in v0.55.0

func ContactQueryEscaping(s string) string

ContactQueryEscaping is the escaping function used for expressions in contact queries

func Context

func Context(env envs.Environment, contextable Contextable) types.XValue

Context generates a lazy object for use in expressions

func ContextFunc added in v0.33.8

func ContextFunc(env envs.Environment, fn func(envs.Environment) map[string]types.XValue) *types.XObject

ContextFunc generates a lazy object for use in expressions

func NewAssetsEnvironment added in v0.190.1

func NewAssetsEnvironment(e envs.Environment, la *LocationAssets) envs.Environment

NewAssetsEnvironment creates a new environment from a base environment and adds support for location resolving using location assets.

func NewSessionEnvironment added in v0.190.1

func NewSessionEnvironment(s Session) envs.Environment

NewSessionEnvironment creates a new environment from a session's base environment that merges some properties with those from the contact.

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 {
	utils.Typed
	Localizable
	FlowTypeRestricted

	UUID() ActionUUID
	Execute(Run, Step, ModifierCallback, EventCallback) error
	Validate() error
}

Action is an action within a flow node

type ActionUUID

type ActionUUID uuids.UUID

ActionUUID is the UUID of an action

type AirtimeService added in v0.48.0

type AirtimeService interface {
	// Transfer transfers airtime to the given URN
	Transfer(sender urns.URN, recipient urns.URN, amounts map[string]decimal.Decimal, logHTTP HTTPLogCallback) (*AirtimeTransfer, error)
}

AirtimeService provides airtime functionality to the engine

type AirtimeTransfer added in v0.48.0

type AirtimeTransfer struct {
	UUID          AirtimeTransferUUID
	ExternalID    string
	Sender        urns.URN
	Recipient     urns.URN
	Currency      string
	DesiredAmount decimal.Decimal
	ActualAmount  decimal.Decimal
}

AirtimeTransfer is the result of an attempted airtime transfer

type AirtimeTransferStatus added in v0.48.0

type AirtimeTransferStatus string

AirtimeTransferStatus is a status of a airtime transfer

const (
	AirtimeTransferStatusSuccess AirtimeTransferStatus = "success"
	AirtimeTransferStatusFailed  AirtimeTransferStatus = "failed"
)

possible values for airtime transfer statuses

type AirtimeTransferUUID added in v0.216.1

type AirtimeTransferUUID uuids.UUID

AirtimeTransferUUID is the UUID of a airtime transfer

type BaseMsg added in v0.6.0

type BaseMsg struct {
	UUID_        MsgUUID                  `json:"uuid"`
	ID_          MsgID                    `json:"id,omitempty"`
	URN_         urns.URN                 `json:"urn,omitempty" validate:"omitempty,urn"`
	Channel_     *assets.ChannelReference `json:"channel,omitempty"`
	Text_        string                   `json:"text"`
	Attachments_ []utils.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() []utils.Attachment

Attachments returns the attachments of this message

func (*BaseMsg) Channel added in v0.6.0

func (m *BaseMsg) Channel() *assets.ChannelReference

Channel returns the channel of this message

func (*BaseMsg) ID added in v0.15.0

func (m *BaseMsg) ID() MsgID

ID returns the internal ID of this message

func (*BaseMsg) SetID added in v0.24.0

func (m *BaseMsg) SetID(id MsgID)

SetID sets the internal ID of this message

func (*BaseMsg) SetURN added in v0.41.17

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

SetURN returns the URN 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 BroadcastTranslations added in v0.184.0

type BroadcastTranslations map[i18n.Language]*MsgContent

func (BroadcastTranslations) ForContact added in v0.184.0

func (b BroadcastTranslations) ForContact(e envs.Environment, c *Contact, baseLanguage i18n.Language) (*MsgContent, i18n.Locale)

ForContact is a utility to help callers get the message content for a contact

type Call added in v0.171.0

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

Call represents a call over a specific channel and URN

func NewCall added in v0.171.0

func NewCall(channel *assets.ChannelReference, urn urns.URN) *Call

NewCall creates a new call

func (*Call) Channel added in v0.171.0

func (c *Call) Channel() *assets.ChannelReference

Channel returns a reference to the channel

func (*Call) MarshalJSON added in v0.171.0

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

MarshalJSON marshals this call into JSON

func (*Call) URN added in v0.171.0

func (c *Call) URN() urns.URN

URN returns the URN

func (*Call) UnmarshalJSON added in v0.171.0

func (c *Call) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals a call from JSON

type CallStatus added in v0.51.0

type CallStatus string

CallStatus represents the status of a call to an external service

const (
	// CallStatusSuccess represents that the webhook was successful
	CallStatusSuccess CallStatus = "success"

	// CallStatusConnectionError represents that the webhook had a connection error
	CallStatusConnectionError CallStatus = "connection_error"

	// CallStatusResponseError represents that the webhook response had a non 2xx status code
	CallStatusResponseError CallStatus = "response_error"

	// CallStatusSubscriberGone represents a special state of resthook responses which indicate the caller must remove that subscriber
	CallStatusSubscriberGone CallStatus = "subscriber_gone"
)

func HTTPStatusFromCode added in v0.53.0

func HTTPStatusFromCode(t *httpx.Trace) CallStatus

HTTPStatusFromCode uses the status code to determine status of an HTTP log

type Category added in v0.79.0

type Category interface {
	Localizable

	UUID() CategoryUUID
	Name() string
	ExitUUID() ExitUUID
}

Category is how routers map results to exits

type CategoryUUID added in v0.30.2

type CategoryUUID uuids.UUID

CategoryUUID is the UUID of a node category

type Channel

type Channel struct {
	assets.Channel
}

Channel represents a means for sending and receiving input during a flow run

func NewChannel added in v0.6.0

func NewChannel(asset assets.Channel) *Channel

NewChannel creates a new channenl

func (*Channel) Asset added in v0.15.0

func (c *Channel) Asset() assets.Channel

Asset returns the underlying asset

func (*Channel) Context added in v0.33.8

func (c *Channel) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

__default__:text -> the name
uuid:text -> the UUID of the channel
name:text -> the name of the channel
address:text -> the address of the channel

@context channel

func (*Channel) HasFeature added in v0.195.0

func (c *Channel) HasFeature(feat assets.ChannelFeature) bool

HasFeature returns whether this channel has the given feature

func (*Channel) HasRole added in v0.6.0

func (c *Channel) HasRole(role assets.ChannelRole) bool

HasRole returns whether this channel has the given role

func (*Channel) Reference added in v0.5.0

func (c *Channel) Reference() *assets.ChannelReference

Reference returns a reference to this channel

func (*Channel) String

func (c *Channel) String() string

func (*Channel) SupportsScheme added in v0.6.0

func (c *Channel) SupportsScheme(scheme string) bool

SupportsScheme returns whether this channel supports the given URN scheme

type ChannelAssets added in v0.15.0

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

ChannelAssets provides access to all channel assets

func NewChannelAssets added in v0.15.0

func NewChannelAssets(channels []assets.Channel) *ChannelAssets

NewChannelAssets creates a new set of channel assets

func (*ChannelAssets) Get added in v0.15.0

func (s *ChannelAssets) Get(uuid assets.ChannelUUID) *Channel

Get returns the channel with the given UUID

func (*ChannelAssets) GetForURN added in v0.15.0

func (s *ChannelAssets) GetForURN(urn *ContactURN, role assets.ChannelRole) *Channel

GetForURN returns the best channel for the given URN

type Classification added in v0.51.0

type Classification struct {
	Intents  []ExtractedIntent            `json:"intents,omitempty"`
	Entities map[string][]ExtractedEntity `json:"entities,omitempty"`
}

Classification is the result of an NLU classification

type ClassificationService added in v0.51.0

type ClassificationService interface {
	Classify(env envs.Environment, input string, logHTTP HTTPLogCallback) (*Classification, error)
}

ClassificationService provides NLU functionality to the engine

type Classifier added in v0.51.0

type Classifier struct {
	assets.Classifier
}

Classifier represents an NLU classifier.

func NewClassifier added in v0.51.0

func NewClassifier(asset assets.Classifier) *Classifier

NewClassifier returns a new classifier object from the given classifier asset

func (*Classifier) Asset added in v0.51.0

func (c *Classifier) Asset() assets.Classifier

Asset returns the underlying asset

func (*Classifier) Reference added in v0.51.0

func (c *Classifier) Reference() *assets.ClassifierReference

Reference returns a reference to this classifier

type ClassifierAssets added in v0.51.0

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

ClassifierAssets provides access to all classifier assets

func NewClassifierAssets added in v0.51.0

func NewClassifierAssets(classifiers []assets.Classifier) *ClassifierAssets

NewClassifierAssets creates a new set of classifier assets

func (*ClassifierAssets) Get added in v0.51.0

Get returns the classifier with the given UUID

type Contact

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

Contact represents a person who is interacting with the flow

func NewContact added in v0.5.1

func NewContact(
	sa SessionAssets,
	uuid ContactUUID,
	id ContactID,
	name string,
	language i18n.Language,
	status ContactStatus,
	timezone *time.Location,
	createdOn time.Time,
	lastSeenOn *time.Time,
	urns []urns.URN,
	groups []*assets.GroupReference,
	fields map[string]*Value,
	ticket *Ticket,
	missing assets.MissingCallback) (*Contact, error)

NewContact creates a new contact with the passed in attributes

func NewEmptyContact added in v0.14.7

func NewEmptyContact(sa SessionAssets, name string, language i18n.Language, timezone *time.Location) *Contact

NewEmptyContact creates a new empy contact with the passed in name, language and location

func ReadContact

func ReadContact(sa SessionAssets, data json.RawMessage, missing assets.MissingCallback) (*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, channel *Channel) bool

AddURN adds a new URN to this contact

func (*Contact) ClearURNs added in v0.93.0

func (c *Contact) ClearURNs() bool

ClearURNs clears the URNs on this contact

func (*Contact) Clone added in v0.4.0

func (c *Contact) Clone() *Contact

Clone creates a copy of this contact

func (*Contact) Context added in v0.33.8

func (c *Contact) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

__default__:text -> the name or URN
uuid:text -> the UUID of the contact
id:text -> the numeric ID of the contact
first_name:text -> the first name of the contact
name:text -> the name of the contact
language:text -> the language of the contact as 3-letter ISO code
status:text -> the status of the contact
created_on:datetime -> the creation date of the contact
last_seen_on:any -> the last seen date of the contact
urns:[]text -> the URNs belonging to the contact
urn:text -> the preferred URN of the contact
groups:[]group -> the groups the contact belongs to
fields:fields -> the custom field values of the contact
channel:channel -> the preferred channel of the contact

@context contact

func (*Contact) Country added in v0.89.0

func (c *Contact) Country() i18n.Country

Country gets the country for this contact..

TODO: currently this is derived from their preferred channel or any tel URNs but probably should become an explicit field at some point

func (*Contact) CreatedOn added in v0.10.15

func (c *Contact) CreatedOn() time.Time

CreatedOn returns the created on time of this contact

func (*Contact) Equal added in v0.20.0

func (c *Contact) Equal(other *Contact) bool

Equal returns true if this instance is equal to the given instance

func (*Contact) Fields

func (c *Contact) Fields() FieldValues

Fields returns this contact's field values

func (*Contact) Format added in v0.10.18

func (c *Contact) Format(env envs.Environment) string

Format returns a friendly string version of this contact depending on what fields are set

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) ID added in v0.10.5

func (c *Contact) ID() ContactID

ID returns the numeric ID of this contact

func (*Contact) Language

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

Language gets the language for this contact

func (*Contact) LastSeenOn added in v0.100.0

func (c *Contact) LastSeenOn() *time.Time

LastSeenOn returns the last seen on time of this contact

func (*Contact) Locale added in v0.89.0

func (c *Contact) Locale(env envs.Environment) i18n.Locale

Locale gets the locale for this contact, using the environment country if contact doesn't have one

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) PreferredChannel added in v0.11.0

func (c *Contact) PreferredChannel() *Channel

PreferredChannel gets the preferred channel for this contact, i.e. the channel we would use for sending

func (*Contact) PreferredURN added in v0.27.5

func (c *Contact) PreferredURN() *ContactURN

PreferredURN gets the preferred URN for this contact, i.e. the URN we would use for sending

func (*Contact) QueryProperty added in v0.45.1

func (c *Contact) QueryProperty(env envs.Environment, key string, propType contactql.PropertyType) []any

QueryProperty resolves a contact query search key for this contact

Note that this method excludes id, group and flow search attributes as those are disallowed query based groups.

func (*Contact) ReevaluateQueryBasedGroups added in v0.103.0

func (c *Contact) ReevaluateQueryBasedGroups(env envs.Environment) ([]*Group, []*Group)

ReevaluateQueryBasedGroups reevaluates membership of all query based 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) RemoveURN added in v0.74.0

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

RemoveURN adds a new URN to this contact

func (*Contact) ResolveDestinations added in v0.27.5

func (c *Contact) ResolveDestinations(all bool) []Destination

ResolveDestinations resolves possible URN/channel destinations

func (*Contact) SetLanguage

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

SetLanguage sets the language for this contact

func (*Contact) SetLastSeenOn added in v0.100.0

func (c *Contact) SetLastSeenOn(t time.Time)

SetLastSeenOn sets the last seen on time of this contact

func (*Contact) SetName

func (c *Contact) SetName(name string)

SetName sets the name of this contact

func (*Contact) SetStatus added in v0.84.0

func (c *Contact) SetStatus(status ContactStatus)

SetStatus sets the status of this contact (blocked, stopped or active)

func (*Contact) SetTicket added in v0.185.0

func (c *Contact) SetTicket(t *Ticket)

SetTicket sets the ticket of this contact

func (*Contact) SetTimezone

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

SetTimezone sets the timezone of this contact

func (*Contact) Status added in v0.84.0

func (c *Contact) Status() ContactStatus

Status returns the contact status

func (*Contact) Ticket added in v0.185.0

func (c *Contact) Ticket() *Ticket

Tickets returns the open ticket for this contact if they have one

func (*Contact) Timezone

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

Timezone returns the timezone of this contact

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

UpdatePreferredChannel updates the preferred channel and returns whether any change was made

type ContactID added in v0.15.0

type ContactID int64

ContactID is the ID of a 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

func (*ContactReference) Identity added in v0.29.0

func (r *ContactReference) Identity() string

Identity returns the unique identity of the asset

func (*ContactReference) String added in v0.29.0

func (r *ContactReference) String() string

func (*ContactReference) Type added in v0.29.0

func (r *ContactReference) Type() string

Type returns the name of the asset type

func (*ContactReference) Variable added in v0.29.0

func (r *ContactReference) Variable() bool

Variable returns whether this a variable (vs concrete) reference

type ContactStatus added in v0.84.0

type ContactStatus string

ContactStatus is status in which a contact is in

const (
	// ContactStatusActive is the contact status of active
	ContactStatusActive ContactStatus = "active"

	// ContactStatusBlocked is the contact status of blocked
	ContactStatusBlocked ContactStatus = "blocked"

	// ContactStatusStopped is the contact status of stopped
	ContactStatusStopped ContactStatus = "stopped"

	// ContactStatusArchived is the contact status of archived
	ContactStatusArchived ContactStatus = "archived"
)

type ContactURN added in v0.6.0

type ContactURN struct {
	// 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_

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 ParseRawURN added in v0.23.0

func ParseRawURN(ca *ChannelAssets, rawURN urns.URN, missing assets.MissingCallback) (*ContactURN, error)

ParseRawURN converts a raw URN to a ContactURN by extracting it's channel reference

func (*ContactURN) Channel added in v0.6.0

func (u *ContactURN) Channel() *Channel

Channel gets the channel associated with this URN

func (*ContactURN) Equal added in v0.23.0

func (u *ContactURN) Equal(other *ContactURN) bool

Equal determines if this URN is equal to another

func (*ContactURN) SetChannel added in v0.6.0

func (u *ContactURN) SetChannel(channel *Channel)

SetChannel sets the channel associated with this URN

func (*ContactURN) String added in v0.6.0

func (u *ContactURN) String() string

func (*ContactURN) ToXValue added in v0.32.0

func (u *ContactURN) ToXValue(env envs.Environment) types.XValue

ToXValue returns a representation of this object for use in expressions

func (*ContactURN) URN added in v0.23.0

func (u *ContactURN) URN() urns.URN

URN gets the underlying URN

type ContactUUID

type ContactUUID uuids.UUID

ContactUUID is the UUID of a contact

type Contextable added in v0.33.8

type Contextable interface {
	Context(env envs.Environment) map[string]types.XValue
}

Contextable is an object that can accessed in expressions as a object with properties

type Dependency added in v0.68.0

type Dependency interface {
	Reference() assets.Reference
	Type() string
	Missing() bool
}

type Destination added in v0.27.5

type Destination struct {
	Channel *Channel
	URN     *ContactURN
}

Destination is a sendable channel and URN pair

type Dial added in v0.112.0

type Dial struct {
	Status   DialStatus `json:"status" validate:"required,dial_status"`
	Duration int        `json:"duration"`
}

Dial represents a dialed call or attempt to dial a phone number

func NewDial added in v0.112.0

func NewDial(status DialStatus, duration int) *Dial

NewDial creates a new dial

func (*Dial) Context added in v0.112.0

func (d *Dial) Context(env envs.Environment) map[string]types.XValue

Context for dial resumes additionally exposes the dial object

type DialStatus added in v0.112.0

type DialStatus string

DialStatus is the type for different dial statuses

const (
	DialStatusAnswered DialStatus = "answered"
	DialStatusNoAnswer DialStatus = "no_answer"
	DialStatusBusy     DialStatus = "busy"
	DialStatusFailed   DialStatus = "failed"
)

possible dial status values

type EmailService added in v0.61.0

type EmailService interface {
	Send(addresses []string, subject, body string) error
}

EmailService provides email functionality to the engine

type Engine added in v0.27.4

type Engine interface {
	NewSession(SessionAssets, Trigger) (Session, Sprint, error)
	ReadSession(SessionAssets, json.RawMessage, assets.MissingCallback) (Session, error)

	Evaluator() *excellent.Evaluator
	Services() Services
	Options() *EngineOptions
}

Engine provides callers with session starting and resuming

type EngineOptions added in v0.190.0

type EngineOptions struct {
	MaxStepsPerSprint    int
	MaxResumesPerSession int
	MaxTemplateChars     int
	MaxFieldChars        int
	MaxResultChars       int
}

type Event

type Event interface {
	utils.Typed

	CreatedOn() time.Time
	StepUUID() StepUUID
	SetStepUUID(StepUUID)
}

Event describes a state change

type EventCallback added in v0.26.0

type EventCallback func(Event)

EventCallback is a callback invoked when an event has been generated

type Exit

type Exit interface {
	UUID() ExitUUID
	DestinationUUID() NodeUUID
}

Exit is a route out of a node and optionally to another node

type ExitUUID

type ExitUUID uuids.UUID

ExitUUID is the UUID of a node exit

type ExtractedEntity added in v0.51.0

type ExtractedEntity struct {
	Value      string          `json:"value"`
	Confidence decimal.Decimal `json:"confidence"`
}

ExtractedEntity models an entity match

type ExtractedIntent added in v0.51.0

type ExtractedIntent struct {
	Name       string          `json:"name"`
	Confidence decimal.Decimal `json:"confidence"`
}

ExtractedIntent models an intent match

type ExtractedReference added in v0.71.2

type ExtractedReference struct {
	Reference assets.Reference
	// contains filtered or unexported fields
}

ExtractedReference is a reference and its location in a flow

func NewExtractedReference added in v0.74.0

func NewExtractedReference(n Node, a Action, r Router, l i18n.Language, ref assets.Reference) ExtractedReference

NewExtractedReference creates a new extracted reference

type ExtractedResult added in v0.71.3

type ExtractedResult struct {
	Node   Node
	Action Action
	Router Router
	Info   *ResultInfo
}

type ExtractedTemplate added in v0.74.0

type ExtractedTemplate struct {
	Template string
	// contains filtered or unexported fields
}

ExtractedTemplate is a template and its location in a flow

func NewExtractedTemplate added in v0.74.0

func NewExtractedTemplate(n Node, a Action, r Router, l i18n.Language, t string) ExtractedTemplate

NewExtractedTemplate creates a new extracted template

type Field

type Field struct {
	assets.Field
}

Field represents a contact field

func NewField added in v0.4.0

func NewField(asset assets.Field) *Field

NewField creates a new field from the given asset

func (*Field) Asset added in v0.15.0

func (f *Field) Asset() assets.Field

Asset returns the underlying asset

func (*Field) Reference added in v0.24.0

func (f *Field) Reference() *assets.FieldReference

Reference returns a reference to this field

type FieldAssets added in v0.15.0

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

FieldAssets provides access to all field assets

func NewFieldAssets added in v0.15.0

func NewFieldAssets(fields []assets.Field) *FieldAssets

NewFieldAssets creates a new set of field assets

func (*FieldAssets) All added in v0.15.0

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

All returns all the fields in this set

func (*FieldAssets) FirstOfType added in v0.15.0

func (s *FieldAssets) FirstOfType(valueType assets.FieldType) *Field

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

func (*FieldAssets) Get added in v0.15.0

func (s *FieldAssets) Get(key string) *Field

Get returns the contact field with the given key

func (*FieldAssets) ResolveField added in v0.78.0

func (s *FieldAssets) ResolveField(key string) assets.Field

func (*FieldAssets) ResolveFlow added in v0.151.0

func (s *FieldAssets) ResolveFlow(name string) assets.Flow

func (*FieldAssets) ResolveGroup added in v0.78.0

func (s *FieldAssets) ResolveGroup(name string) assets.Group

type FieldValue added in v0.4.0

type FieldValue struct {
	*Value
	// contains filtered or unexported fields
}

FieldValue represents a field and a set of values for that field

func NewFieldValue added in v0.4.0

func NewFieldValue(field *Field, value *Value) *FieldValue

NewFieldValue creates a new field value

func (*FieldValue) QueryValue added in v0.32.0

func (v *FieldValue) QueryValue() any

QueryValue returns the value for use in contact queries

func (*FieldValue) ToXValue added in v0.32.0

func (v *FieldValue) ToXValue(env envs.Environment) types.XValue

ToXValue returns a representation of this object for use in expressions

type FieldValues added in v0.4.0

type FieldValues map[string]*FieldValue

FieldValues is the set of all field values for a contact

func NewFieldValues added in v0.15.2

func NewFieldValues(a SessionAssets, values map[string]*Value, missing assets.MissingCallback) FieldValues

NewFieldValues creates a new field value map

func (FieldValues) Context added in v0.30.4

func (f FieldValues) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

func (FieldValues) Get added in v0.19.2

func (f FieldValues) Get(field *Field) *Value

Get gets the value set for the given field

func (FieldValues) Parse added in v0.24.0

func (f FieldValues) Parse(env envs.Environment, fields *FieldAssets, field *Field, rawValue string) *Value

Parse parses a raw string field value into the different possible types

func (FieldValues) Set added in v0.19.2

func (f FieldValues) Set(field *Field, value *Value)

Set sets the value for the given field (can be null to clear it)

type Flow

type Flow interface {
	Contextable

	// spec properties
	UUID() assets.FlowUUID
	Name() string
	Revision() int
	Language() i18n.Language
	Type() FlowType
	ExpireAfterMinutes() int
	Localization() Localization
	UI() json.RawMessage
	Nodes() []Node
	GetNode(uuid NodeUUID) Node

	Asset() assets.Flow
	Reference(bool) *assets.FlowReference

	Inspect(sa SessionAssets) *Inspection
	ExtractTemplates() []string
	ExtractLocalizables() []string
	ChangeLanguage(i18n.Language) (Flow, error)
}

Flow describes the ordered logic of actions and routers

type FlowAssets added in v0.15.0

type FlowAssets interface {
	Get(assets.FlowUUID) (Flow, error)
	FindByName(string) (Flow, error)
}

FlowAssets provides access to flow assets

type FlowType added in v0.14.0

type FlowType string

FlowType represents the different types of flows

const (
	// FlowTypeMessaging is a flow that is run over a messaging channel
	FlowTypeMessaging FlowType = "messaging"

	// FlowTypeMessagingBackground is a non-interactive messaging flow (i.e. never waits for input)
	FlowTypeMessagingBackground FlowType = "messaging_background"

	// FlowTypeMessagingOffline is a flow which is run over an offline messaging client like Surveyor
	FlowTypeMessagingOffline FlowType = "messaging_offline"

	// FlowTypeVoice is a flow which is run over IVR
	FlowTypeVoice FlowType = "voice"
)

func (FlowType) Allows added in v0.107.0

func (t FlowType) Allows(r FlowTypeRestricted) bool

Allows returns whether this flow type allows the given item

type FlowTypeRestricted added in v0.107.0

type FlowTypeRestricted interface {
	AllowedFlowTypes() []FlowType
}

FlowTypeRestricted is a part of a flow which can be restricted to certain flow types

type Global added in v0.57.0

type Global struct {
	assets.Global
}

Global represents a constant value available in expressions.

func NewGlobal added in v0.57.0

func NewGlobal(asset assets.Global) *Global

NewGlobal returns a new global object from the given global asset

func (*Global) Asset added in v0.57.0

func (g *Global) Asset() assets.Global

Asset returns the underlying asset

func (*Global) Reference added in v0.57.0

func (g *Global) Reference() *assets.GlobalReference

Reference returns a reference to this global

type GlobalAssets added in v0.57.0

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

GlobalAssets provides access to all global assets

func NewGlobalAssets added in v0.57.0

func NewGlobalAssets(globals []assets.Global) *GlobalAssets

NewGlobalAssets creates a new set of global assets

func (*GlobalAssets) Context added in v0.57.0

func (s *GlobalAssets) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

func (*GlobalAssets) Get added in v0.57.0

func (s *GlobalAssets) Get(key string) *Global

Get returns the global with the given key

type Group

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

Group adds some functionality to group assets.

func NewGroup

func NewGroup(env envs.Environment, fields *FieldAssets, asset assets.Group) (*Group, error)

NewGroup returns a new group object from the given group asset

func (*Group) Asset added in v0.15.0

func (g *Group) Asset() assets.Group

Asset returns the underlying asset

func (*Group) CheckQueryBasedMembership added in v0.103.0

func (g *Group) CheckQueryBasedMembership(env envs.Environment, contact *Contact) bool

CheckQueryBasedMembership returns whether the given contact belongs in a query based group

func (*Group) Reference added in v0.4.0

func (g *Group) Reference() *assets.GroupReference

Reference returns a reference to this group

func (*Group) ToXValue added in v0.32.0

func (g *Group) ToXValue(env envs.Environment) types.XValue

ToXValue returns a representation of this object for use in expressions

uuid:text -> the UUID of the group
name:text -> the name of the group

@context group

func (*Group) UsesQuery added in v0.103.0

func (g *Group) UsesQuery() bool

UsesQuery returns whether this group is query based

type GroupAssets added in v0.15.0

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

GroupAssets provides access to all group assets

func NewGroupAssets added in v0.15.0

func NewGroupAssets(env envs.Environment, fields *FieldAssets, groups []assets.Group) (*GroupAssets, []assets.Group)

NewGroupAssets creates a new set of group assets

func (*GroupAssets) All added in v0.15.0

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

All returns all the groups

func (*GroupAssets) FindByName added in v0.15.0

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

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

func (*GroupAssets) Get added in v0.15.0

func (s *GroupAssets) Get(uuid assets.GroupUUID) *Group

Get returns the group with the given UUID

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(a SessionAssets, refs []*assets.GroupReference, missing assets.MissingCallback) *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) Clear added in v0.150.1

func (l *GroupList) Clear()

Clear clears 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 assets.GroupUUID) *Group

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

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) ToXValue added in v0.32.0

func (l GroupList) ToXValue(env envs.Environment) types.XValue

ToXValue returns a representation of this object for use in expressions

type HTTPLog added in v0.53.0

type HTTPLog struct {
	*HTTPLogWithoutTime
	CreatedOn time.Time `json:"created_on" validate:"required"`
}

HTTPLog describes an HTTP request/response

func NewHTTPLog added in v0.53.0

func NewHTTPLog(trace *httpx.Trace, statusFn HTTPLogStatusResolver, redact stringsx.Redactor) *HTTPLog

NewHTTPLog creates a new HTTP log from a trace

type HTTPLogCallback added in v0.53.0

type HTTPLogCallback func(*HTTPLog)

HTTPLogCallback is a function that handles an HTTP log

type HTTPLogStatusResolver added in v0.136.0

type HTTPLogStatusResolver func(t *httpx.Trace) CallStatus

HTTPLogStatusResolver is a function that determines the status of an HTTP log from the response

type HTTPLogWithoutTime added in v0.168.0

type HTTPLogWithoutTime struct {
	*httpx.LogWithoutTime

	Status CallStatus `json:"status" validate:"required"`
}

HTTPLogWithoutTime is an HTTP log no time and status added - used for webhook events which already encode the time

func NewHTTPLogWithoutTime added in v0.168.0

func NewHTTPLogWithoutTime(trace *httpx.Trace, status CallStatus, redact stringsx.Redactor) *HTTPLogWithoutTime

NewHTTPLogWithoutTime creates a new HTTP log from a trace

type HTTPLogger added in v0.53.0

type HTTPLogger struct {
	Logs []*HTTPLog
}

HTTPLogger logs HTTP logs

func (*HTTPLogger) Log added in v0.53.0

func (l *HTTPLogger) Log(h *HTTPLog)

Log logs the given HTTP log

type Hint added in v0.24.0

type Hint interface {
	utils.Typed
}

Hint tells the caller what type of input the flow is expecting

type Input

type Input interface {
	utils.Typed
	Contextable

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

Input describes input from the contact and currently we only support one type of input: `msg`

type InputUUID added in v0.4.0

type InputUUID uuids.UUID

InputUUID is the UUID of an input

type Inspection added in v0.74.0

type Inspection struct {
	Dependencies []Dependency  `json:"dependencies"`
	Issues       []Issue       `json:"issues"`
	Results      []*ResultSpec `json:"results"`
	WaitingExits []ExitUUID    `json:"waiting_exits"`
	ParentRefs   []string      `json:"parent_refs"`
}

Inspection contains the results of flow inspection

type Issue added in v0.72.0

type Issue interface {
	utils.Typed

	NodeUUID() NodeUUID
	ActionUUID() ActionUUID
	Language() i18n.Language
	Description() string
}

Issue is a problem found during flow inspection

type Label

type Label struct {
	assets.Label
}

Label represents a message label

func NewLabel

func NewLabel(asset assets.Label) *Label

NewLabel creates a new label from the given asset

func (*Label) Asset added in v0.15.0

func (l *Label) Asset() assets.Label

Asset returns the underlying asset

func (*Label) Reference added in v0.4.0

func (l *Label) Reference() *assets.LabelReference

Reference returns a reference to this label

type LabelAssets added in v0.15.0

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

LabelAssets provides access to all label assets

func NewLabelAssets added in v0.15.0

func NewLabelAssets(labels []assets.Label) *LabelAssets

NewLabelAssets creates a new set of label assets

func (*LabelAssets) All added in v0.15.0

func (s *LabelAssets) All() []*Label

All returns all the labels

func (*LabelAssets) FindByName added in v0.15.0

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

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

func (*LabelAssets) Get added in v0.15.0

func (s *LabelAssets) Get(uuid assets.LabelUUID) *Label

Get returns the label with the given UUID

type LegacyExtraContributor added in v0.21.3

type LegacyExtraContributor interface {
	LegacyExtra() Results
}

LegacyExtraContributor is something which contributes results for constructing @legacy_extra

type Localizable added in v0.29.0

type Localizable interface {
	LocalizationUUID() uuids.UUID
}

Localizable is anything in the flow definition which can be localized and therefore needs a UUID

type Localization added in v0.6.2

type Localization interface {
	GetItemTranslation(i18n.Language, uuids.UUID, string) []string
	SetItemTranslation(i18n.Language, uuids.UUID, string, []string)
	Languages() []i18n.Language
}

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

type LocationAssets added in v0.15.0

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

LocationAssets provides access to location assets

func NewLocationAssets added in v0.15.0

func NewLocationAssets(hierarchies []assets.LocationHierarchy) *LocationAssets

NewLocationAssets creates a new set of location assets

func (*LocationAssets) Hierarchies added in v0.15.0

func (s *LocationAssets) Hierarchies() []assets.LocationHierarchy

Hierarchies returns all hierarchies

type Modifier added in v0.24.0

type Modifier interface {
	utils.Typed

	Apply(Engine, envs.Environment, SessionAssets, *Contact, EventCallback) bool
}

Modifier is something which can modify a contact

type ModifierCallback added in v0.26.0

type ModifierCallback func(Modifier)

ModifierCallback is a callback invoked when a modifier has been generated

type MsgContent added in v0.218.0

type MsgContent struct {
	Text         string             `json:"text"`
	Attachments  []utils.Attachment `json:"attachments,omitempty"`
	QuickReplies []string           `json:"quick_replies,omitempty"`
}

MsgContent is message content in a particular language

func (*MsgContent) Empty added in v0.218.3

func (c *MsgContent) Empty() bool

type MsgID added in v0.15.0

type MsgID int64

MsgID is the ID of a message

type MsgIn

type MsgIn struct {
	BaseMsg

	ExternalID_ string `json:"external_id,omitempty"`
}

MsgIn represents a incoming message from the session contact

func NewMsgIn added in v0.6.0

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

NewMsgIn creates a new incoming message

func (*MsgIn) ExternalID added in v0.24.0

func (m *MsgIn) ExternalID() string

ExternalID returns the optional external ID of this incoming message

func (*MsgIn) SetExternalID added in v0.24.0

func (m *MsgIn) SetExternalID(id string)

SetExternalID sets the external ID of this message

type MsgOut

type MsgOut struct {
	BaseMsg

	QuickReplies_     []string         `json:"quick_replies,omitempty"`
	Templating_       *MsgTemplating   `json:"templating,omitempty"`
	Topic_            MsgTopic         `json:"topic,omitempty"`
	Locale_           i18n.Locale      `json:"locale,omitempty"`
	UnsendableReason_ UnsendableReason `json:"unsendable_reason,omitempty"`
}

MsgOut represents a outgoing message to the session contact

func NewIVRMsgOut added in v0.80.0

func NewIVRMsgOut(urn urns.URN, channel *assets.ChannelReference, text string, audioURL string, locale i18n.Locale) *MsgOut

NewIVRMsgOut creates a new outgoing message for IVR

func NewMsgOut added in v0.6.0

func NewMsgOut(urn urns.URN, channel *assets.ChannelReference, content *MsgContent, templating *MsgTemplating, topic MsgTopic, locale i18n.Locale, reason UnsendableReason) *MsgOut

NewMsgOut creates a new outgoing message

func (*MsgOut) Locale added in v0.178.0

func (m *MsgOut) Locale() i18n.Locale

Locale returns the locale of this message (if any)

func (*MsgOut) QuickReplies added in v0.6.0

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

QuickReplies returns the quick replies of this outgoing message

func (*MsgOut) Templating added in v0.32.0

func (m *MsgOut) Templating() *MsgTemplating

Templating returns the templating to use to send this message (if any)

func (*MsgOut) Topic added in v0.60.0

func (m *MsgOut) Topic() MsgTopic

Topic returns the topic to use to send this message (if any)

func (*MsgOut) UnsendableReason added in v0.170.0

func (m *MsgOut) UnsendableReason() UnsendableReason

UnsendableReason returns the reason this message can't be sent (if any)

type MsgTemplating added in v0.32.0

type MsgTemplating struct {
	Template   *assets.TemplateReference `json:"template"`
	Components []*TemplatingComponent    `json:"components,omitempty"`
	Variables  []*TemplatingVariable     `json:"variables,omitempty"`
}

MsgTemplating represents any substituted message template that should be applied when sending this message

func NewMsgTemplating added in v0.32.0

func NewMsgTemplating(template *assets.TemplateReference, components []*TemplatingComponent, variables []*TemplatingVariable) *MsgTemplating

NewMsgTemplating creates and returns a new msg template

type MsgTopic added in v0.60.0

type MsgTopic string

MsgTopic is the topic, as required by some channel types

const (
	NilMsgTopic      MsgTopic = ""
	MsgTopicEvent    MsgTopic = "event"
	MsgTopicAccount  MsgTopic = "account"
	MsgTopicPurchase MsgTopic = "purchase"
	MsgTopicAgent    MsgTopic = "agent"
)

possible msg topic values

type MsgUUID added in v0.6.0

type MsgUUID uuids.UUID

MsgUUID is the UUID of a message

type Node

type Node interface {
	UUID() NodeUUID
	Actions() []Action
	Router() Router
	Exits() []Exit

	Validate(Flow, map[uuids.UUID]bool) error

	EnumerateTemplates(Localization, func(Action, Router, i18n.Language, string))
	EnumerateDependencies(Localization, func(Action, Router, i18n.Language, assets.Reference))
	EnumerateResults(func(Action, Router, *ResultInfo))
	EnumerateLocalizables(func(uuids.UUID, string, []string, func([]string)))
}

Node is a single node in a flow

type NodeUUID

type NodeUUID uuids.UUID

NodeUUID is a UUID of a flow node

type OptIn added in v0.195.0

type OptIn struct {
	assets.OptIn
}

OptIn adds some functionality to optin assets.

func NewOptIn added in v0.195.0

func NewOptIn(asset assets.OptIn) *OptIn

NewOptIn returns a new optin object from the given optin asset

func (*OptIn) Asset added in v0.195.0

func (o *OptIn) Asset() assets.OptIn

Asset returns the underlying asset

func (*OptIn) Context added in v0.195.0

func (o *OptIn) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

uuid:text -> the UUID of the optin
name:text -> the name of the optin

@context optin

func (*OptIn) Reference added in v0.195.0

func (o *OptIn) Reference() *assets.OptInReference

Reference returns a reference to this optin

type OptInAssets added in v0.195.0

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

OptInAssets provides access to all optin assets

func NewOptInAssets added in v0.195.0

func NewOptInAssets(optins []assets.OptIn) *OptInAssets

NewOptInAssets creates a new set of optin assets

func (*OptInAssets) Get added in v0.195.0

func (s *OptInAssets) Get(uuid assets.OptInUUID) *OptIn

Get finds the optin with the given UUID

type Resthook added in v0.10.20

type Resthook struct {
	assets.Resthook
}

Resthook represents a named event and a set of subscribers

func NewResthook added in v0.10.20

func NewResthook(asset assets.Resthook) *Resthook

NewResthook returns a new resthook object

func (*Resthook) Asset added in v0.15.0

func (r *Resthook) Asset() assets.Resthook

Asset returns the underlying asset

type ResthookAssets added in v0.15.0

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

ResthookAssets provides access to all resthook assets

func NewResthookAssets added in v0.15.0

func NewResthookAssets(resthooks []assets.Resthook) *ResthookAssets

NewResthookAssets creates a new set of resthook assets

func (*ResthookAssets) FindBySlug added in v0.15.0

func (s *ResthookAssets) FindBySlug(slug string) *Resthook

FindBySlug finds the group with the given UUID

type Result

type Result struct {
	Name              string          `json:"name" validate:"required"`
	Value             string          `json:"value"`
	Category          string          `json:"category,omitempty"`
	CategoryLocalized string          `json:"category_localized,omitempty"`
	NodeUUID          NodeUUID        `json:"node_uuid"`
	Input             string          `json:"input,omitempty"` // should be called operand but too late now
	Extra             json.RawMessage `json:"extra,omitempty"`
	CreatedOn         time.Time       `json:"created_on" validate:"required"`
}

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.

func NewResult added in v0.21.1

func NewResult(name string, value string, category string, categoryLocalized string, nodeUUID NodeUUID, input string, extra json.RawMessage, createdOn time.Time) *Result

NewResult creates a new result

func (*Result) Context added in v0.33.8

func (r *Result) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

__default__:text -> the value
name:text -> the name of the result
value:text -> the value of the result
category:text -> the category of the result
category_localized:text -> the localized category of the result
input:text -> the input of the result
extra:any -> the optional extra data of the result
node_uuid:text -> the UUID of the node in the flow that generated the result
created_on:datetime -> the creation date of the result

@context result

type ResultInfo added in v0.40.0

type ResultInfo struct {
	Key        string   `json:"key"`
	Name       string   `json:"name"`
	Categories []string `json:"categories"`
}

ResultInfo is possible result that a flow might generate

func NewResultInfo added in v0.40.0

func NewResultInfo(name string, categories []string) *ResultInfo

NewResultInfo creates a new result spec

func (*ResultInfo) String added in v0.40.0

func (r *ResultInfo) String() string

type ResultSpec added in v0.30.2

type ResultSpec struct {
	ResultInfo
	NodeUUIDs []string `json:"node_uuids"`
}

func NewResultSpecs added in v0.71.3

func NewResultSpecs(results []ExtractedResult) []*ResultSpec

NewResultSpecs merges extracted results based on key

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) Context added in v0.33.8

func (r Results) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

func (Results) Get added in v0.9.10

func (r Results) Get(key string) *Result

Get returns the result with the given key

func (Results) Save

func (r Results) Save(result *Result)

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

type Resume added in v0.20.0

type Resume interface {
	utils.Typed
	Contextable

	Apply(Run, EventCallback)

	Environment() envs.Environment
	Contact() *Contact
	ResumedOn() time.Time
}

Resume represents something which can resume a session with the flow engine

type Router

type Router interface {
	utils.Typed

	Wait() Wait
	Categories() []Category
	ResultName() string

	Validate(Flow, []Exit) error
	AllowTimeout() bool
	Route(Run, Step, EventCallback) (ExitUUID, string, error)
	RouteTimeout(Run, Step, EventCallback) (ExitUUID, error)

	EnumerateTemplates(Localization, func(i18n.Language, string))
	EnumerateDependencies(Localization, func(i18n.Language, assets.Reference))
	EnumerateResults(func(*ResultInfo))
	EnumerateLocalizables(func(uuids.UUID, string, []string, func([]string)))
}

Router is a router on a note which can pick an exit

type Run added in v0.146.0

type Run interface {
	Contextable
	RunSummary
	FlowReference() *assets.FlowReference

	Session() Session
	SaveResult(*Result)
	SetStatus(RunStatus)
	Webhook() *WebhookCall
	SetWebhook(*WebhookCall)

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

	LogEvent(Step, Event)
	Events() []Event
	ReceivedInput() bool

	EvaluateTemplateValue(string, EventCallback) (types.XValue, bool)
	EvaluateTemplateText(string, excellent.Escaping, bool, EventCallback) (string, bool)
	EvaluateTemplate(string, EventCallback) (string, bool)
	RootContext(envs.Environment) map[string]types.XValue

	GetText(uuids.UUID, string, string) (string, i18n.Language)
	GetTextArray(uuids.UUID, string, []string, []i18n.Language) ([]string, i18n.Language)

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

	CreatedOn() time.Time
	ModifiedOn() time.Time
	ExitedOn() *time.Time
	Exit(RunStatus)
}

Run is a single contact's journey through a flow. It records the path they have taken, and the results that have been collected.

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"

	// RunStatusFailed represents a run that encountered an unrecoverable error
	RunStatusFailed RunStatus = "failed"

	// RunStatusExpired represents a run that expired due to inactivity
	RunStatusExpired RunStatus = "expired"
)

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 uuids.UUID

RunUUID is the UUID of a flow run

type Segment added in v0.142.0

type Segment interface {
	Flow() Flow
	Node() Node
	Exit() Exit
	Operand() string
	Destination() Node
	Time() time.Time
}

Segment is a movement on the flow graph from an exit to another node

type Services added in v0.48.0

type Services interface {
	Email(SessionAssets) (EmailService, error)
	Webhook(SessionAssets) (WebhookService, error)
	Classification(*Classifier) (ClassificationService, error)
	Airtime(SessionAssets) (AirtimeService, error)
}

Services groups together interfaces for several services whose implementation is provided outside of the flow engine.

type Session

type Session interface {
	Assets() SessionAssets

	UUID() SessionUUID
	Type() FlowType
	SetType(FlowType)

	Environment() envs.Environment
	SetEnvironment(envs.Environment)
	MergedEnvironment() envs.Environment

	Contact() *Contact
	SetContact(*Contact)

	Input() Input
	SetInput(Input)

	Status() SessionStatus
	Trigger() Trigger
	CurrentResume() Resume
	BatchStart() bool
	PushFlow(Flow, Run, bool)

	Resume(Resume) (Sprint, error)
	Runs() []Run
	GetRun(RunUUID) (Run, error)
	FindStep(uuid StepUUID) (Run, Step)
	GetCurrentChild(Run) Run
	ParentRun() RunSummary
	CurrentContext() *types.XObject
	History() *SessionHistory

	Engine() Engine
}

Session represents the session of a flow run which may contain many runs

type SessionAssets added in v0.4.0

type SessionAssets interface {
	contactql.Resolver

	Source() assets.Source

	Channels() *ChannelAssets
	Classifiers() *ClassifierAssets
	Fields() *FieldAssets
	Flows() FlowAssets
	Globals() *GlobalAssets
	Groups() *GroupAssets
	Labels() *LabelAssets
	Locations() *LocationAssets
	OptIns() *OptInAssets
	Resthooks() *ResthookAssets
	Templates() *TemplateAssets
	Topics() *TopicAssets
	Users() *UserAssets
}

SessionAssets is the assets available to a session

type SessionHistory added in v0.96.0

type SessionHistory struct {
	ParentUUID          SessionUUID `json:"parent_uuid"`
	Ancestors           int         `json:"ancestors"`
	AncestorsSinceInput int         `json:"ancestors_since_input"`
}

SessionHistory provides information about the sessions that caused this session

func NewChildHistory added in v0.96.0

func NewChildHistory(parent Session) *SessionHistory

NewChildHistory creates a new history for a child of the given session

func (*SessionHistory) Advance added in v0.96.0

func (h *SessionHistory) Advance(newParent SessionUUID, receivedInput bool) *SessionHistory

Advance moves history forward to a new parent

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"

	// SessionStatusFailed represents a session that encountered an unrecoverable error
	SessionStatusFailed SessionStatus = "failed"
)

type SessionUUID added in v0.44.0

type SessionUUID uuids.UUID

SessionUUID is the UUID of a session

type Sprint added in v0.24.0

type Sprint interface {
	Modifiers() []Modifier
	Events() []Event
	Segments() []Segment
}

Sprint is an interaction with the engine - i.e. a start or resume of a session

type Step

type Step interface {
	Contextable

	UUID() StepUUID
	NodeUUID() NodeUUID
	ExitUUID() ExitUUID
	ArrivedOn() time.Time

	Leave(ExitUUID)
}

Step is a single step in the path thru a flow

type StepUUID

type StepUUID uuids.UUID

StepUUID is the UUID of a run step

type Template added in v0.32.0

type Template struct {
	assets.Template
}

Template represents messaging templates used by channels types such as WhatsApp

func NewTemplate added in v0.32.0

func NewTemplate(t assets.Template) *Template

NewTemplate returns a new template objects based on the passed in asset

func (*Template) Asset added in v0.32.0

func (t *Template) Asset() assets.Template

Asset returns the underlying asset

func (*Template) FindTranslation added in v0.32.0

func (t *Template) FindTranslation(channel *Channel, locales []i18n.Locale) *TemplateTranslation

FindTranslation finds the matching translation for the passed in channel and languages (in priority order)

func (*Template) Reference added in v0.38.1

func (t *Template) Reference() *assets.TemplateReference

Reference returns the reference for this template

func (*Template) Templating added in v0.218.2

func (t *Template) Templating(tt *TemplateTranslation, vars []string) *MsgTemplating

Templating generates a templating object for the passed in translation and variables

type TemplateAssets added in v0.32.0

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

TemplateAssets is our type for all the templates in an environment

func NewTemplateAssets added in v0.32.0

func NewTemplateAssets(ts []assets.Template) *TemplateAssets

NewTemplateAssets creates a new template list

func (*TemplateAssets) Get added in v0.38.1

Get returns the template with the passed in UUID if any

type TemplateEnumerator added in v0.200.1

type TemplateEnumerator interface {
	EnumerateTemplates(Localization, func(i18n.Language, string))
}

type TemplateTranslation added in v0.32.0

type TemplateTranslation struct {
	assets.TemplateTranslation
}

TemplateTranslation represents a single translation for a template

func NewTemplateTranslation added in v0.32.0

func NewTemplateTranslation(t assets.TemplateTranslation) *TemplateTranslation

NewTemplateTranslation returns a new TemplateTranslation for the passed in asset

func (*TemplateTranslation) Asset added in v0.32.0

Asset returns the underlying asset

func (*TemplateTranslation) Preview added in v0.201.0

func (t *TemplateTranslation) Preview(vars []*TemplatingVariable) *MsgContent

Preview returns message content which will act as a preview of a message sent with this template

type TemplatingComponent added in v0.207.0

type TemplatingComponent struct {
	Name      string         `json:"name"`
	Type      string         `json:"type"`
	Variables map[string]int `json:"variables"`
}

type TemplatingVariable added in v0.209.0

type TemplatingVariable struct {
	Type  string `json:"type"`
	Value string `json:"value"`
}

type Ticket added in v0.86.0

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

Ticket is a ticket in a ticketing system

func NewTicket added in v0.86.0

func NewTicket(uuid TicketUUID, topic *Topic, assignee *User) *Ticket

NewTicket creates a new ticket

func OpenTicket added in v0.122.0

func OpenTicket(topic *Topic, assignee *User) *Ticket

OpenTicket creates a new ticket. Used by ticketing services to open a new ticket.

func ReadTicket added in v0.122.0

func ReadTicket(sa SessionAssets, data []byte, missing assets.MissingCallback) (*Ticket, error)

ReadTicket decodes a contact from the passed in JSON. If the topic or assigned user can't be found in the assets, we report the missing asset and return ticket without those.

func (*Ticket) Assignee added in v0.124.0

func (t *Ticket) Assignee() *User

func (*Ticket) Context added in v0.118.2

func (t *Ticket) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

uuid:text -> the UUID of the ticket
topic:any -> the topic of the ticket
assignee:any -> the assignee of the ticket

@context ticket

func (*Ticket) MarshalJSON added in v0.122.0

func (t *Ticket) MarshalJSON() ([]byte, error)

MarshalJSON marshals this ticket into JSON

func (*Ticket) Topic added in v0.132.0

func (t *Ticket) Topic() *Topic

func (*Ticket) UUID added in v0.86.0

func (t *Ticket) UUID() TicketUUID

type TicketService added in v0.86.0

type TicketService interface {
	// Open tries to open a new ticket
	Open(env envs.Environment, contact *Contact, topic *Topic, body string, assignee *User, logHTTP HTTPLogCallback) (*Ticket, error)
}

TicketService provides ticketing functionality to the engine

type TicketUUID added in v0.86.0

type TicketUUID uuids.UUID

TicketUUID is the UUID of a ticket

type Timeout added in v0.33.0

type Timeout interface {
	Seconds() int
	CategoryUUID() CategoryUUID
}

Timeout is a way to skip a wait after X amount of time

type Topic added in v0.132.0

type Topic struct {
	assets.Topic
}

Topic represents a ticket topic

func NewTopic added in v0.132.0

func NewTopic(asset assets.Topic) *Topic

NewTopic creates a new topic from the given asset

func (*Topic) Asset added in v0.132.0

func (t *Topic) Asset() assets.Topic

Asset returns the underlying asset

func (*Topic) Context added in v0.133.0

func (t *Topic) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

__default__:text -> the name
uuid:text -> the UUID of the topic
name:text -> the name of the topic

@context topic

func (*Topic) Reference added in v0.132.0

func (t *Topic) Reference() *assets.TopicReference

Reference returns a reference to this topic

type TopicAssets added in v0.132.0

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

TopicAssets provides access to all topic assets

func NewTopicAssets added in v0.132.0

func NewTopicAssets(topics []assets.Topic) *TopicAssets

NewTopicAssets creates a new set of topic assets

func (*TopicAssets) FindByName added in v0.133.0

func (s *TopicAssets) FindByName(name string) *Topic

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

func (*TopicAssets) Get added in v0.132.0

func (s *TopicAssets) Get(uuid assets.TopicUUID) *Topic

Get returns the topic with the given UUID

type Trigger added in v0.4.0

type Trigger interface {
	utils.Typed
	Contextable

	Initialize(Session, EventCallback) error
	InitializeRun(Run, EventCallback) error

	Environment() envs.Environment
	Flow() *assets.FlowReference
	Contact() *Contact
	Call() *Call
	Batch() bool
	Params() *types.XObject
	History() *SessionHistory
	TriggeredOn() time.Time
}

Trigger represents something which can initiate a session with the flow engine

type TriggerWithRun added in v0.24.0

type TriggerWithRun interface {
	Trigger

	RunSummary() json.RawMessage
}

TriggerWithRun is special case of trigger that provides a parent run to the session

type URNList

type URNList []*ContactURN

URNList is the list of a contact's URNs

func ReadURNList added in v0.6.0

func ReadURNList(a SessionAssets, rawURNs []urns.URN, missing assets.MissingCallback) (URNList, error)

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

func (URNList) Equal added in v0.23.0

func (l URNList) Equal(other URNList) bool

Equal returns whether this list of URNs is equal to another

func (URNList) MapContext added in v0.31.0

func (l URNList) MapContext(env envs.Environment) map[string]types.XValue

MapContext returns a map of the highest priority URN for each scheme - exposed in expressions as @urns

func (URNList) RawURNs added in v0.6.0

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

RawURNs returns the raw URNs

func (URNList) ToXValue added in v0.32.0

func (l URNList) ToXValue(env envs.Environment) types.XValue

ToXValue returns a representation of this object for use in expressions

func (URNList) WithScheme added in v0.4.4

func (l URNList) WithScheme(schemes ...string) URNList

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

type UnsendableReason added in v0.170.0

type UnsendableReason string
const (
	// max length of a message attachment (type:url)
	MaxAttachmentLength = 2048

	// max length of a quick reply
	MaxQuickReplyLength = 64

	NilUnsendableReason           UnsendableReason = ""
	UnsendableReasonNoDestination UnsendableReason = "no_destination" // no sendable channel+URN pair
	UnsendableReasonContactStatus UnsendableReason = "contact_status" // contact is blocked or stopped or archived
)

type User added in v0.124.0

type User struct {
	assets.User
}

User adds some functionality to user assets.

func NewUser added in v0.124.0

func NewUser(asset assets.User) *User

NewUser returns a new user object from the given user asset

func (*User) Asset added in v0.124.0

func (u *User) Asset() assets.User

Asset returns the underlying asset

func (*User) Context added in v0.124.0

func (u *User) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

__default__:text -> the name or email
email:text -> the email address of the user
name:text -> the name of the user
first_name:text -> the first name of the user

@context user

func (*User) Format added in v0.124.4

func (u *User) Format() string

Format returns a friendly string version of this user depending on what fields are set

func (*User) Reference added in v0.124.0

func (u *User) Reference() *assets.UserReference

Reference returns a reference to this user

type UserAssets added in v0.124.0

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

UserAssets provides access to all user assets

func NewUserAssets added in v0.124.0

func NewUserAssets(users []assets.User) *UserAssets

NewUserAssets creates a new set of user assets

func (*UserAssets) Get added in v0.124.0

func (s *UserAssets) Get(email string) *User

Get returns the user with the given email

type Value added in v0.15.2

type Value struct {
	Text     *types.XText      `json:"text" validate:"required"`
	Datetime *types.XDateTime  `json:"datetime,omitempty"`
	Number   *types.XNumber    `json:"number,omitempty"`
	State    envs.LocationPath `json:"state,omitempty"`
	District envs.LocationPath `json:"district,omitempty"`
	Ward     envs.LocationPath `json:"ward,omitempty"`
}

Value represents a value in each of the field types

func NewValue added in v0.15.2

func NewValue(text *types.XText, datetime *types.XDateTime, number *types.XNumber, state envs.LocationPath, district envs.LocationPath, ward envs.LocationPath) *Value

NewValue creates an empty value

func (*Value) Equals added in v0.19.2

func (v *Value) Equals(o *Value) bool

Equals determines whether two values are equal

type Wait

type Wait interface {
	utils.Typed
	FlowTypeRestricted

	Timeout() Timeout

	Begin(Run, EventCallback) bool
	Accepts(Resume) bool
}

Wait tells the engine that the session requires input from the user

type WebhookCall added in v0.8.0

type WebhookCall struct {
	*httpx.Trace
	ResponseJSON    []byte
	ResponseCleaned bool // whether response had to be cleaned to make it valid JSON
	Recreated       bool // whether the call was recreated from a result
}

WebhookCall is the result of a webhook call

func (*WebhookCall) Context added in v0.204.0

func (w *WebhookCall) Context(env envs.Environment) map[string]types.XValue

Context returns the properties available in expressions

__default__:text -> the method and URL
status:number -> the response status code
headers:any -> the response headers
json:any -> the response body if valid JSON

@context webhook

func (*WebhookCall) MarshalJSON added in v0.8.0

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

type WebhookService added in v0.49.0

type WebhookService interface {
	Call(request *http.Request) (*WebhookCall, error)
}

WebhookService provides webhook functionality to the engine

Jump to

Keyboard shortcuts

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