models

package
v1.0.7 Latest Latest
Warning

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

Go to latest
Published: Jun 11, 2019 License: AGPL-3.0 Imports: 35 Imported by: 10

Documentation

Index

Constants

View Source
const (
	// CreatedOnKey
	CreatedOnKey = "created_on"

	// 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

	// StartModeInterrupt means the flow for this campaign event should interrupt other flows
	StartModeInterrupt = StartMode("I")

	// StartModeSkip means the flow should be skipped if the user is active in another flow
	StartModeSkip = StartMode("S")

	// StartModePassive means the flow should be started without interrupting the user in other flows
	StartModePassive = StartMode("P")
)
View Source
const (
	// FireResultFired means our flow was started
	FireResultFired = "F"

	// FireResultSkipped means our flow was skipped
	FireResultSkipped = "S"
)
View Source
const (
	ConnectionDirectionIn  = ConnectionDirection("I")
	ConnectionDirectionOut = ConnectionDirection("O")

	ConnectionTypeIVR = ConnectionType("V")

	ConnectionStatusPending    = ConnectionStatus("P")
	ConnectionStatusQueued     = ConnectionStatus("Q")
	ConnectionStatusWired      = ConnectionStatus("W")
	ConnectionStatusRinging    = ConnectionStatus("R")
	ConnectionStatusInProgress = ConnectionStatus("I")
	ConnectionStatusBusy       = ConnectionStatus("B")
	ConnectionStatusFailed     = ConnectionStatus("F")
	ConnectionStatusErrored    = ConnectionStatus("E")
	ConnectionStatusNoAnswer   = ConnectionStatus("N")
	ConnectionStatusCancelled  = ConnectionStatus("C")
	ConnectionStatusCompleted  = ConnectionStatus("D")

	ConnectionMaxRetries = 3

	// ConnectionRetryWait is our default wait to retry connections in minutes
	ConnectionRetryWait = 60

	// ConnectionThrottleWait is our wait between throttle retries
	ConnectionThrottleWait = time.Minute * 2
)
View Source
const (
	NewConversationEventType = ChannelEventType("new_conversation")
	WelcomeMessateEventType  = ChannelEventType("welcome_message")
	ReferralEventType        = ChannelEventType("referral")
	MOMissEventType          = ChannelEventType("mo_miss")
	MOCallEventType          = ChannelEventType("mo_call")
)
View Source
const (
	ChannelTypeAndroid = ChannelType("A")

	ChannelConfigCallbackDomain = "callback_domain"

	ChannelConfigMaxConcurrentEvents = "max_concurrent_events"

	ChannelConfigFCMID = "FCM_ID"
)
View Source
const (
	NilURNID     = URNID(0)
	NilContactID = ContactID(0)
)
View Source
const (
	GoFlowMajorVersion = 12

	IVRFlow       = FlowType("V")
	MessagingFlow = FlowType("M")
	SurveyorFlow  = FlowType("S")

	FlowConfigIVRRetryMinutes = "ivr_retry"

	NilFlowID = FlowID(0)
)
View Source
const (
	DirectionIn  = MsgDirection("I")
	DirectionOut = MsgDirection("O")
)
View Source
const (
	VisibilityVisible  = MsgVisibility("V")
	VisibilityArchived = MsgVisibility("A")
	VisibilityDeleted  = MsgVisibility("D")
)
View Source
const (
	TypeInbox = MsgType("I")
	TypeFlow  = MsgType("F")
	TypeIVR   = MsgType("V")
	TypeUSSD  = MsgType("U")
)
View Source
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")
)
View Source
const (
	TemplateStateEvaluated   = TemplateState("evaluated")
	TemplateStateLegacy      = TemplateState("legacy")
	TemplateStateUnevaluated = TemplateState("unevaluated")
)
View Source
const (
	SessionStatusActive    = "A"
	SessionStatusCompleted = "C"
	SessionStatusErrored   = "E"
	SessionStatusWaiting   = "W"
	SessionStatusExpired   = "X"
)
View Source
const (
	CatchallTriggerType        = TriggerType("C")
	KeywordTriggerType         = TriggerType("K")
	MissedCallTriggerType      = TriggerType("M")
	NewConversationTriggerType = TriggerType("N")
	ReferralTriggerType        = TriggerType("R")
	CallTriggerType            = TriggerType("V")

	MatchFirst = "F"
	MatchOnly  = "O"

	NilTriggerID = TriggerID(0)
)
View Source
const (
	EventTypeFlow = EventType("flow")

	EventStatusComplete = EventStatus("C")
)
View Source
const NilBroadcastID = BroadcastID(0)

NilBroadcastID is our constant for a nil broadcast id

View Source
const NilConnectionID = ConnectionID(0)
View Source
const NilFlowRunID = FlowRunID(0)
View Source
const NilMsgID = MsgID(0)

NilMsgID is our constant for a nil msg id

View Source
const NilOrgID = OrgID(0)

Variables

View Source
var (
	ExitInterrupted = ExitType("I")
	ExitCompleted   = ExitType("C")
	ExitExpired     = ExitType("E")
)
View Source
var AgeFieldUUID = FieldUUID("903f51da-2717-47c7-a0d3-f2f32877013d")
View Source
var AlexandriaID = ContactID(10003)
View Source
var AlexandriaURN = urns.URN("tel:+250700000004")
View Source
var AlexandriaURNID = URNID(10003)
View Source
var AlexandriaUUID = flows.ContactUUID("9709c157-4606-4d41-9df3-9e9c9b4ae2d4")
View Source
var BobID = ContactID(10001)
View Source
var BobURN = urns.URN("tel:+250700000002")
View Source
var BobURNID = URNID(10001)
View Source
var BobUUID = flows.ContactUUID("b699a406-7e44-49be-9f01-1a82893e8a10")
View Source
var CampaignFlowID = FlowID(10009)
View Source
var CampaignFlowUUID = assets.FlowUUID("3a92a964-3a8d-420b-9206-2cd9d884ac30")
View Source
var CathyID = ContactID(10000)
View Source
var CathyURN = urns.URN("tel:+250700000001")
View Source
var CathyURNID = URNID(10000)
View Source
var CathyUUID = flows.ContactUUID("6393abc0-283d-4c9b-a1b3-641a035c34bf")
View Source
var CreatedOnFieldID = FieldID(2)
View Source
var DoctorRemindersCampaignID = CampaignID(10000)
View Source
var DoctorRemindersCampaignUUID = CampaignUUID("72aa12c5-cc11-4bc7-9406-044047845c70")
View Source
var DoctorsGroupID = GroupID(10000)
View Source
var DoctorsGroupUUID = assets.GroupUUID("c153e265-f7c9-4539-9dbc-9b358714b638")
View Source
var ErrNotFound = errors.New("not found")
View Source
var FavoritesFlowID = FlowID(10000)
View Source
var FavoritesFlowUUID = assets.FlowUUID("9de3663f-c5c5-4c92-9f45-ecbc09abcc85")
View Source
var GenderFieldUUID = FieldUUID("3a5891e4-756e-4dc9-8e12-b7a766168824")
View Source
var GeorgeID = ContactID(10002)
View Source
var GeorgeURN = urns.URN("tel:+250700000003")
View Source
var GeorgeURNID = URNID(10002)
View Source
var GeorgeUUID = flows.ContactUUID("8d024bcd-f473-4719-a00a-bd0bb1190135")
View Source
var IVRFlowID = FlowID(10003)
View Source
var IVRFlowUUID = assets.FlowUUID("2f81d0ea-4d75-4843-9371-3f7465311cce")
View Source
var IncomingExtraFlowID = FlowID(10006)
View Source
var IncomingExtraFlowUUID = assets.FlowUUID("376d3de6-7f0e-408c-80d6-b1919738bc80")
View Source
var NexmoChannelID = ChannelID(10001)
View Source
var NexmoChannelUUID = assets.ChannelUUID("19012bfd-3ce3-4cae-9bb9-76cf92c73d49")
View Source
var NilChannelID = ChannelID(0)
View Source
var NilStartID = StartID(0)

NilStartID is our constant for a nil start id

View Source
var NilTopupID = TopupID(0)

NilTopupID is our nil value for topup id

