Documentation ¶
Index ¶
- Constants
- Variables
- func AddContactURNs(ctx context.Context, tx *sqlx.Tx, adds []*ContactURNAdd) error
- func AddContactsToGroups(ctx context.Context, tx *sqlx.Tx, adds []*GroupAdd) error
- func AddEventFires(ctx context.Context, tx *sqlx.Tx, adds []*FireAdd) error
- func ApplyEvent(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, ...) error
- func ApplyPostEventHooks(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, ...) error
- func ApplyPreEventHooks(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, ...) error
- func BulkSQL(ctx context.Context, label string, tx Queryer, sql string, vs []interface{}) error
- func DeleteEventFires(ctx context.Context, db *sqlx.DB, fires []*EventFire) error
- func DeleteUnfiredEventFires(ctx context.Context, tx *sqlx.Tx, removes []*FireDelete) error
- func FindActiveRunOverlap(ctx context.Context, db *sqlx.DB, contacts []flows.ContactID) ([]flows.ContactID, error)
- func FindFlowStartedOverlap(ctx context.Context, db *sqlx.DB, flowID FlowID, contacts []flows.ContactID) ([]flows.ContactID, error)
- func FlushCache()
- func GetSessionAssets(org *OrgAssets) (flows.SessionAssets, error)
- func InsertMessages(ctx context.Context, tx Queryer, msgs []*Msg) error
- func InterruptContactRuns(ctx context.Context, tx *sqlx.Tx, contactIDs []flows.ContactID) error
- func MarkEventsFired(ctx context.Context, tx *sqlx.Tx, fires []*EventFire, fired time.Time) error
- func MarkMessagesPending(ctx context.Context, tx *sqlx.Tx, msgs []*Msg) error
- func MarkMessagesQueued(ctx context.Context, tx *sqlx.Tx, msgs []*Msg) error
- func MarkStartComplete(ctx context.Context, db *sqlx.DB, startID StartID) error
- func MarkStartStarted(ctx context.Context, db *sqlx.DB, startID StartID, contactCount int) error
- func RegisterEventHook(eventType string, handler EventHandler)
- func RemoveContactsFromGroups(ctx context.Context, tx *sqlx.Tx, removals []*GroupRemove) error
- func StopContact(ctx context.Context, tx *sqlx.Tx, orgID OrgID, contactID flows.ContactID) error
- func UnsubscribeResthooks(ctx context.Context, tx *sqlx.Tx, unsubs []*ResthookUnsubscribe) error
- func UpdateMessage(ctx context.Context, tx Queryer, msgID flows.MsgID, status MsgStatus, ...) error
- type Campaign
- type CampaignEvent
- func (e *CampaignEvent) Campaign() *Campaign
- func (e *CampaignEvent) DeliveryHour() int
- func (e *CampaignEvent) ID() CampaignEventID
- func (e *CampaignEvent) Offset() int
- func (e *CampaignEvent) RelativeToID() FieldID
- func (e *CampaignEvent) RelativeToKey() string
- func (e *CampaignEvent) ScheduleForContact(tz *time.Location, now time.Time, contact *flows.Contact) (*time.Time, error)
- func (e *CampaignEvent) ScheduleForTime(tz *time.Location, now time.Time, start time.Time) (*time.Time, error)
- func (e *CampaignEvent) UUID() CampaignEventUUID
- func (e *CampaignEvent) Unit() OffsetUnit
- func (e *CampaignEvent) UnmarshalJSON(data []byte) error
- type CampaignEventID
- type CampaignEventUUID
- type CampaignID
- type CampaignUUID
- type Channel
- func (c *Channel) Address() string
- func (c *Channel) ChannelReference() *assets.ChannelReference
- func (c *Channel) Country() string
- func (c *Channel) ID() ChannelID
- func (c *Channel) MatchPrefixes() []string
- func (c *Channel) Name() string
- func (c *Channel) Parent() *assets.ChannelReference
- func (c *Channel) Roles() []assets.ChannelRole
- func (c *Channel) Schemes() []string
- func (c *Channel) TPS() int
- func (c *Channel) Type() ChannelType
- func (c *Channel) UUID() assets.ChannelUUID
- type ChannelID
- type ChannelType
- type ConnectionID
- type Contact
- func (c *Contact) CreatedOn() time.Time
- func (c *Contact) Fields() map[string]*flows.Value
- func (c *Contact) FlowContact(org *OrgAssets, session flows.SessionAssets) (*flows.Contact, error)
- func (c *Contact) Groups() []assets.Group
- func (c *Contact) ID() flows.ContactID
- func (c *Contact) IsBlocked() bool
- func (c *Contact) IsStopped() bool
- func (c *Contact) Language() utils.Language
- func (c *Contact) ModifiedOn() time.Time
- func (c *Contact) Name() string
- func (c *Contact) URNs() []urns.URN
- func (c *Contact) UUID() flows.ContactUUID
- func (c *Contact) Unstop(ctx context.Context, db *sqlx.DB) error
- func (c *Contact) UpdatePreferredURNAndChannel(ctx context.Context, db *sqlx.DB, urnID URNID, channel *Channel) error
- type ContactURNAdd
- type EventCommitHook
- type EventFire
- type EventHandler
- type ExitType
- type Field
- type FieldID
- type FieldUUID
- type FireAdd
- type FireDelete
- type FireID
- type Flow
- type FlowID
- type FlowRun
- type FlowRunID
- type FlowStart
- func (s *FlowStart) ContactIDs() []flows.ContactID
- func (s *FlowStart) CreateBatch(contactIDs []flows.ContactID) *FlowStartBatch
- func (s *FlowStart) FlowID() FlowID
- func (s *FlowStart) GroupIDs() []GroupID
- func (s *FlowStart) IncludeActive() bool
- func (s *FlowStart) MarshalJSON() ([]byte, error)
- func (s *FlowStart) OrgID() OrgID
- func (s *FlowStart) RestartParticipants() bool
- func (s *FlowStart) StartID() StartID
- func (s *FlowStart) UnmarshalJSON(data []byte) error
- type FlowStartBatch
- func (b *FlowStartBatch) ContactIDs() []flows.ContactID
- func (b *FlowStartBatch) FlowID() FlowID
- func (b *FlowStartBatch) IncludeActive() bool
- func (b *FlowStartBatch) IsLast() bool
- func (b *FlowStartBatch) MarshalJSON() ([]byte, error)
- func (b *FlowStartBatch) OrgID() OrgID
- func (b *FlowStartBatch) RestartParticipants() bool
- func (b *FlowStartBatch) SetIsLast(last bool)
- func (b *FlowStartBatch) StartID() StartID
- func (b *FlowStartBatch) UnmarshalJSON(data []byte) error
- type Group
- type GroupAdd
- type GroupID
- type GroupRemove
- type Label
- type LabelID
- type Location
- type MatchType
- type Msg
- func (m *Msg) Attachments() []flows.Attachment
- func (m *Msg) Channel() *Channel
- func (m *Msg) ChannelID() ChannelID
- func (m *Msg) ChannelUUID() assets.ChannelUUID
- func (m *Msg) ConnectionID() ConnectionID
- func (m *Msg) ContactID() flows.ContactID
- func (m *Msg) ContactURNID() URNID
- func (m *Msg) CreatedOn() time.Time
- func (m *Msg) Direction() MsgDirection
- func (m *Msg) ErrorCount() int
- func (m *Msg) ExternalID() null.String
- func (m *Msg) HighPriority() bool
- func (m *Msg) ID() flows.MsgID
- func (m *Msg) MarshalJSON() ([]byte, error)
- func (m *Msg) Metadata() types.JSONText
- func (m *Msg) ModifiedOn() time.Time
- func (m *Msg) MsgCount() int
- func (m *Msg) MsgType() MsgType
- func (m *Msg) NextAttempt() time.Time
- func (m *Msg) OrgID() OrgID
- func (m *Msg) QueuedOn() time.Time
- func (m *Msg) SentOn() time.Time
- func (m *Msg) SetReplyTo(id null.Int, externalID string)
- func (m *Msg) SetTopup(topupID TopupID)
- func (m *Msg) Status() MsgStatus
- func (m *Msg) Text() string
- func (m *Msg) TopupID() TopupID
- func (m *Msg) URN() urns.URN
- func (m *Msg) URNAuth() string
- func (m *Msg) UUID() flows.MsgUUID
- func (m *Msg) Visibility() MsgVisibility
- type MsgDirection
- type MsgStatus
- type MsgType
- type MsgVisibility
- type OffsetUnit
- type Org
- func (o *Org) AllowedLanguages() []utils.Language
- func (o *Org) DateFormat() utils.DateFormat
- func (o *Org) DefaultLanguage() utils.Language
- func (o *Org) Equal(env utils.Environment) bool
- func (o *Org) Extension(name string) json.RawMessage
- func (o *Org) ID() OrgID
- func (o *Org) MarshalJSON() ([]byte, error)
- func (o *Org) Now() time.Time
- func (o *Org) NumberFormat() *utils.NumberFormat
- func (o *Org) RedactionPolicy() utils.RedactionPolicy
- func (o *Org) TimeFormat() utils.TimeFormat
- func (o *Org) Timezone() *time.Location
- type OrgAssets
- func (a *OrgAssets) CampaignByGroupID(groupID GroupID) []*Campaign
- func (a *OrgAssets) CampaignEventByID(eventID CampaignEventID) *CampaignEvent
- func (a *OrgAssets) CampaignEventsByFieldID(fieldID FieldID) []*CampaignEvent
- func (a *OrgAssets) Campaigns() []*Campaign
- func (a *OrgAssets) ChannelByID(channelID ChannelID) *Channel
- func (a *OrgAssets) ChannelByUUID(channelUUID assets.ChannelUUID) *Channel
- func (a *OrgAssets) Channels() ([]assets.Channel, error)
- func (a *OrgAssets) Env() utils.Environment
- func (a *OrgAssets) FieldByKey(key string) *Field
- func (a *OrgAssets) FieldByUUID(fieldUUID FieldUUID) *Field
- func (a *OrgAssets) Fields() ([]assets.Field, error)
- func (a *OrgAssets) Flow(flowUUID assets.FlowUUID) (assets.Flow, error)
- func (a *OrgAssets) FlowByID(flowID FlowID) (*Flow, error)
- func (a *OrgAssets) GroupByID(groupID GroupID) *Group
- func (a *OrgAssets) GroupByUUID(groupUUID assets.GroupUUID) *Group
- func (a *OrgAssets) Groups() ([]assets.Group, error)
- func (a *OrgAssets) Labels() ([]assets.Label, error)
- func (a *OrgAssets) Locations() ([]assets.LocationHierarchy, error)
- func (a *OrgAssets) OrgID() OrgID
- func (a *OrgAssets) Resthooks() ([]assets.Resthook, error)
- func (a *OrgAssets) SetFlow(flowID FlowID, flow flows.Flow) (*Flow, error)
- func (a *OrgAssets) Triggers() []*Trigger
- type OrgID
- type Queryer
- type Resthook
- type ResthookID
- type ResthookUnsubscribe
- type Session
- func (s *Session) AddPostCommitEvent(hook EventCommitHook, event interface{})
- func (s *Session) AddPreCommitEvent(hook EventCommitHook, event interface{})
- func (s *Session) Contact() *flows.Contact
- func (s *Session) ContactUUID() flows.ContactUUID
- func (s *Session) FlowSession(sa flows.SessionAssets, env utils.Environment, client *utils.HTTPClient) (flows.Session, error)
- func (s *Session) Runs() []*FlowRun
- func (s *Session) SetIncomingMsg(id flows.MsgID, externalID string)
- func (s *Session) WriteUpdatedSession(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, ...) error
- type SessionCommitHook
- type SessionID
- type SessionStatus
- type StartID
- type Step
- type Topup
- type TopupID
- type Trigger
- func (t *Trigger) ChannelID() ChannelID
- func (t *Trigger) FlowID() FlowID
- func (t *Trigger) GroupIDs() []GroupID
- func (t *Trigger) ID() TriggerID
- func (t *Trigger) Keyword() string
- func (t *Trigger) KeywordMatchType() triggers.KeywordMatchType
- func (t *Trigger) MatchType() MatchType
- func (t *Trigger) ReferrerID() string
- func (t *Trigger) TriggerType() TriggerType
- type TriggerID
- type TriggerType
- type URNID
Constants ¶
const ( // OffsetMinute means our offset is in minutes OffsetMinute = OffsetUnit("M") // OffsetHour means our offset is in hours OffsetHour = OffsetUnit("H") // OffsetDay means our offset is in days OffsetDay = OffsetUnit("D") // OffsetWeek means our offset is in weeks OffsetWeek = OffsetUnit("W") // NilDeliveryHour is our constant for not having a set delivery hour NilDeliveryHour = -1 )
const ( DirectionIn = MsgDirection("I") DirectionOut = MsgDirection("O") )
const ( VisibilityVisible = MsgVisibility("V") VisibilityArchived = MsgVisibility("A") VisibilityDeleted = MsgVisibility("D") )
const ( TypeInbox = MsgType("I") TypeFlow = MsgType("F") TypeIVR = MsgType("V") TypeUSSD = MsgType("U") )
const ( MsgStatusInitializing = MsgStatus("I") MsgStatusPending = MsgStatus("P") MsgStatusQueued = MsgStatus("Q") MsgStatusWired = MsgStatus("W") MsgStatusSent = MsgStatus("S") MsgStatusHandled = MsgStatus("H") MsgStatusErrored = MsgStatus("E") MsgStatusFailed = MsgStatus("F") MsgStatusResent = MsgStatus("R") )
const ( SessionStatusActive = "A" SessionStatusCompleted = "C" SessionStatusErrored = "E" SessionStatusWaiting = "W" SessionStatusExpired = "X" )
const ( CatchallTriggerType = TriggerType("C") KeywordTriggerType = TriggerType("K") MissedCallTriggerType = TriggerType("M") NewConversationTriggerType = TriggerType("N") ReferralTriggerType = TriggerType("R") CallTriggerType = TriggerType("V") MatchFirst = "F" MatchOnly = "O" )
const ChannelTypeAndroid = ChannelType("A")
Variables ¶
var ( ExitInterrupted = null.NewString("I", true) ExitCompleted = null.NewString("C", true) ExitExpired = null.NewString("E", true) )
var NilChannelID = ChannelID(0)
var NilStartID = StartID{null.NewInt(0, false)}
NilStartID is our constant for a nil start id
var NilTopupID = TopupID(null.NewInt(0, false))
NilTopupID is our nil value for topup id
var NilURNID = URNID(0)
Functions ¶
func AddContactURNs ¶ added in v0.0.38
AddContactURNs adds all the passed in contact urns in a single query
func AddContactsToGroups ¶ added in v0.0.38
AddContactsToGroups fires a bulk SQL query to remove all the contacts in the passed in groups
func AddEventFires ¶ added in v0.0.38
AddEventFires adds the passed in event fires to our db
func ApplyEvent ¶
func ApplyEvent(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, session *Session, e flows.Event) error
ApplyEvent applies the passed in event, IE, creates the db objects required etc..
func ApplyPostEventHooks ¶ added in v0.0.17
func ApplyPostEventHooks(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, sessions []*Session) error
ApplyPostEventHooks runs through all the post event hooks for the passed in sessions and applies their events
func ApplyPreEventHooks ¶ added in v0.0.17
func ApplyPreEventHooks(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, sessions []*Session) error
ApplyPreEventHooks runs through all the pre event hooks for the passed in sessions and applies their events
func DeleteEventFires ¶ added in v0.0.27
DeleteEventFires deletes all event fires passed in (used when an event has been marked as inactive)
func DeleteUnfiredEventFires ¶ added in v0.0.38
DeleteUnfiredEventFires removes event fires for the passed in event and contact
func FindActiveRunOverlap ¶ added in v0.0.27
func FindActiveRunOverlap(ctx context.Context, db *sqlx.DB, contacts []flows.ContactID) ([]flows.ContactID, error)
FindActiveRunOverlap returns the list of contact ids which overlap with those passed in which are active in any other flows.
func FindFlowStartedOverlap ¶ added in v0.0.27
func FindFlowStartedOverlap(ctx context.Context, db *sqlx.DB, flowID FlowID, contacts []flows.ContactID) ([]flows.ContactID, error)
FindFlowStartedOverlap returns the list of contact ids which overlap with those passed in and which have been in the flow passed in.
func GetSessionAssets ¶ added in v0.0.38
func GetSessionAssets(org *OrgAssets) (flows.SessionAssets, error)
GetSessionAssets returns a goflow session assets object for the parred in org assets
func InsertMessages ¶ added in v0.0.38
InsertMessages inserts the passed in messages in a single query
func InterruptContactRuns ¶ added in v0.0.27
InterruptContactRuns interrupts all runs and sesions that exist for the passed in list of contacts
func MarkEventsFired ¶ added in v0.0.19
MarkEventsFired sets the fired date on all the passed in event fires and updates the associated rows in the database
func MarkMessagesPending ¶ added in v0.0.5
MarkMessagesPending marks the passed in messages as pending
func MarkMessagesQueued ¶ added in v0.0.2
MarkMessagesQueued marks the passed in messages as queued
func MarkStartComplete ¶ added in v0.0.27
MarkStartComplete sets the status for the passed in flow start
func MarkStartStarted ¶ added in v0.0.28
MarkStartStarted sets the status for the passed in flow start to S and updates the contact count on it
func RegisterEventHook ¶ added in v0.0.38
func RegisterEventHook(eventType string, handler EventHandler)
RegisterEventHook registers the passed in handler as being interested in the passed in type
func RemoveContactsFromGroups ¶ added in v0.0.38
RemoveContactsFromGroups fires a bulk SQL query to remove all the contacts in the passed in groups
func StopContact ¶ added in v0.0.38
StopContact stops the contact with the passed in id, removing them from all groups and setting their state to stopped.
func UnsubscribeResthooks ¶ added in v0.0.38
UnsubscribeResthooks unsubscribles all the resthooks passed in
Types ¶
type Campaign ¶ added in v0.0.17
type Campaign struct {
// contains filtered or unexported fields
}
Campaign is our struct for a campaign and all its events
func (*Campaign) Events ¶ added in v0.0.17
func (c *Campaign) Events() []*CampaignEvent
Events returns the list of events for this campaign
func (*Campaign) GroupID ¶ added in v0.0.17
GroupID returns the id of the group this campaign works against
func (*Campaign) GroupUUID ¶ added in v0.0.17
GroupUUID returns the uuid of the group this campaign works against
func (*Campaign) ID ¶ added in v0.0.17
func (c *Campaign) ID() CampaignID
ID return the database id of this campaign
func (*Campaign) UUID ¶ added in v0.0.17
func (c *Campaign) UUID() CampaignUUID
UUID returns the UUID of this campaign
type CampaignEvent ¶ added in v0.0.17
type CampaignEvent struct {
// contains filtered or unexported fields
}
func (*CampaignEvent) Campaign ¶ added in v0.0.17
func (e *CampaignEvent) Campaign() *Campaign
Campaign returns the campaign this event is part of
func (*CampaignEvent) DeliveryHour ¶ added in v0.0.17
func (e *CampaignEvent) DeliveryHour() int
DeliveryHour returns the hour this event should send at, if any
func (*CampaignEvent) ID ¶ added in v0.0.17
func (e *CampaignEvent) ID() CampaignEventID
ID returns the database id for this campaign event
func (*CampaignEvent) Offset ¶ added in v0.0.17
func (e *CampaignEvent) Offset() int
Offset returns the offset for thi campaign event
func (*CampaignEvent) RelativeToID ¶ added in v0.0.17
func (e *CampaignEvent) RelativeToID() FieldID
RelativeToID returns the ID of the field this event is relative to
func (*CampaignEvent) RelativeToKey ¶ added in v0.0.17
func (e *CampaignEvent) RelativeToKey() string
RelativeToKey returns the key of the field this event is relative to
func (*CampaignEvent) ScheduleForContact ¶ added in v0.0.38
func (e *CampaignEvent) ScheduleForContact(tz *time.Location, now time.Time, contact *flows.Contact) (*time.Time, error)
ScheduleForContact calculates the next fire ( if any) for the passed in contact
func (*CampaignEvent) ScheduleForTime ¶ added in v0.0.17
func (e *CampaignEvent) ScheduleForTime(tz *time.Location, now time.Time, start time.Time) (*time.Time, error)
ScheduleForTime calculates the next fire (if any) for the passed in time and timezone
func (*CampaignEvent) UUID ¶ added in v0.0.17
func (e *CampaignEvent) UUID() CampaignEventUUID
UUID returns the UUID of this campaign event
func (*CampaignEvent) Unit ¶ added in v0.0.17
func (e *CampaignEvent) Unit() OffsetUnit
Unit returns the unit for this campaign event
func (*CampaignEvent) UnmarshalJSON ¶ added in v0.0.17
func (e *CampaignEvent) UnmarshalJSON(data []byte) error
UnmarshalJSON is our unmarshaller for json data
type CampaignEventID ¶ added in v0.0.17
type CampaignEventID int
CampaignEventID is our type for campaign event ids
type CampaignEventUUID ¶ added in v0.0.17
CampaignEventUUID is our type for campaign event UUIDs
type CampaignUUID ¶ added in v0.0.17
CampaignUUID is our type for campaign UUIDs
type Channel ¶ added in v0.0.5
type Channel struct {
// contains filtered or unexported fields
}
Channel is the mailroom struct that represents channels
func (*Channel) ChannelReference ¶ added in v0.0.38
func (c *Channel) ChannelReference() *assets.ChannelReference
ChannelReference return a channel reference for this channel
func (*Channel) MatchPrefixes ¶ added in v0.0.5
MatchPrefixes returns the prefixes we should also match when determining channel affinity
func (*Channel) Parent ¶ added in v0.0.5
func (c *Channel) Parent() *assets.ChannelReference
Parent returns the UUID of the parent channel to this channel
func (*Channel) Roles ¶ added in v0.0.5
func (c *Channel) Roles() []assets.ChannelRole
Roles returns the roles this channel supports
func (*Channel) TPS ¶ added in v0.0.5
TPS returns the max number of transactions per second this channel supports
func (*Channel) Type ¶ added in v0.0.5
func (c *Channel) Type() ChannelType
Type returns the channel type for this channel
func (*Channel) UUID ¶ added in v0.0.5
func (c *Channel) UUID() assets.ChannelUUID
UUID returns the UUID of this channel
type ChannelType ¶ added in v0.0.5
type ChannelType string
type ConnectionID ¶
type Contact ¶ added in v0.0.38
type Contact struct {
// contains filtered or unexported fields
}
Contact is our mailroom struct that represents a contact
func LoadContacts ¶ added in v0.0.5
func LoadContacts(ctx context.Context, db *sqlx.DB, org *OrgAssets, ids []flows.ContactID) ([]*Contact, error)
LoadContacts loads a set of contacts for the passed in ids
func (*Contact) FlowContact ¶ added in v0.0.38
FlowContact converts our mailroom contact into a flow contact for use in the engine
func (*Contact) ModifiedOn ¶ added in v0.0.38
func (*Contact) UUID ¶ added in v0.0.38
func (c *Contact) UUID() flows.ContactUUID
func (*Contact) Unstop ¶ added in v0.0.38
Unstop sets the is_stopped attribute to false for this contact
func (*Contact) UpdatePreferredURNAndChannel ¶ added in v0.0.38
func (c *Contact) UpdatePreferredURNAndChannel(ctx context.Context, db *sqlx.DB, urnID URNID, channel *Channel) error
UpdatePreferredURNAndChannel updates the URNs for the contact (if needbe) to have the passed in URN as top priority with the passed in channel as the preferred channel
type ContactURNAdd ¶ added in v0.0.38
type ContactURNAdd struct { ContactID flows.ContactID `db:"contact_id"` Identity string `db:"identity"` Path string `db:"path"` Display *string `db:"display"` Auth *string `db:"auth"` Scheme string `db:"scheme"` Priority int `db:"priority"` OrgID OrgID `db:"org_id"` }
ContactURNAdd is our object that represents a single contact URN addition
type EventCommitHook ¶ added in v0.0.19
type EventCommitHook interface {
Apply(context.Context, *sqlx.Tx, *redis.Pool, *OrgAssets, map[*Session][]interface{}) error
}
EventCommitHook defines a callback that will accept a certain type of events across session, either before or after committing
type EventFire ¶ added in v0.0.19
type EventFire struct { FireID FireID `db:"fire_id"` EventID CampaignEventID `db:"event_id"` ContactID flows.ContactID `db:"contact_id"` Scheduled time.Time `db:"scheduled"` Fired *time.Time `db:"fired"` }
EventFire represents a single campaign event fire for an event and contact
type EventHandler ¶ added in v0.0.17
type EventHandler func(context.Context, *sqlx.Tx, *redis.Pool, *OrgAssets, *Session, flows.Event) error
EventHandler defines a call for handling events that occur in a flow
type Field ¶ added in v0.0.5
type Field struct {
// contains filtered or unexported fields
}
Field is our mailroom type for contact field types
type FireAdd ¶ added in v0.0.38
type FireAdd struct { ContactID flows.ContactID `db:"contact_id"` EventID CampaignEventID `db:"event_id"` Scheduled time.Time `db:"scheduled"` }
type FireDelete ¶ added in v0.0.38
type FireDelete struct { ContactID flows.ContactID `db:"contact_id"` EventID CampaignEventID `db:"event_id"` }
type Flow ¶ added in v0.0.5
type Flow struct {
// contains filtered or unexported fields
}
Flow is the mailroom type for a flow
func (*Flow) Definition ¶ added in v0.0.5
func (f *Flow) Definition() json.RawMessage
Definition returns the definition for this flow
func (*Flow) FlowReference ¶ added in v0.0.38
func (f *Flow) FlowReference() *assets.FlowReference
FlowReference return a channel reference for this flow
func (*Flow) IgnoreTriggers ¶ added in v0.0.38
IgnoreTriggers returns whether this flow ignores triggers
func (*Flow) IsArchived ¶ added in v0.0.27
IsArchived returns whether this flow is archived
type FlowRun ¶
type FlowRun struct { ID FlowRunID `db:"id"` UUID flows.RunUUID `db:"uuid"` IsActive bool `db:"is_active"` CreatedOn time.Time `db:"created_on"` ModifiedOn time.Time `db:"modified_on"` ExitedOn *time.Time `db:"exited_on"` ExitType null.String `db:"exit_type"` ExpiresOn *time.Time `db:"expires_on"` TimeoutOn *time.Time `db:"timeout_on"` Responded bool `db:"responded"` // TODO: should this be a complex object that can read / write iself to the DB as JSON? Results string `db:"results"` // TODO: should this be a complex object that can read / write iself to the DB as JSON? Path string `db:"path"` // TODO: should this be a complex object that can read / write iself to the DB as JSON? Events string `db:"events"` CurrentNodeUUID flows.NodeUUID `db:"current_node_uuid"` ContactID flows.ContactID `db:"contact_id"` FlowID FlowID `db:"flow_id"` OrgID OrgID `db:"org_id"` ParentUUID *flows.RunUUID `db:"parent_uuid"` SessionID SessionID `db:"session_id"` StartID StartID `db:"start_id"` // contains filtered or unexported fields }
FlowRun is the mailroom type for a FlowRun
type FlowStart ¶ added in v0.0.27
type FlowStart struct {
// contains filtered or unexported fields
}
FlowStart represents the top level flow start in our system
func NewFlowStart ¶ added in v0.0.27
func (*FlowStart) ContactIDs ¶ added in v0.0.27
func (*FlowStart) CreateBatch ¶ added in v0.0.27
func (s *FlowStart) CreateBatch(contactIDs []flows.ContactID) *FlowStartBatch
func (*FlowStart) IncludeActive ¶ added in v0.0.27
func (*FlowStart) MarshalJSON ¶ added in v0.0.27
func (*FlowStart) RestartParticipants ¶ added in v0.0.27
func (*FlowStart) UnmarshalJSON ¶ added in v0.0.27
type FlowStartBatch ¶ added in v0.0.27
type FlowStartBatch struct {
// contains filtered or unexported fields
}
FlowStartBatch represents a single flow batch that needs to be started
func (*FlowStartBatch) ContactIDs ¶ added in v0.0.27
func (b *FlowStartBatch) ContactIDs() []flows.ContactID
func (*FlowStartBatch) FlowID ¶ added in v0.0.27
func (b *FlowStartBatch) FlowID() FlowID
func (*FlowStartBatch) IncludeActive ¶ added in v0.0.27
func (b *FlowStartBatch) IncludeActive() bool
func (*FlowStartBatch) IsLast ¶ added in v0.0.27
func (b *FlowStartBatch) IsLast() bool
func (*FlowStartBatch) MarshalJSON ¶ added in v0.0.27
func (b *FlowStartBatch) MarshalJSON() ([]byte, error)
func (*FlowStartBatch) OrgID ¶ added in v0.0.27
func (b *FlowStartBatch) OrgID() OrgID
func (*FlowStartBatch) RestartParticipants ¶ added in v0.0.27
func (b *FlowStartBatch) RestartParticipants() bool
func (*FlowStartBatch) SetIsLast ¶ added in v0.0.27
func (b *FlowStartBatch) SetIsLast(last bool)
func (*FlowStartBatch) StartID ¶ added in v0.0.27
func (b *FlowStartBatch) StartID() StartID
func (*FlowStartBatch) UnmarshalJSON ¶ added in v0.0.27
func (b *FlowStartBatch) UnmarshalJSON(data []byte) error
type Group ¶ added in v0.0.5
type Group struct {
// contains filtered or unexported fields
}
Group is our mailroom type for contact groups
type GroupAdd ¶ added in v0.0.38
type GroupAdd struct { ContactID flows.ContactID `db:"contact_id"` GroupID GroupID `db:"group_id"` }
GroupAdd is our struct to track a final group additions
type GroupRemove ¶ added in v0.0.38
type GroupRemove struct { ContactID flows.ContactID `db:"contact_id"` GroupID GroupID `db:"group_id"` }
GroupRemove is our struct to track group removals
type Label ¶ added in v0.0.5
type Label struct {
// contains filtered or unexported fields
}
Label is our mailroom type for message labels
type Location ¶ added in v0.0.5
type Location struct { Name_ string `json:"name"` Aliases_ []string `json:"aliases"` Children_ []*Location `json:"children"` // contains filtered or unexported fields }
Location is our mailroom type for administrative locations TODO: convert to something less jank when we have real location constructors
type Msg ¶
type Msg struct {
// contains filtered or unexported fields
}
Msg is our type for mailroom messages
func NewOutgoingMsg ¶ added in v0.0.17
func NewOutgoingMsg(orgID OrgID, channel *Channel, contactID flows.ContactID, out *flows.MsgOut, createdOn time.Time) (*Msg, error)
NewOutgoingMsg creates an outgoing message for the passed in flow message. Note that this message is created in a queued state!
func (*Msg) Attachments ¶
func (m *Msg) Attachments() []flows.Attachment
func (*Msg) ChannelUUID ¶
func (m *Msg) ChannelUUID() assets.ChannelUUID
func (*Msg) ConnectionID ¶
func (m *Msg) ConnectionID() ConnectionID
func (*Msg) ContactURNID ¶
func (*Msg) Direction ¶
func (m *Msg) Direction() MsgDirection
func (*Msg) ErrorCount ¶
func (*Msg) ExternalID ¶
func (*Msg) HighPriority ¶
func (*Msg) MarshalJSON ¶ added in v0.0.38
func (*Msg) ModifiedOn ¶
func (*Msg) NextAttempt ¶
func (*Msg) SetReplyTo ¶ added in v0.0.38
SetReplyTo set the incoming message that this session should be associated with in this sprint
func (*Msg) Visibility ¶
func (m *Msg) Visibility() MsgVisibility
type MsgDirection ¶
type MsgDirection string
type MsgVisibility ¶
type MsgVisibility string
type OffsetUnit ¶ added in v0.0.17
type OffsetUnit string
OffsetUnit defines what time unit our offset is in
type Org ¶ added in v0.0.5
type Org struct {
// contains filtered or unexported fields
}
Org is mailroom's type for RapidPro orgs. It also implements the utils.Environment interface for GoFlow
func (*Org) AllowedLanguages ¶ added in v0.0.38
AllowedLanguages returns the list of supported languages for this org
func (*Org) DateFormat ¶ added in v0.0.5
func (o *Org) DateFormat() utils.DateFormat
DateFormat returns the date format for this org
func (*Org) DefaultLanguage ¶ added in v0.0.38
DefaultLanguage returns the primary language for this org
func (*Org) Equal ¶ added in v0.0.38
func (o *Org) Equal(env utils.Environment) bool
Equal return whether we are equal to the passed in environment
func (*Org) Extension ¶ added in v0.0.5
func (o *Org) Extension(name string) json.RawMessage
Extension returns the extension for this org
func (*Org) MarshalJSON ¶ added in v0.0.22
MarshalJSON is our custom marshaller so that our inner env get output
func (*Org) NumberFormat ¶ added in v0.0.38
func (o *Org) NumberFormat() *utils.NumberFormat
NumberFormat returns the date format for this org
func (*Org) RedactionPolicy ¶ added in v0.0.5
func (o *Org) RedactionPolicy() utils.RedactionPolicy
RedactionPolicy returns the redaction policy (are we anonymous) for this org
func (*Org) TimeFormat ¶ added in v0.0.5
func (o *Org) TimeFormat() utils.TimeFormat
TimeFormat returns the time format for this org
type OrgAssets ¶
type OrgAssets struct {
// contains filtered or unexported fields
}
OrgAssets is our top level cache of all things contained in an org. It is used to build SessionAssets for the engine but also used to cache campaigns and other org level attributes
func GetOrgAssets ¶ added in v0.0.5
GetOrgAssets creates or gets org assets for the passed in org
func (*OrgAssets) CampaignByGroupID ¶ added in v0.0.17
func (*OrgAssets) CampaignEventByID ¶ added in v0.0.27
func (a *OrgAssets) CampaignEventByID(eventID CampaignEventID) *CampaignEvent
func (*OrgAssets) CampaignEventsByFieldID ¶ added in v0.0.17
func (a *OrgAssets) CampaignEventsByFieldID(fieldID FieldID) []*CampaignEvent
func (*OrgAssets) ChannelByID ¶ added in v0.0.5
func (*OrgAssets) ChannelByUUID ¶ added in v0.0.5
func (a *OrgAssets) ChannelByUUID(channelUUID assets.ChannelUUID) *Channel
func (*OrgAssets) Env ¶ added in v0.0.5
func (a *OrgAssets) Env() utils.Environment
func (*OrgAssets) FieldByKey ¶ added in v0.0.17
func (*OrgAssets) FieldByUUID ¶ added in v0.0.5
func (*OrgAssets) GroupByUUID ¶ added in v0.0.5
func (*OrgAssets) Locations ¶ added in v0.0.5
func (a *OrgAssets) Locations() ([]assets.LocationHierarchy, error)
type Resthook ¶ added in v0.0.5
type Resthook struct {
// contains filtered or unexported fields
}
Resthook is the mailroom type for resthooks
func (*Resthook) ID ¶ added in v0.0.5
func (r *Resthook) ID() ResthookID
ID returns the ID of this resthook
func (*Resthook) Subscribers ¶ added in v0.0.5
Subscribers returns the subscribers for this resthook
type ResthookID ¶ added in v0.0.5
type ResthookID int64
ResthookID is our type for the database id of a resthook
type ResthookUnsubscribe ¶ added in v0.0.38
type Session ¶
type Session struct { ID SessionID `db:"id"` Status SessionStatus `db:"status"` Responded bool `db:"responded"` Output string `db:"output"` ContactID flows.ContactID `db:"contact_id"` OrgID OrgID `db:"org_id"` CreatedOn time.Time `db:"created_on"` EndedOn *time.Time `db:"ended_on"` TimeoutOn *time.Time `db:"timeout_on"` CurrentFlowID *FlowID `db:"current_flow_id"` IncomingMsgID null.Int IncomingExternalID string // contains filtered or unexported fields }
Session is the mailroom type for a FlowSession
func ActiveSessionForContact ¶ added in v0.0.38
func ActiveSessionForContact(ctx context.Context, db *sqlx.DB, org *OrgAssets, contact *flows.Contact) (*Session, error)
ActiveSessionForContact returns the active session for the passed in contact, if any
func NewSession ¶ added in v0.0.17
NewSession a session objects from the passed in flow session. It does NOT commit said session to the database.
func WriteSessions ¶ added in v0.0.10
func WriteSessions(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, ss []flows.Session, hook SessionCommitHook) ([]*Session, error)
WriteSessions writes the passed in session to our database, writes any runs that need to be created as well as appying any events created in the session
func (*Session) AddPostCommitEvent ¶ added in v0.0.17
func (s *Session) AddPostCommitEvent(hook EventCommitHook, event interface{})
AddPostCommitEvent adds a new event to be handled by a post commit hook
func (*Session) AddPreCommitEvent ¶ added in v0.0.17
func (s *Session) AddPreCommitEvent(hook EventCommitHook, event interface{})
AddPreCommitEvent adds a new event to be handled by a pre commit hook
func (*Session) ContactUUID ¶ added in v0.0.17
func (s *Session) ContactUUID() flows.ContactUUID
ContactUUID returns the UUID of our contact
func (*Session) FlowSession ¶ added in v0.0.38
func (s *Session) FlowSession(sa flows.SessionAssets, env utils.Environment, client *utils.HTTPClient) (flows.Session, error)
FlowSession creates a flow session for the passed in session object. It also populates the runs we know about
func (*Session) SetIncomingMsg ¶ added in v0.0.38
SetIncomingMsg set the incoming message that this session should be associated with in this sprint
func (*Session) WriteUpdatedSession ¶ added in v0.0.38
func (s *Session) WriteUpdatedSession(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, fs flows.Session) error
WriteUpdatedSession updates the session based on the state passed in from our engine session, this also takes care of applying any event hooks
type SessionCommitHook ¶ added in v0.0.19
type SessionStatus ¶
type SessionStatus string
type StartID ¶ added in v0.0.27
StartID is our type for flow start ids
func NewStartID ¶ added in v0.0.27
NewStartID creates a new start id for the passed in int
type Step ¶
type Step struct { UUID flows.StepUUID `json:"uuid"` NodeUUID flows.NodeUUID `json:"node_uuid"` ArrivedOn time.Time `json:"arrived_on"` ExitUUID flows.ExitUUID `json:"exit_uuid,omitempty"` }
Step represents a single step in a run, this struct is used for serialization to the steps
type Topup ¶ added in v0.0.10
type Topup struct { ID TopupID `db:"id"` Remaining int `db:"remaining"` Expiration time.Time `db:"expires_on"` }
Topup is our internal struct representing an org's topup and expiration date
type Trigger ¶ added in v0.0.38
type Trigger struct {
// contains filtered or unexported fields
}
Trigger represents a trigger in an organization
func FindMatchingMsgTrigger ¶ added in v0.0.38
FindMatchingMsgTrigger returns the matching trigger (if any) for the passed in text and channel id TODO: with a different structure this could probably be a lot faster.. IE, we could have a map of list of triggers by keyword that is built when we load the triggers, then just evaluate against that.
func FindMatchingNewConversationTrigger ¶ added in v0.0.38
FindMatchingNewConversationTrigger returns the matching trigger for the passed in trigger type
func FindMatchingReferralTrigger ¶ added in v0.0.38
FindMatchingReferralTrigger returns the matching trigger for the passed in trigger type Matches are based on referrer_id first (if present), then channel, then any referrer trigger
func (*Trigger) KeywordMatchType ¶ added in v0.0.38
func (t *Trigger) KeywordMatchType() triggers.KeywordMatchType
func (*Trigger) ReferrerID ¶ added in v0.0.38
func (*Trigger) TriggerType ¶ added in v0.0.38
func (t *Trigger) TriggerType() TriggerType
type TriggerType ¶ added in v0.0.38
type TriggerType string