View Source
var Org1 = OrgID(1)
View Source
var Org2 = OrgID(2)
View Source
var Org2ChannelID = ChannelID(20000)
View Source
var Org2ChannelUUID = assets.ChannelUUID("a89bc872-3763-4b95-91d9-31d4e56c6651")
View Source
var Org2FavoritesFlowID = FlowID(20000)
View Source
var Org2FavoritesFlowUUID = assets.FlowUUID("f161bd16-3c60-40bd-8c92-228ce815b9cd")
View Source
var Org2FredID = ContactID(20000)
View Source
var Org2FredURN = urns.URN("tel:+250700000005")
View Source
var Org2FredURNID = URNID(20000)
View Source
var Org2FredUUID = flows.ContactUUID("26d20b72-f7d8-44dc-87f2-aae046dbff95")
View Source
var Org2SingleMessageFlowID = FlowID(20001)
View Source
var Org2SingleMessageFlowUUID = assets.FlowUUID("5277916d-6011-41ac-a4a4-f6ac6a4f1dd9")
View Source
var ParentTimeoutID = FlowID(10007)
View Source
var ParentTimeoutUUID = assets.FlowUUID("81c0f323-7e06-4e0c-a960-19c20f17117c")
View Source
var PickNumberFlowID = FlowID(10001)
View Source
var PickNumberFlowUUID = assets.FlowUUID("5890fe3a-f204-4661-b74d-025be4ee019c")
View Source
var RemindersEvent1ID = CampaignEventID(10000)
View Source
var RemindersEvent2ID = CampaignEventID(10001)
View Source
var ReportingLabelID = LabelID(10000)
View Source
var ReportingLabelUUID = assets.LabelUUID("ebc4dedc-91c4-4ed4-9dd6-daa05ea82698")
View Source
var SingleMessageFlowID = FlowID(10004)
View Source
var SingleMessageFlowUUID = assets.FlowUUID("a7c11d68-f008-496f-b56d-2d5cf4cf16a5")
View Source
var SurveyorFlowID = FlowID(10005)
View Source
var SurveyorFlowUUID = assets.FlowUUID("ed8cf8d4-a42c-4ce1-a7e3-44a2918e3cec")
View Source
var TestersGroupID = GroupID(10001)
View Source
var TestersGroupUUID = assets.GroupUUID("5e9d8fab-5e7e-4f51-b533-261af5dea70d")
View Source
var TestingLabelID = LabelID(10001)
View Source
var TestingLabelUUID = assets.LabelUUID("a6338cdc-7938-4437-8b05-2d5d785e3a08")
View Source
var TwilioChannelID = ChannelID(10000)
View Source
var TwilioChannelUUID = assets.ChannelUUID("74729f45-7f29-4868-9dc4-90e491e3c7d8")
View Source
var TwitterChannelID = ChannelID(10002)
View Source
var TwitterChannelUUID = assets.ChannelUUID("0f661e8b-ea9d-4bd3-9953-d368340acf91")

Functions

func ActiveChannelConnectionCount added in v0.0.74

func ActiveChannelConnectionCount(ctx context.Context, db Queryer, id ChannelID) (int, error)

ActiveChannelConnectionCount returns the number of ongoing connections for the passed in channel

func AddContactsToGroups added in v0.0.38

func AddContactsToGroups(ctx context.Context, tx Queryer, adds []*GroupAdd) error

AddContactsToGroups fires a bulk SQL query to remove all the contacts in the passed in groups

func AddEventFires added in v0.0.38

func AddEventFires(ctx context.Context, tx Queryer, adds []*FireAdd) error

AddEventFires adds the passed in event fires to our db

func AddMsgLabels added in v0.0.53

func AddMsgLabels(ctx context.Context, tx *sqlx.Tx, adds []*MsgLabelAdd) error

AddMsgLabels inserts the passed in msg labels 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 ApplyPreWriteEvent added in v0.0.138

func ApplyPreWriteEvent(ctx context.Context, tx *sqlx.Tx, rp *redis.Pool, org *OrgAssets, session *Session, e flows.Event) error

ApplyPreWriteEvent applies the passed in event before insertion or update, unlike normal event handlers it is not a requirement that all types have a handler.

func BulkSQL added in v0.0.22

func BulkSQL(ctx context.Context, label string, tx Queryer, sql string, vs []interface{}) error

func CalculateDynamicGroups added in v0.0.58

func CalculateDynamicGroups(ctx context.Context, tx Queryer, org *OrgAssets, contact *flows.Contact) error

CalculateDynamicGroups recalculates all the dynamic groups for the passed in contact, recalculating campaigns as necessary based on those group changes.

func ContactIDsFromURNs added in v0.0.58

func ContactIDsFromURNs(ctx context.Context, db *sqlx.DB, org *OrgAssets, assets flows.SessionAssets, us []urns.URN) (map[urns.URN]ContactID, error)

ContactIDsFromURNs will fetch or create the contacts for the passed in URNs, returning a map the same length as the passed in URNs with the ids of the contacts.

func ContactLock added in v0.0.86

func ContactLock(orgID OrgID, contactID ContactID) string

ContactLock returns the lock key for a particular contact, used with locker

func DeleteEventFires added in v0.0.27

func DeleteEventFires(ctx context.Context, db *sqlx.DB, fires []*EventFire) error

DeleteEventFires deletes all event fires passed in (used when an event has been marked as inactive)

func DeleteUnfiredContactEvents added in v0.0.58

func DeleteUnfiredContactEvents(ctx context.Context, tx Queryer, contactID ContactID) error

DeleteUnfiredContactEvents deletes all unfired event fires for the passed in contact

func DeleteUnfiredEventFires added in v0.0.38

func DeleteUnfiredEventFires(ctx context.Context, tx *sqlx.Tx, removes []*FireDelete) error

DeleteUnfiredEventFires removes event fires for the passed in event and contact

func Exec added in v0.0.74

func Exec(ctx context.Context, label string, tx Queryer, sql string, args ...interface{}) error

Exec calls ExecContext on the passed in Queryer, logging time taken if any rows were affected

func ExitSessions added in v0.0.74

func ExitSessions(ctx context.Context, tx Queryer, sessionIDs []SessionID, exitType ExitType, now time.Time) error

ExitSessions marks the passed in sessions as completed, also doing so for all associated runs

func ExpireRunsAndSessions added in v0.0.74

func ExpireRunsAndSessions(ctx context.Context, db Queryer, runIDs []FlowRunID, sessionIDs []SessionID) error

ExpireRunsAndSessions expires all the passed in runs and sessions. Note this should only be called for runs that have no parents or no way of continuing

func FlushCache added in v0.0.38

func FlushCache()

FlushCache clears our entire org cache

func GetSessionAssets added in v0.0.38

func GetSessionAssets(org *OrgAssets) (flows.SessionAssets, error)

GetSessionAssets returns a goflow session assets object for the passed in org assets

func GetURNInt added in v0.0.73

func GetURNInt(urn urns.URN, key string) int

func InsertFlowStarts added in v0.0.126

func InsertFlowStarts(ctx context.Context, db Queryer, starts []*FlowStart) error

InsertFlowStarts inserts all the passed in starts

func InsertMessages added in v0.0.38

func InsertMessages(ctx context.Context, tx Queryer, msgs []*Msg) error

InsertMessages inserts the passed in messages in a single query

func InsertWebhookEvents added in v0.0.84

func InsertWebhookEvents(ctx context.Context, db Queryer, events []*WebhookEvent) error

InsertWebhookEvents inserts the passed in webhook events, assigning them ids

func InsertWebhookResults added in v0.0.76

func InsertWebhookResults(ctx context.Context, db Queryer, results []*WebhookResult) error

InsertWebhookResults will insert the passed in webhook results, setting the ID parameter on each

func InterruptContactRuns added in v0.0.27

func InterruptContactRuns(ctx context.Context, tx Queryer, sessionType FlowType, contactIDs []flows.ContactID, now time.Time) error

InterruptContactRuns interrupts all runs and sesions that exist for the passed in list of contacts

func MarkBroadcastSent added in v1.0.6

func MarkBroadcastSent(ctx context.Context, db *sqlx.DB, id BroadcastID) error

MarkBroadcastSent marks the passed in broadcast as sent

func MarkEventsFired added in v0.0.19

func MarkEventsFired(ctx context.Context, tx Queryer, fires []*EventFire, fired time.Time, result EventFireResult) error

MarkEventsFired updates the passed in event fires with the fired time and result

func MarkMessagesPending added in v0.0.5

func MarkMessagesPending(ctx context.Context, tx *sqlx.Tx, msgs []*Msg) error

MarkMessagesPending marks the passed in messages as pending

func MarkMessagesQueued added in v0.0.2

func MarkMessagesQueued(ctx context.Context, tx *sqlx.Tx, msgs []*Msg) error

MarkMessagesQueued marks the passed in messages as queued

func MarkStartComplete added in v0.0.27

func MarkStartComplete(ctx context.Context, db *sqlx.DB, startID StartID) error

MarkStartComplete sets the status for the passed in flow start

func MarkStartStarted added in v0.0.28

func MarkStartStarted(ctx context.Context, db *sqlx.DB, startID StartID, contactCount int) error

MarkStartStarted sets the status for the passed in flow start to S and updates the contact count on it

func NewSessionAssets added in v0.0.51

func NewSessionAssets(org *OrgAssets) (flows.SessionAssets, error)

NewSessionAssets creates new sessions assets, returning the result

func NormalizeAttachment added in v0.0.74

func NormalizeAttachment(attachment utils.Attachment) utils.Attachment

NormalizeAttachment will turn any relative URL in the passed in attachment and normalize it to include the full host for attachment domains

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 RegisterPreWriteHook added in v0.0.138

func RegisterPreWriteHook(eventType string, handler EventHandler)

RegisterPreWriteHook registers the passed in handler as being interested in the passed in type before session and run insertion

func RemoveContactsFromGroups added in v0.0.38

func RemoveContactsFromGroups(ctx context.Context, tx Queryer, removals []*GroupRemove) error

RemoveContactsFromGroups fires a bulk SQL query to remove all the contacts in the passed in groups

func RunExpiration added in v0.0.66

func RunExpiration(ctx context.Context, db *sqlx.DB, runID FlowRunID) (*time.Time, error)

RunExpiration looks up the run expiration for the passed in run, can return nil if the run is no longer active

func StopContact added in v0.0.38

func StopContact(ctx context.Context, tx Queryer, orgID OrgID, contactID ContactID) error

StopContact stops the contact with the passed in id, removing them from all groups and setting their state to stopped.

func URNForID added in v0.0.74

func URNForID(ctx context.Context, tx Queryer, org *OrgAssets, urnID URNID) (urns.URN, error)

URNForID will return a URN for the passed in ID including all the special query parameters set that goflow and mailroom depend on. Generally this URN is build when loading a contact but occasionally we need to load URNs one by one and this accomplishes that

func URNForURN added in v0.0.74

func URNForURN(ctx context.Context, tx Queryer, org *OrgAssets, u urns.URN) (urns.URN, error)

URNForURN will return a URN for the passed in URN including all the special query parameters set that goflow and mailroom depend on.

func UnsubscribeResthooks added in v0.0.38

func UnsubscribeResthooks(ctx context.Context, tx *sqlx.Tx, unsubs []*ResthookUnsubscribe) error

UnsubscribeResthooks unsubscribles all the resthooks passed in

func UpdateChannelConnectionStatuses added in v0.0.74

func UpdateChannelConnectionStatuses(ctx context.Context, db Queryer, connectionIDs []ConnectionID, status ConnectionStatus) error

UpdateChannelConnectionStatuses updates the status for all the passed in connection ids

func UpdateContactModifiedOn added in v0.0.48

func UpdateContactModifiedOn(ctx context.Context, tx Queryer, contactIDs []ContactID) error

UpdateContactModifiedOn updates modified on on the passed in contact

func UpdateContactURNs added in v0.0.48

func UpdateContactURNs(ctx context.Context, tx Queryer, org *OrgAssets, changes []*ContactURNsChanged) error

UpdateContactURNs updates the contact urns in our database to match the passed in changes

func UpdateMessage added in v0.0.38

func UpdateMessage(ctx context.Context, tx Queryer, msgID flows.MsgID, status MsgStatus, visibility MsgVisibility, msgType MsgType, topup TopupID) error

UpdateMessage updates the passed in message status, visibility and msg type

Types

type Broadcast added in v0.0.60

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

Broadcast represents a broadcast that needs to be sent

func NewBroadcast added in v1.0.6

func NewBroadcast(
	orgID OrgID, id BroadcastID, translations map[utils.Language]*BroadcastTranslation,
	state TemplateState, baseLanguage utils.Language, urns []urns.URN, contactIDs []ContactID, groupIDs []GroupID) *Broadcast

NewBroadcast creates a new broadcast with the passed in parameters

func NewBroadcastFromEvent added in v0.0.60

func NewBroadcastFromEvent(ctx context.Context, tx Queryer, org *OrgAssets, event *events.BroadcastCreatedEvent) (*Broadcast, error)

NewBroadcastFromEvent creates a broadcast object from the passed in broadcast event

func (*Broadcast) BroadcastID added in v1.0.6

func (b *Broadcast) BroadcastID() BroadcastID

func (*Broadcast) ContactIDs added in v0.0.60

func (b *Broadcast) ContactIDs() []ContactID

func (*Broadcast) CreateBatch added in v0.0.60

func (b *Broadcast) CreateBatch(contactIDs []ContactID) *BroadcastBatch

func (*Broadcast) GroupIDs added in v0.0.60

func (b *Broadcast) GroupIDs() []GroupID

func (*Broadcast) MarshalJSON added in v0.0.60

func (b *Broadcast) MarshalJSON() ([]byte, error)

func (*Broadcast) OrgID added in v0.0.60

func (b *Broadcast) OrgID() OrgID

func (*Broadcast) TemplateState added in v1.0.6

func (b *Broadcast) TemplateState() TemplateState

func (*Broadcast) Translations added in v0.0.60

func (b *Broadcast) Translations() map[utils.Language]*BroadcastTranslation

func (*Broadcast) URNs added in v0.0.60

func (b *Broadcast) URNs() []urns.URN

func (*Broadcast) UnmarshalJSON added in v0.0.60

func (b *Broadcast) UnmarshalJSON(data []byte) error

type BroadcastBatch added in v0.0.60

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

BroadcastBatch represents a batch of contacts that need messages sent for

func (*BroadcastBatch) BaseLanguage added in v0.0.60

func (b *BroadcastBatch) BaseLanguage() utils.Language

func (*BroadcastBatch) BroadcastID added in v1.0.6

func (b *BroadcastBatch) BroadcastID() BroadcastID

func (*BroadcastBatch) ContactIDs added in v0.0.60

func (b *BroadcastBatch) ContactIDs() []ContactID

func (*BroadcastBatch) IsLast added in v0.0.60

func (b *BroadcastBatch) IsLast() bool

func (*BroadcastBatch) MarshalJSON added in v0.0.60

func (b *BroadcastBatch) MarshalJSON() ([]byte, error)

func (*BroadcastBatch) OrgID added in v0.0.60

func (b *BroadcastBatch) OrgID() OrgID

func (*BroadcastBatch) SetIsLast added in v0.0.60

func (b *BroadcastBatch) SetIsLast(last bool)

func (*BroadcastBatch) SetURNs added in v0.0.60

func (b *BroadcastBatch) SetURNs(urns map[ContactID]urns.URN)

func (*BroadcastBatch) TemplateState added in v1.0.6

func (b *BroadcastBatch) TemplateState() TemplateState

func (*BroadcastBatch) Translations added in v0.0.60

func (b *BroadcastBatch) Translations() map[utils.Language]*BroadcastTranslation

func (*BroadcastBatch) URNs added in v0.0.60

func (b *BroadcastBatch) URNs() map[ContactID]urns.URN

func (*BroadcastBatch) UnmarshalJSON added in v0.0.60

func (b *BroadcastBatch) UnmarshalJSON(data []byte) error

type BroadcastID added in v0.0.60

type BroadcastID null.Int

BroadcastID is our internal type for broadcast ids, which can be null/0

func (BroadcastID) MarshalJSON added in v1.0.6

func (i BroadcastID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*BroadcastID) Scan added in v1.0.6

func (i *BroadcastID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*BroadcastID) UnmarshalJSON added in v1.0.6

func (i *BroadcastID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (BroadcastID) Value added in v1.0.6

func (i BroadcastID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type BroadcastTranslation added in v0.0.60

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

BroadcastTranslation is the translation for the passed in language

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

func (c *Campaign) GroupID() GroupID

GroupID returns the id of the group this campaign works against

func (*Campaign) GroupUUID added in v0.0.17

func (c *Campaign) GroupUUID() assets.GroupUUID

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) Name added in v0.0.17

func (c *Campaign) Name() string

Name returns the name 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

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) QualifiesByField added in v0.0.50

func (e *CampaignEvent) QualifiesByField(contact *flows.Contact) bool

QualifiesByField returns whether the passed in contact qualifies for this event by group membership

func (*CampaignEvent) QualifiesByGroup added in v0.0.50

func (e *CampaignEvent) QualifiesByGroup(contact *flows.Contact) bool

QualifiesByGroup returns whether the passed in contact qualifies for this event by group membership

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) StartMode added in v0.0.42

func (e *CampaignEvent) StartMode() StartMode

StartMode returns the start mode for this campaign event

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

type CampaignEventUUID utils.UUID

CampaignEventUUID is our type for campaign event UUIDs

type CampaignID added in v0.0.17

type CampaignID int

CampaignID is our type for campaign ids

type CampaignUUID added in v0.0.17

type CampaignUUID utils.UUID

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) Address added in v0.0.5

func (c *Channel) Address() string

Address returns the name of this channel

func (*Channel) ChannelReference added in v0.0.38

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

ChannelReference return a channel reference for this channel

func (*Channel) Config added in v0.0.172

func (c *Channel) Config() map[string]interface{}

Config returns the config for this channel

func (*Channel) ConfigValue added in v0.0.73

func (c *Channel) ConfigValue(key string, def string) string

ConfigValue returns the config value for the passed in key

func (*Channel) Country added in v0.0.5

func (c *Channel) Country() string

Country returns the contry code for this channel

func (*Channel) ID added in v0.0.5

func (c *Channel) ID() ChannelID

ID returns the id of this channel

func (*Channel) MatchPrefixes added in v0.0.5

func (c *Channel) MatchPrefixes() []string

MatchPrefixes returns the prefixes we should also match when determining channel affinity

func (*Channel) Name added in v0.0.5

func (c *Channel) Name() string

Name returns the name of this channel

func (*Channel) Parent added in v0.0.5

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

Parent returns a reference to the parent channel of this channel (if any)

func (*Channel) Roles added in v0.0.5

func (c *Channel) Roles() []assets.ChannelRole

Roles returns the roles this channel supports

func (*Channel) Schemes added in v0.0.5

func (c *Channel) Schemes() []string

Schemes returns the schemes this channel supports

func (*Channel) TPS added in v0.0.5

func (c *Channel) TPS() int

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 ChannelConnection added in v0.0.74

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

func InsertIVRConnection added in v0.0.74

func InsertIVRConnection(ctx context.Context, db *sqlx.DB, orgID OrgID, channelID ChannelID, startID StartID, contactID ContactID, urnID URNID,
	direction ConnectionDirection, status ConnectionStatus, externalID string) (*ChannelConnection, error)

InsertIVRConnection creates a new IVR session for the passed in org, channel and contact, inserting it

func LoadChannelConnectionsToRetry added in v0.0.74

func LoadChannelConnectionsToRetry(ctx context.Context, db Queryer, limit int) ([]*ChannelConnection, error)

LoadChannelConnectionsToRetry returns up to limit connections that need to be retried

func SelectChannelConnection added in v0.0.74

func SelectChannelConnection(ctx context.Context, db Queryer, id ConnectionID) (*ChannelConnection, error)

SelectChannelConnection loads a channel connection by id

func SelectChannelConnectionByExternalID added in v0.0.74

func SelectChannelConnectionByExternalID(ctx context.Context, db Queryer, channelID ChannelID, connType ConnectionType, externalID string) (*ChannelConnection, error)

SelectChannelConnectionByExternalID loads a channel connection by id

func (*ChannelConnection) ChannelID added in v0.0.74

func (c *ChannelConnection) ChannelID() ChannelID

func (*ChannelConnection) ContactID added in v0.0.74

func (c *ChannelConnection) ContactID() ContactID

func (*ChannelConnection) ContactURNID added in v0.0.74

func (c *ChannelConnection) ContactURNID() URNID

func (*ChannelConnection) ExternalID added in v0.0.74

func (c *ChannelConnection) ExternalID() string

func (*ChannelConnection) ID added in v0.0.74

func (*ChannelConnection) MarkErrored added in v0.0.74

func (c *ChannelConnection) MarkErrored(ctx context.Context, db Queryer, now time.Time, wait time.Duration) error

MarkErrored updates the status for this connection to errored and schedules a retry if appropriate

func (*ChannelConnection) MarkFailed added in v0.0.74

func (c *ChannelConnection) MarkFailed(ctx context.Context, db Queryer, now time.Time) error

MarkFailed updates the status for this connection

func (*ChannelConnection) MarkStarted added in v0.0.74

func (c *ChannelConnection) MarkStarted(ctx context.Context, db Queryer, now time.Time) error

MarkStarted updates the status for this connection as well as sets the started on date

func (*ChannelConnection) MarkThrottled added in v0.0.74

func (c *ChannelConnection) MarkThrottled(ctx context.Context, db Queryer, now time.Time) error

MarkThrottled updates the status for this connection to be queued, to be retried in a minute

func (*ChannelConnection) NextAttempt added in v0.0.74

func (c *ChannelConnection) NextAttempt() *time.Time

func (*ChannelConnection) OrgID added in v0.0.74

func (c *ChannelConnection) OrgID() OrgID

func (*ChannelConnection) StartID added in v0.0.74

func (c *ChannelConnection) StartID() StartID

func (*ChannelConnection) Status added in v0.0.74

func (c *ChannelConnection) Status() ConnectionStatus

func (*ChannelConnection) UpdateExternalID added in v0.0.74

func (c *ChannelConnection) UpdateExternalID(ctx context.Context, db *sqlx.DB, id string) error

UpdateExternalID updates the external id on the passed in channel session

func (*ChannelConnection) UpdateStatus added in v0.0.74

func (c *ChannelConnection) UpdateStatus(ctx context.Context, db Queryer, status ConnectionStatus, duration int, now time.Time) error

UpdateStatus updates the status for this connection

type ChannelEvent added in v0.0.74

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

ChannelEvent represents an event that occurred associated with a channel, such as a referral, missed call, etc..

func NewChannelEvent added in v0.0.74

func NewChannelEvent(eventType ChannelEventType, orgID OrgID, channelID ChannelID, contactID ContactID, urnID URNID, extra map[string]interface{}, isNewContact bool) *ChannelEvent

NewChannelEvent creates a new channel event for the passed in parameters, returning it

func (*ChannelEvent) ChannelID added in v0.0.74

func (e *ChannelEvent) ChannelID() ChannelID

func (*ChannelEvent) ContactID added in v0.0.74

func (e *ChannelEvent) ContactID() ContactID

func (*ChannelEvent) Extra added in v0.0.74

func (e *ChannelEvent) Extra() map[string]interface{}

func (*ChannelEvent) ExtraValue added in v0.0.170

func (e *ChannelEvent) ExtraValue(key string) string

func (*ChannelEvent) ID added in v0.0.74

func (e *ChannelEvent) ID() ChannelEventID

func (*ChannelEvent) Insert added in v0.0.74

func (e *ChannelEvent) Insert(ctx context.Context, db *sqlx.DB) error

Insert inserts this channel event to our DB. The ID of the channel event will be set if no error is returned

func (*ChannelEvent) IsNewContact added in v0.0.74

func (e *ChannelEvent) IsNewContact() bool

func (*ChannelEvent) MarshalJSON added in v0.0.74

func (e *ChannelEvent) MarshalJSON() ([]byte, error)

MarshalJSON is our custom marshaller so that our inner struct get output

func (*ChannelEvent) OrgID added in v0.0.74

func (e *ChannelEvent) OrgID() OrgID

func (*ChannelEvent) URNID added in v0.0.74

func (e *ChannelEvent) URNID() URNID

func (*ChannelEvent) UnmarshalJSON added in v0.0.74

func (e *ChannelEvent) UnmarshalJSON(b []byte) error

UnmarshalJSON is our custom marshaller so that our inner struct get output

type ChannelEventID added in v0.0.74

type ChannelEventID int64

type ChannelEventType added in v0.0.74

type ChannelEventType string

type ChannelID

type ChannelID null.Int

func GetURNChannelID added in v0.0.73

func GetURNChannelID(org *OrgAssets, urn urns.URN) *ChannelID

func (ChannelID) MarshalJSON added in v0.0.134

func (i ChannelID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*ChannelID) Scan added in v0.0.134

func (i *ChannelID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*ChannelID) UnmarshalJSON added in v0.0.134

func (i *ChannelID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (ChannelID) Value added in v0.0.134

func (i ChannelID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type ChannelLog added in v0.0.74

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

ChannelLog is the mailroom struct that represents channel logs

func InsertChannelLog added in v0.0.74

func InsertChannelLog(ctx context.Context, db *sqlx.DB,
	desc string, isError bool, method string, url string, request []byte, status int, response []byte,
	createdOn time.Time, elapsed time.Duration, channel *Channel, conn *ChannelConnection) (*ChannelLog, error)

InsertChannelLog writes a channel log to the db returning the inserted log

func (*ChannelLog) ID added in v0.0.74

func (l *ChannelLog) ID() ChannelLogID

ID returns the id of this channel log

type ChannelLogID added in v0.0.74

type ChannelLogID int64

ChannelLogID is our type for a channel log id

type ChannelType added in v0.0.5

type ChannelType string

type ConnectionDirection added in v0.0.74

type ConnectionDirection string

type ConnectionID

type ConnectionID null.Int

func (ConnectionID) MarshalJSON added in v0.0.134

func (i ConnectionID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*ConnectionID) Scan added in v0.0.134

func (i *ConnectionID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*ConnectionID) UnmarshalJSON added in v0.0.134

func (i *ConnectionID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (ConnectionID) Value added in v0.0.134

func (i ConnectionID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type ConnectionStatus added in v0.0.74

type ConnectionStatus string

type ConnectionType added in v0.0.74

type ConnectionType string

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 Queryer, org *OrgAssets, ids []ContactID) ([]*Contact, error)

LoadContacts loads a set of contacts for the passed in ids

func (*Contact) CreatedOn added in v0.0.38

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

func (*Contact) Fields added in v0.0.38

func (c *Contact) Fields() map[string]*flows.Value

func (*Contact) FlowContact added in v0.0.38

func (c *Contact) FlowContact(org *OrgAssets, session flows.SessionAssets) (*flows.Contact, error)

FlowContact converts our mailroom contact into a flow contact for use in the engine

func (*Contact) Groups added in v0.0.38

func (c *Contact) Groups() []*Group

func (*Contact) ID added in v0.0.38

func (c *Contact) ID() ContactID

func (*Contact) IsBlocked added in v0.0.38

func (c *Contact) IsBlocked() bool

func (*Contact) IsStopped added in v0.0.38

func (c *Contact) IsStopped() bool

func (*Contact) Language added in v0.0.38

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

func (*Contact) ModifiedOn added in v0.0.38

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

func (*Contact) Name added in v0.0.38

func (c *Contact) Name() string

func (*Contact) URNForID added in v0.0.74

func (c *Contact) URNForID(urnID URNID) urns.URN

URNForID returns the flow URN for the passed in URN, return NilURN if not found

func (*Contact) URNs added in v0.0.38

func (c *Contact) URNs() []urns.URN

func (*Contact) UUID added in v0.0.38

func (c *Contact) UUID() flows.ContactUUID

func (*Contact) Unstop added in v0.0.38

func (c *Contact) Unstop(ctx context.Context, db *sqlx.DB) error

Unstop sets the is_stopped attribute to false for this contact

func (*Contact) UpdatePreferredURN added in v0.0.48

func (c *Contact) UpdatePreferredURN(ctx context.Context, tx Queryer, org *OrgAssets, urnID URNID, channel *Channel) error

UpdatePreferredURN 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 ContactID

type ContactID null.Int

ContactID is our type for contact ids, which can be null

func ContactIDsForGroupIDs added in v0.0.60

func ContactIDsForGroupIDs(ctx context.Context, tx Queryer, groupIDs []GroupID) ([]ContactID, error)

ContactIDsForGroupIDs returns the unique contacts that are in the passed in groups

func ContactIDsFromReferences added in v0.0.58

func ContactIDsFromReferences(ctx context.Context, tx Queryer, org *OrgAssets, refs []*flows.ContactReference) ([]ContactID, error)

ContactIDsFromReferences queries the contacts for the passed in org, returning the contact ids for the references

func CreateContact added in v0.0.58

func CreateContact(ctx context.Context, db *sqlx.DB, org *OrgAssets, assets flows.SessionAssets, urn urns.URN) (ContactID, error)

CreateContact creates a new contact for the passed in org with the passed in URNs

func FindActiveSessionOverlap added in v0.0.133

func FindActiveSessionOverlap(ctx context.Context, db *sqlx.DB, flowType FlowType, contacts []ContactID) ([]ContactID, error)

FindActiveSessionOverlap 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 []ContactID) ([]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 (ContactID) MarshalJSON added in v0.0.86

func (i ContactID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*ContactID) Scan added in v0.0.86

func (i *ContactID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*ContactID) UnmarshalJSON added in v0.0.86

func (i *ContactID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (ContactID) Value added in v0.0.86

func (i ContactID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type ContactURN added in v0.0.74

type ContactURN struct {
	ID        URNID     `json:"id"          db:"id"`
	Priority  int       `json:"priority"    db:"priority"`
	Scheme    string    `json:"scheme"      db:"scheme"`
	Path      string    `json:"path"        db:"path"`
	Display   string    `json:"display"     db:"display"`
	Auth      string    `json:"auth"        db:"auth"`
	ChannelID ChannelID `json:"channel_id"  db:"channel_id"`
}

func (*ContactURN) AsURN added in v0.0.74

func (u *ContactURN) AsURN(org *OrgAssets) (urns.URN, error)

AsURN returns a full URN representation including the query parameters needed by goflow and mailroom

type ContactURNsChanged added in v0.0.48

type ContactURNsChanged struct {
	ContactID ContactID
	OrgID     OrgID
	URNs      []urns.URN
}

ContactURNsChanged represents the new status of URNs for a contact

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   ContactID       `db:"contact_id"`
	Scheduled   time.Time       `db:"scheduled"`
	Fired       *time.Time      `db:"fired"`
	FiredResult EventFireResult `db:"fired_result"`
}

EventFire represents a single campaign event fire for an event and contact

func LoadEventFires added in v0.0.19

func LoadEventFires(ctx context.Context, db *sqlx.DB, ids []int64) ([]*EventFire, error)

LoadEventFires loads all the event fires with the passed in ids

type EventFireResult added in v0.0.133

type EventFireResult = null.String

EventFireResult represents how a event fire was fired

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 EventStatus added in v0.0.84

type EventStatus string

type EventType added in v0.0.84

type EventType string

type ExitType

type ExitType = null.String

type Field added in v0.0.5

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

Field is our mailroom type for contact field types

func (*Field) ID added in v0.0.17

func (f *Field) ID() FieldID

ID returns the ID of this field

func (*Field) Key added in v0.0.5

func (f *Field) Key() string

Key returns the key for this field

func (*Field) Name added in v0.0.5

func (f *Field) Name() string

Name returns the name for this field

func (*Field) Type added in v0.0.5

func (f *Field) Type() assets.FieldType

Type returns the value type for this field

func (*Field) UUID added in v0.0.5

func (f *Field) UUID() FieldUUID

UUID returns the UUID of this field

type FieldID added in v0.0.17

type FieldID int

FieldID is our type for the database field ID

type FieldUUID added in v0.0.5

type FieldUUID utils.UUID

FieldUUID is our type for the UUID of a field

type FireAdd added in v0.0.38

type FireAdd struct {
	ContactID 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 ContactID       `db:"contact_id"`
	EventID   CampaignEventID `db:"event_id"`
}

type FireID added in v0.0.19

type FireID int

FireID is our id for our event fires

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 flow reference for this flow

func (*Flow) FlowType added in v0.0.73

func (f *Flow) FlowType() FlowType

FlowType return the type of flow this is

func (*Flow) ID added in v0.0.5

func (f *Flow) ID() FlowID

ID returns the ID for this flow

func (*Flow) IgnoreTriggers added in v0.0.38

func (f *Flow) IgnoreTriggers() bool

IgnoreTriggers returns whether this flow ignores triggers

func (*Flow) IntConfigValue added in v0.0.74

func (f *Flow) IntConfigValue(key string, defaultValue int64) int64

IntConfigValue returns the value for the key passed in as an int. If the value is not an integer or is not present then the defaultValue is returned

func (*Flow) Name added in v0.0.5

func (f *Flow) Name() string

Name returns the name of this flow

func (*Flow) SetDefinition added in v0.0.49

func (f *Flow) SetDefinition(definition json.RawMessage)

SetDefinition sets our definition from the passed in new definition format

func (*Flow) SetLegacyDefinition added in v0.0.49

func (f *Flow) SetLegacyDefinition(legacyDefinition json.RawMessage) error

SetLegacyDefinition sets our definition from the passed in legacy definition

func (*Flow) StringConfigValue added in v0.0.74

func (f *Flow) StringConfigValue(key string, defaultValue string) string

StringConfigValue returns the value for the key passed in as a string. If the value is not a string or is not present then the defaultValue is returned

func (*Flow) UUID added in v0.0.5

func (f *Flow) UUID() assets.FlowUUID

UUID returns the UUID for this flow

func (*Flow) Version added in v0.0.177

func (f *Flow) Version() string

Version returns the version this flow was authored in

type FlowID

type FlowID null.Int

func FlowIDForStart added in v0.0.74

func FlowIDForStart(ctx context.Context, db Queryer, orgID OrgID, startID StartID) (FlowID, error)

FlowIDForStart looks up the flow id for the passed in flow start

func (FlowID) MarshalJSON added in v0.0.147

func (i FlowID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*FlowID) Scan added in v0.0.147

func (i *FlowID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*FlowID) UnmarshalJSON added in v0.0.147

func (i *FlowID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (FlowID) Value added in v0.0.147

func (i FlowID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type FlowRun

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

FlowRun is the mailroom type for a FlowRun

func (*FlowRun) MarshalJSON added in v0.0.77

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

MarshalJSON is our custom marshaller so that our inner struct get output

func (*FlowRun) ModifiedOn

func (r *FlowRun) ModifiedOn() time.Time

func (*FlowRun) SetConnectionID added in v0.0.77

func (r *FlowRun) SetConnectionID(connID *ConnectionID)

func (*FlowRun) SetSessionID added in v0.0.77

func (r *FlowRun) SetSessionID(sessionID SessionID)

func (*FlowRun) SetStartID added in v0.0.77

func (r *FlowRun) SetStartID(startID StartID)

func (*FlowRun) UUID

func (r *FlowRun) UUID() flows.RunUUID

func (*FlowRun) UnmarshalJSON added in v0.0.77

func (r *FlowRun) UnmarshalJSON(b []byte) error

UnmarshalJSON is our custom marshaller so that our inner struct get output

type FlowRunID added in v0.0.38

type FlowRunID int64

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 NewFlowStart(
	orgID OrgID, flowType FlowType, flowID FlowID,
	groupIDs []GroupID, contactIDs []ContactID, urns []urns.URN, createContact bool,
	restartParticipants bool, includeActive bool, parent json.RawMessage, extra json.RawMessage) *FlowStart

NewFlowStart creates a new flow start objects for the passed in parameters

func (*FlowStart) ContactIDs added in v0.0.27

func (s *FlowStart) ContactIDs() []ContactID

func (*FlowStart) CreateBatch added in v0.0.27

func (s *FlowStart) CreateBatch(contactIDs []ContactID) *FlowStartBatch

CreateBatch creates a batch for this start using the passed in contact ids

func (*FlowStart) CreateContact added in v0.0.58

func (s *FlowStart) CreateContact() bool

func (*FlowStart) Extra added in v0.0.82

func (s *FlowStart) Extra() json.RawMessage

func (*FlowStart) FlowID added in v0.0.27

func (s *FlowStart) FlowID() FlowID

func (*FlowStart) FlowType added in v0.0.74

func (s *FlowStart) FlowType() FlowType

func (*FlowStart) GroupIDs added in v0.0.27

func (s *FlowStart) GroupIDs() []GroupID

func (*FlowStart) ID added in v0.0.90

func (s *FlowStart) ID() StartID

func (*FlowStart) IncludeActive added in v0.0.27

func (s *FlowStart) IncludeActive() bool

func (*FlowStart) MarshalJSON added in v0.0.27

func (s *FlowStart) MarshalJSON() ([]byte, error)

func (*FlowStart) OrgID added in v0.0.27

func (s *FlowStart) OrgID() OrgID

func (*FlowStart) Parent added in v0.0.58

func (s *FlowStart) Parent() json.RawMessage

func (*FlowStart) RestartParticipants added in v0.0.27

func (s *FlowStart) RestartParticipants() bool

func (*FlowStart) URNs added in v0.0.58

func (s *FlowStart) URNs() []urns.URN

func (*FlowStart) UnmarshalJSON added in v0.0.27

func (s *FlowStart) UnmarshalJSON(data []byte) error

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() []ContactID

func (*FlowStartBatch) Extra added in v0.0.82

func (b *FlowStartBatch) Extra() json.RawMessage

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) Parent added in v0.0.58

func (b *FlowStartBatch) Parent() json.RawMessage

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 FlowType added in v0.0.73

type FlowType string

type Group added in v0.0.5

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

Group is our mailroom type for contact groups

func (*Group) ID added in v0.0.5

func (g *Group) ID() GroupID

ID returns the ID for this group

func (*Group) Name added in v0.0.5

func (g *Group) Name() string

Name returns the name for this group

func (*Group) Query added in v0.0.5

func (g *Group) Query() string

Query returns the query string (if any) for this group

func (*Group) UUID added in v0.0.5

func (g *Group) UUID() assets.GroupUUID

UUID returns the uuid for this group

type GroupAdd added in v0.0.38

type GroupAdd struct {
	ContactID ContactID `db:"contact_id"`
	GroupID   GroupID   `db:"group_id"`
}

GroupAdd is our struct to track a final group additions

type GroupID added in v0.0.5

type GroupID int

GroupID is our type for group ids

type GroupRemove added in v0.0.38

type GroupRemove struct {
	ContactID 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

func (*Label) ID added in v0.0.5

func (l *Label) ID() LabelID

ID returns the ID for this label

func (*Label) Name added in v0.0.5

func (l *Label) Name() string

Name returns the name for this label

func (*Label) UUID added in v0.0.5

func (l *Label) UUID() assets.LabelUUID

UUID returns the uuid for this label

type LabelID added in v0.0.5

type LabelID int

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

func (*Location) Aliases added in v0.0.5

func (l *Location) Aliases() []string

Aliases returns the list of aliases for this location

func (*Location) Children added in v0.0.5

func (l *Location) Children() []*Location

Children returns the list of children for this location

func (*Location) ID added in v0.0.5

func (l *Location) ID() int

ID returns the database id for this location

func (*Location) Level added in v0.0.5

func (l *Location) Level() int

Level returns the level for this location

func (*Location) Name added in v0.0.5

func (l *Location) Name() string

Name returns the name for this location

func (*Location) OSMID added in v0.0.5

func (l *Location) OSMID() string

OSMID returns the OSM ID for this location

type MatchType added in v0.0.38

type MatchType string

type Msg

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

Msg is our type for mailroom messages

func CreateBroadcastMessages added in v0.0.60

func CreateBroadcastMessages(ctx context.Context, db Queryer, rp *redis.Pool, org *OrgAssets, sa flows.SessionAssets, bcast *BroadcastBatch) ([]*Msg, error)

func NewIncomingIVR added in v0.0.74

func NewIncomingIVR(orgID OrgID, conn *ChannelConnection, in *flows.MsgIn, createdOn time.Time) *Msg

NewIncomingIVR creates a new incoming IVR message for the passed in text and attachment

func NewIncomingMsg added in v0.0.77

func NewIncomingMsg(orgID OrgID, channel *Channel, contactID ContactID, in *flows.MsgIn, createdOn time.Time) *Msg

NewIncomingMsg creates a new incoming message for the passed in text and attachment

func NewOutgoingIVR added in v0.0.74

func NewOutgoingIVR(orgID OrgID, conn *ChannelConnection, out *flows.MsgOut, createdOn time.Time) (*Msg, error)

NewOutgoingIVR creates a new IVR message for the passed in text with the optional attachment

func NewOutgoingMsg added in v0.0.17

func NewOutgoingMsg(orgID OrgID, channel *Channel, contactID 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() []utils.Attachment

func (*Msg) BroadcastID added in v1.0.6

func (m *Msg) BroadcastID() BroadcastID

func (*Msg) Channel added in v0.0.5

func (m *Msg) Channel() *Channel

func (*Msg) ChannelID

func (m *Msg) ChannelID() ChannelID

func (*Msg) ChannelUUID

func (m *Msg) ChannelUUID() assets.ChannelUUID

func (*Msg) ConnectionID

func (m *Msg) ConnectionID() *ConnectionID

func (*Msg) ContactID

func (m *Msg) ContactID() ContactID

func (*Msg) ContactURNID

func (m *Msg) ContactURNID() *URNID

func (*Msg) CreatedOn

func (m *Msg) CreatedOn() time.Time

func (*Msg) Direction

func (m *Msg) Direction() MsgDirection

func (*Msg) ErrorCount

func (m *Msg) ErrorCount() int

func (*Msg) ExternalID

func (m *Msg) ExternalID() null.String

func (*Msg) HighPriority

func (m *Msg) HighPriority() bool

func (*Msg) ID

func (m *Msg) ID() flows.MsgID

func (*Msg) MarshalJSON added in v0.0.38

func (m *Msg) MarshalJSON() ([]byte, error)

func (*Msg) Metadata

func (m *Msg) Metadata() map[string]interface{}

func (*Msg) ModifiedOn

func (m *Msg) ModifiedOn() time.Time

func (*Msg) MsgCount

func (m *Msg) MsgCount() int

func (*Msg) MsgType

func (m *Msg) MsgType() MsgType

func (*Msg) NextAttempt

func (m *Msg) NextAttempt() time.Time

func (*Msg) OrgID

func (m *Msg) OrgID() OrgID

func (*Msg) QueuedOn

func (m *Msg) QueuedOn() time.Time

func (*Msg) SentOn

func (m *Msg) SentOn() time.Time

func (*Msg) SetBroadcastID added in v1.0.6

func (m *Msg) SetBroadcastID(broadcastID BroadcastID)

func (*Msg) SetChannelID added in v0.0.77

func (m *Msg) SetChannelID(channelID ChannelID)

func (*Msg) SetResponseTo added in v0.0.53

func (m *Msg) SetResponseTo(id MsgID, externalID null.String)

SetResponseTo set the incoming message that this session should be associated with in this sprint

func (*Msg) SetTimeout added in v0.0.68

func (m *Msg) SetTimeout(id SessionID, start time.Time, timeout time.Duration)

SetTimeout sets the timeout for this message

func (*Msg) SetTopup added in v0.0.38

func (m *Msg) SetTopup(topupID TopupID)

func (*Msg) SetURN added in v0.0.78

func (m *Msg) SetURN(urn urns.URN) error

func (*Msg) Status

func (m *Msg) Status() MsgStatus

func (*Msg) Text

func (m *Msg) Text() string

func (*Msg) TopupID added in v0.0.38

func (m *Msg) TopupID() TopupID

func (*Msg) URN

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

func (*Msg) URNAuth added in v0.0.5

func (m *Msg) URNAuth() null.String

func (*Msg) UUID

func (m *Msg) UUID() flows.MsgUUID

func (*Msg) Visibility

func (m *Msg) Visibility() MsgVisibility

type MsgDirection

type MsgDirection string

type MsgID

type MsgID null.Int

MsgID is our internal type for msg ids, which can be null/0

func (MsgID) MarshalJSON added in v0.0.86

func (i MsgID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*MsgID) Scan added in v0.0.86

func (i *MsgID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*MsgID) UnmarshalJSON added in v0.0.86

func (i *MsgID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (MsgID) Value added in v0.0.86

func (i MsgID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type MsgLabelAdd added in v0.0.53

type MsgLabelAdd struct {
	MsgID   MsgID   `db:"msg_id"`
	LabelID LabelID `db:"label_id"`
}

MsgLabelAdd represents a single label that should be added to a message

type MsgStatus

type MsgStatus string

type MsgType

type MsgType 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

func (o *Org) AllowedLanguages() []utils.Language

AllowedLanguages returns the list of supported languages for this org

func (*Org) ConfigValue added in v0.0.44

func (o *Org) ConfigValue(key string, def string) string

ConfigValue returns the string value for the passed in config (or default if not found)

func (*Org) DateFormat added in v0.0.5

func (o *Org) DateFormat() utils.DateFormat

DateFormat returns the date format for this org

func (*Org) DefaultCountry added in v0.0.49

func (o *Org) DefaultCountry() utils.Country

DefaultCountry returns the default country for this organization (mostly used for number parsing)

func (*Org) DefaultLanguage added in v0.0.38

func (o *Org) DefaultLanguage() utils.Language

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 with the passed in name for this org

func (*Org) ID added in v0.0.5

func (o *Org) ID() OrgID

ID returns the id of the org

func (*Org) MarshalJSON added in v0.0.22

func (o *Org) MarshalJSON() ([]byte, error)

MarshalJSON is our custom marshaller so that our inner env get output

func (*Org) MaxValueLength added in v0.0.84

func (o *Org) MaxValueLength() int

MaxValueLength returns our max value length for contact fields and run results

func (*Org) Now added in v0.0.5

func (o *Org) Now() time.Time

Now returns the current time in the current timezone for this org

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

func (*Org) Timezone added in v0.0.5

func (o *Org) Timezone() *time.Location

Timezone returns the timezone 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

func GetOrgAssets(ctx context.Context, db *sqlx.DB, orgID OrgID) (*OrgAssets, error)

GetOrgAssets creates or gets org assets for the passed in org

func NewOrgAssets

func NewOrgAssets(ctx context.Context, db *sqlx.DB, orgID OrgID, prev *OrgAssets) (*OrgAssets, error)

NewOrgAssets creates and returns a new org assets objects, potentially using the previous org assets passed in to prevent refetching locations

func (*OrgAssets) AddTestChannel added in v0.0.85

func (a *OrgAssets) AddTestChannel(channel assets.Channel)

AddTestChannel adds a test channel to our org, this is only used in session assets during simulation

func (*OrgAssets) CampaignByGroupID added in v0.0.17

func (a *OrgAssets) CampaignByGroupID(groupID GroupID) []*Campaign

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) Campaigns added in v0.0.17

func (a *OrgAssets) Campaigns() []*Campaign

func (*OrgAssets) ChannelByID added in v0.0.5

func (a *OrgAssets) ChannelByID(channelID ChannelID) *Channel

func (*OrgAssets) ChannelByUUID added in v0.0.5

func (a *OrgAssets) ChannelByUUID(channelUUID assets.ChannelUUID) *Channel

func (*OrgAssets) Channels added in v0.0.5

func (a *OrgAssets) Channels() ([]assets.Channel, error)

func (*OrgAssets) Env added in v0.0.5

func (a *OrgAssets) Env() utils.Environment

func (*OrgAssets) FieldByKey added in v0.0.17

func (a *OrgAssets) FieldByKey(key string) *Field

func (*OrgAssets) FieldByUUID added in v0.0.5

func (a *OrgAssets) FieldByUUID(fieldUUID FieldUUID) *Field

func (*OrgAssets) Fields added in v0.0.5

func (a *OrgAssets) Fields() ([]assets.Field, error)

func (*OrgAssets) Flow added in v0.0.5

func (a *OrgAssets) Flow(flowUUID assets.FlowUUID) (assets.Flow, error)

func (*OrgAssets) FlowByID added in v0.0.27

func (a *OrgAssets) FlowByID(flowID FlowID) (*Flow, error)

func (*OrgAssets) GroupByID added in v0.0.5

func (a *OrgAssets) GroupByID(groupID GroupID) *Group

func (*OrgAssets) GroupByUUID added in v0.0.5

func (a *OrgAssets) GroupByUUID(groupUUID assets.GroupUUID) *Group

func (*OrgAssets) Groups added in v0.0.5

func (a *OrgAssets) Groups() ([]assets.Group, error)

func (*OrgAssets) LabelByUUID added in v0.0.53

func (a *OrgAssets) LabelByUUID(uuid assets.LabelUUID) *Label

func (*OrgAssets) Labels added in v0.0.5

func (a *OrgAssets) Labels() ([]assets.Label, error)

func (*OrgAssets) Locations added in v0.0.5

func (a *OrgAssets) Locations() ([]assets.LocationHierarchy, error)

func (*OrgAssets) Org added in v0.0.44

func (a *OrgAssets) Org() *Org

func (*OrgAssets) OrgID added in v0.0.5

func (a *OrgAssets) OrgID() OrgID

func (*OrgAssets) ResthookBySlug added in v0.0.83

func (a *OrgAssets) ResthookBySlug(slug string) *Resthook

func (*OrgAssets) Resthooks added in v0.0.5

func (a *OrgAssets) Resthooks() ([]assets.Resthook, error)

func (*OrgAssets) SetFlow added in v0.0.38

func (a *OrgAssets) SetFlow(flowID FlowID, flow flows.Flow) (*Flow, error)

SetFlow sets the flow definition for the passed in ID. Should only be used for unit tests

func (*OrgAssets) Templates added in v0.0.172

func (a *OrgAssets) Templates() ([]assets.Template, error)

func (*OrgAssets) Triggers added in v0.0.38

func (a *OrgAssets) Triggers() []*Trigger

type OrgID

type OrgID int

func OrgIDForChannelUUID added in v0.0.74

func OrgIDForChannelUUID(ctx context.Context, db *sqlx.DB, channelUUID assets.ChannelUUID) (OrgID, error)

OrgIDForChannelUUID returns the org id for the passed in channel UUID if any

type Queryer added in v0.0.38

type Queryer interface {
	Rebind(query string) string
	QueryxContext(ctx context.Context, query string, args ...interface{}) (*sqlx.Rows, error)
	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
	NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error)
	GetContext(ctx context.Context, value interface{}, query string, args ...interface{}) 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) Slug added in v0.0.5

func (r *Resthook) Slug() string

Slug returns the slug for this resthook

func (*Resthook) Subscribers added in v0.0.5

func (r *Resthook) Subscribers() []string

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 ResthookUnsubscribe struct {
	OrgID OrgID  `db:"org_id"`
	Slug  string `db:"slug"`
	URL   string `db:"url"`
}

type ResultID added in v0.0.76

type ResultID int64

type Session

type Session struct {
	// 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, sessionType FlowType, contact *flows.Contact) (*Session, error)

ActiveSessionForContact returns the active session for the passed in contact, if any

func NewSession added in v0.0.17

func NewSession(org *OrgAssets, fs flows.Session, sprint flows.Sprint) (*Session, error)

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, sprints []flows.Sprint, 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) ChannelConnection added in v0.0.74

func (s *Session) ChannelConnection() *ChannelConnection

func (*Session) ClearTimeoutOn added in v0.0.138

func (s *Session) ClearTimeoutOn()

func (*Session) ConnectionID added in v0.0.74

func (s *Session) ConnectionID() *ConnectionID

func (*Session) Contact added in v0.0.17

func (s *Session) Contact() *flows.Contact

Contact returns the contact for this session

func (*Session) ContactID

func (s *Session) ContactID() ContactID

func (*Session) ContactUUID added in v0.0.17

func (s *Session) ContactUUID() flows.ContactUUID

ContactUUID returns the UUID of our contact

func (*Session) CreatedOn

func (s *Session) CreatedOn() time.Time

func (*Session) CurrentFlowID added in v0.0.38

func (s *Session) CurrentFlowID() FlowID

func (*Session) EndedOn added in v0.0.38

func (s *Session) EndedOn() *time.Time

func (*Session) FlowSession added in v0.0.38

func (s *Session) FlowSession(sa flows.SessionAssets, env utils.Environment) (flows.Session, error)

FlowSession creates a flow session for the passed in session object. It also populates the runs we know about

func (*Session) ID

func (s *Session) ID() SessionID

func (*Session) IncomingMsgExternalID added in v0.0.77

func (s *Session) IncomingMsgExternalID() null.String

func (*Session) IncomingMsgID added in v0.0.38

func (s *Session) IncomingMsgID() MsgID

func (*Session) MarshalJSON added in v0.0.77

func (s *Session) MarshalJSON() ([]byte, error)

MarshalJSON is our custom marshaller so that our inner struct get output

func (*Session) OrgID

func (s *Session) OrgID() OrgID

func (*Session) Output

func (s *Session) Output() string

func (*Session) OutputMD5 added in v0.0.68

func (s *Session) OutputMD5() string

OutputMD5 returns the md5 of the passed in session

func (*Session) Responded

func (s *Session) Responded() bool

func (*Session) Runs added in v0.0.17

func (s *Session) Runs() []*FlowRun

Runs returns our flow run

func (*Session) SessionType added in v0.0.77

func (s *Session) SessionType() FlowType

func (*Session) SetChannelConnection added in v0.0.74

func (s *Session) SetChannelConnection(cc *ChannelConnection)

SetChannelConnection sets the channel connection associated with this sprint

func (*Session) SetIncomingMsg added in v0.0.38

func (s *Session) SetIncomingMsg(id flows.MsgID, externalID null.String)

SetIncomingMsg set the incoming message that this session should be associated with in this sprint

func (*Session) Sprint added in v0.0.74

func (s *Session) Sprint() flows.Sprint

Sprint returns the sprint associated with this session

func (*Session) Status

func (s *Session) Status() SessionStatus

func (*Session) Timeout added in v0.0.68

func (s *Session) Timeout() *time.Duration

Timeout returns the amount of time after our last message sends that we should timeout

func (*Session) TimeoutOn added in v0.0.38

func (s *Session) TimeoutOn() *time.Time

func (*Session) UnmarshalJSON added in v0.0.77

func (s *Session) UnmarshalJSON(b []byte) error

UnmarshalJSON is our custom marshaller so that our inner struct get output

func (*Session) Wait added in v0.0.74

func (s *Session) Wait() flows.ActivatedWait

Wait returns the wait associated with this session (if any)

func (*Session) WaitStartedOn added in v0.0.68

func (s *Session) WaitStartedOn() *time.Time

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, sprint flows.Sprint, hook SessionCommitHook) 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 SessionCommitHook func(context.Context, *sqlx.Tx, *redis.Pool, *OrgAssets, []*Session) error

type SessionID

type SessionID int64

type SessionStatus

type SessionStatus string

type StartID added in v0.0.27

type StartID null.Int

StartID is our type for flow start idst

func (StartID) MarshalJSON added in v0.0.86

func (i StartID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*StartID) Scan added in v0.0.86

func (i *StartID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*StartID) UnmarshalJSON added in v0.0.86

func (i *StartID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (StartID) Value added in v0.0.86

func (i StartID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type StartMode added in v0.0.42

type StartMode string

StartMode defines how a campaign event should be started

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 Template added in v0.0.172

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

func (*Template) MarshalJSON added in v0.0.172

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

MarshalJSON is our marshaller for json data

func (*Template) Name added in v0.0.172

func (t *Template) Name() string

func (*Template) Translations added in v0.0.172

func (t *Template) Translations() []assets.TemplateTranslation

func (*Template) UUID added in v0.0.172

func (t *Template) UUID() assets.TemplateUUID

func (*Template) UnmarshalJSON added in v0.0.172

func (t *Template) UnmarshalJSON(data []byte) error

UnmarshalJSON is our unmarshaller for json data

type TemplateState added in v1.0.6

type TemplateState string

TemplateState represents what state are templates are in, either already evaluated, not evaluated or that they are unevaluated legacy templates

type TemplateTranslation added in v0.0.172

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

func (*TemplateTranslation) Channel added in v0.0.172

func (*TemplateTranslation) Content added in v0.0.172

func (t *TemplateTranslation) Content() string

func (*TemplateTranslation) Language added in v0.0.172

func (t *TemplateTranslation) Language() utils.Language

func (*TemplateTranslation) MarshalJSON added in v0.0.172

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

MarshalJSON is our marshaller for json data

func (*TemplateTranslation) UnmarshalJSON added in v0.0.172

func (t *TemplateTranslation) UnmarshalJSON(data []byte) error

UnmarshalJSON is our unmarshaller for json data

func (*TemplateTranslation) VariableCount added in v0.0.172

func (t *TemplateTranslation) VariableCount() int

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 TopupID added in v0.0.10

type TopupID null.Int

TopupID is our type for topup ids, which can be null

func DecrementOrgCredits added in v0.0.17

func DecrementOrgCredits(ctx context.Context, db Queryer, rc redis.Conn, orgID OrgID, amount int) (TopupID, error)

DecrementOrgCredits decrements the credits by the passed amount for the passed in org, passing back the id of the topup that should be assigned to the messages using those credits.

func (TopupID) MarshalJSON added in v0.0.86

func (i TopupID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*TopupID) Scan added in v0.0.86

func (i *TopupID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*TopupID) UnmarshalJSON added in v0.0.86

func (i *TopupID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (TopupID) Value added in v0.0.86

func (i TopupID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type Trigger added in v0.0.38

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

Trigger represents a trigger in an organization

func FindMatchingMOCallTrigger added in v0.0.74

func FindMatchingMOCallTrigger(org *OrgAssets, contact *Contact) *Trigger

FindMatchingMOCallTrigger finds any trigger set up for incoming calls (these would be IVR flows) Contact is needed as this trigger can be filtered by contact group

func FindMatchingMissedCallTrigger added in v0.0.74

func FindMatchingMissedCallTrigger(org *OrgAssets) *Trigger

FindMatchingMissedCallTrigger finds any trigger set up for incoming calls (these would be IVR flows)

func FindMatchingMsgTrigger added in v0.0.38

func FindMatchingMsgTrigger(org *OrgAssets, contact *flows.Contact, text string) *Trigger

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

func FindMatchingNewConversationTrigger(org *OrgAssets, channel *Channel) *Trigger

FindMatchingNewConversationTrigger returns the matching trigger for the passed in trigger type

func FindMatchingReferralTrigger added in v0.0.38

func FindMatchingReferralTrigger(org *OrgAssets, channel *Channel, referrerID string) *Trigger

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) ChannelID added in v0.0.38

func (t *Trigger) ChannelID() ChannelID

func (*Trigger) FlowID added in v0.0.38

func (t *Trigger) FlowID() FlowID

func (*Trigger) GroupIDs added in v0.0.38

func (t *Trigger) GroupIDs() []GroupID

func (*Trigger) ID added in v0.0.38

func (t *Trigger) ID() TriggerID

func (*Trigger) Keyword added in v0.0.38

func (t *Trigger) Keyword() string

func (*Trigger) KeywordMatchType added in v0.0.38

func (t *Trigger) KeywordMatchType() triggers.KeywordMatchType

func (*Trigger) Match added in v0.0.111

func (t *Trigger) Match() *triggers.KeywordMatch

Match returns the match for this trigger, if any

func (*Trigger) MatchType added in v0.0.38

func (t *Trigger) MatchType() MatchType

func (*Trigger) ReferrerID added in v0.0.38

func (t *Trigger) ReferrerID() string

func (*Trigger) TriggerType added in v0.0.38

func (t *Trigger) TriggerType() TriggerType

type TriggerID added in v0.0.38

type TriggerID int

type TriggerType added in v0.0.38

type TriggerType string

type URNID added in v0.0.38

type URNID null.Int

URNID is our type for urn ids, which can be null

func GetURNID added in v0.0.74

func GetURNID(urn urns.URN) URNID

func (URNID) MarshalJSON added in v0.0.86

func (i URNID) MarshalJSON() ([]byte, error)

MarshalJSON marshals into JSON. 0 values will become null

func (*URNID) Scan added in v0.0.86

func (i *URNID) Scan(value interface{}) error

Scan scans from the db value. null values become 0

func (*URNID) UnmarshalJSON added in v0.0.86

func (i *URNID) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals from JSON. null values become 0

func (URNID) Value added in v0.0.86

func (i URNID) Value() (driver.Value, error)

Value returns the db value, null is returned for 0

type WebhookEvent added in v0.0.84

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

WebhookEvent represents an event that was created, mostly used for resthooks

func NewWebhookEvent added in v0.0.84

func NewWebhookEvent(orgID OrgID, resthookID ResthookID, data string, createdOn time.Time) *WebhookEvent

NewWebhookEvent creates a new webhook event

func (*WebhookEvent) ID added in v0.0.84

func (e *WebhookEvent) ID() WebhookEventID

type WebhookEventID added in v0.0.84

type WebhookEventID int64

type WebhookResult added in v0.0.76

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

WebhookResult represents a result of a webhook or resthook call

func NewWebhookResult added in v0.0.76

func NewWebhookResult(
	orgID OrgID, contactID ContactID,
	url string, request string, statusCode int, response string,
	elapsed time.Duration, createdOn time.Time) *WebhookResult

NewWebhookResult creates a new webhook result with the passed in parameters

func (*WebhookResult) ID added in v0.0.76

func (r *WebhookResult) ID() ResultID

Jump to

Keyboard shortcuts

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