Documentation ¶
Index ¶
- func IsPossibleDefinition(data json.RawMessage) bool
- func MigrateDefinition(data json.RawMessage, baseMediaURL string) (json.RawMessage, error)
- func TransformTranslations(items []Translations) map[envs.Language][]string
- func URLJoin(base, relative string) string
- type Action
- type ActionSet
- type ContactReference
- type Flow
- type FlowReference
- type GroupReference
- type LabelReference
- type Metadata
- type NodeUI
- type NodeUIConfig
- type Note
- type Position
- type Rule
- type RuleSet
- type RulesetConfig
- type Sticky
- type StringOrNumber
- type Translations
- type TypedEnvelope
- type UI
- type UINodeType
- type VariableReference
- type WebhookHeader
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsPossibleDefinition ¶ added in v0.56.1
func IsPossibleDefinition(data json.RawMessage) bool
IsPossibleDefinition peeks at the given flow definition to determine if it could be in legacy format
func MigrateDefinition ¶
func MigrateDefinition(data json.RawMessage, baseMediaURL string) (json.RawMessage, error)
MigrateDefinition migrates a legacy definition to 13.0.0
func TransformTranslations ¶
func TransformTranslations(items []Translations) map[envs.Language][]string
TransformTranslations transforms a list of single item translations into a map of multi-item translations, e.g.
[{"eng": "yes", "fra": "oui"}, {"eng": "no", "fra": "non"}] becomes {"eng": ["yes", "no"], "fra": ["oui", "non"]}
Types ¶
type Action ¶
type Action struct { Type string `json:"type"` UUID uuids.UUID `json:"uuid"` Name string `json:"name"` // message and email Msg json.RawMessage `json:"msg"` Media json.RawMessage `json:"media"` QuickReplies json.RawMessage `json:"quick_replies"` SendAll bool `json:"send_all"` // variable contact actions Contacts []ContactReference `json:"contacts"` Groups []GroupReference `json:"groups"` Variables []VariableReference `json:"variables"` // save actions Field string `json:"field"` Value string `json:"value"` Label string `json:"label"` // set language Language envs.Language `json:"lang"` // add label action Labels []LabelReference `json:"labels"` // start/trigger flow Flow FlowReference `json:"flow"` // channel Channel uuids.UUID `json:"channel"` // email Emails []string `json:"emails"` Subject string `json:"subject"` // IVR Recording json.RawMessage `json:"recording"` URL string `json:"url"` }
type ContactReference ¶
type Flow ¶
type Flow struct { BaseLanguage envs.Language `json:"base_language"` FlowType string `json:"flow_type"` RuleSets []RuleSet `json:"rule_sets" validate:"dive"` ActionSets []ActionSet `json:"action_sets" validate:"dive"` Entry uuids.UUID `json:"entry" validate:"omitempty,uuid4"` Metadata *Metadata `json:"metadata"` // some flows have these set here instead of in metadata UUID uuids.UUID `json:"uuid"` Name string `json:"name"` }
Flow is a flow in the legacy format
type FlowReference ¶
type GroupReference ¶
func (*GroupReference) Migrate ¶
func (g *GroupReference) Migrate() *assets.GroupReference
func (*GroupReference) UnmarshalJSON ¶
func (g *GroupReference) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals a legacy group reference from the given JSON
type LabelReference ¶
func (*LabelReference) UnmarshalJSON ¶
func (l *LabelReference) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals a legacy label reference from the given JSON
type Metadata ¶
type Metadata struct { UUID uuids.UUID `json:"uuid"` Name string `json:"name"` Revision int `json:"revision"` Expires int `json:"expires"` Notes []Note `json:"notes,omitempty"` }
Metadata is the metadata section of a legacy flow
type NodeUI ¶
type NodeUI struct { Type UINodeType `json:"type,omitempty"` Position Position `json:"position"` Config NodeUIConfig `json:"config,omitempty"` }
NodeUI is a node specific UI configuration
func NewNodeUI ¶
func NewNodeUI(nodeType UINodeType, x, y int, config NodeUIConfig) *NodeUI
NewNodeUI creates a new node specific UI configuration
type NodeUIConfig ¶
NodeUIConfig holds node type specific configuration
func (NodeUIConfig) AddCaseConfig ¶
func (c NodeUIConfig) AddCaseConfig(uuid uuids.UUID, config map[string]any)
AddCaseConfig adds a case specific UI configuration
type Note ¶
type Note struct { X decimal.Decimal `json:"x"` Y decimal.Decimal `json:"y"` Title string `json:"title"` Body string `json:"body"` }
Note is a legacy sticky note
type Rule ¶
type Rule struct { UUID uuids.UUID `json:"uuid" validate:"required,uuid4"` Destination uuids.UUID `json:"destination" validate:"omitempty,uuid4"` DestinationType string `json:"destination_type" validate:"eq=A|eq=R"` Test TypedEnvelope `json:"test"` Category Translations `json:"category"` }
type RuleSet ¶
type RuleSet struct { Y int `json:"y"` X int `json:"x"` UUID uuids.UUID `json:"uuid" validate:"required,uuid4"` Type string `json:"ruleset_type"` Label string `json:"label"` Operand string `json:"operand"` Rules []Rule `json:"rules"` Config json.RawMessage `json:"config"` FinishedKey string `json:"finished_key"` }
type RulesetConfig ¶
type RulesetConfig struct { Flow *FlowReference `json:"flow"` FieldDelimiter string `json:"field_delimiter"` FieldIndex int `json:"field_index"` Webhook string `json:"webhook"` WebhookAction string `json:"webhook_action"` WebhookHeaders []WebhookHeader `json:"webhook_headers"` Resthook string `json:"resthook"` }
RulesetConfig holds the config dictionary for a legacy ruleset
type Sticky ¶
type Sticky struct { Position Position `json:"position"` Title string `json:"title"` Body string `json:"body"` Color string `json:"color"` }
Sticky is a user note
type StringOrNumber ¶
type StringOrNumber string
StringOrNumber represents something we need to read as a string, but might actually be number value in the JSON source
func (*StringOrNumber) UnmarshalJSON ¶
func (s *StringOrNumber) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals this from the given JSON
type Translations ¶
Translations is an inline translation map used for localization
func ReadTranslations ¶
func ReadTranslations(data json.RawMessage) (Translations, error)
ReadTranslations reads a translations map
func (Translations) Base ¶
func (t Translations) Base(baseLanguage envs.Language) string
Base looks up the translation in the given base language, or "base"
func (*Translations) UnmarshalJSON ¶
func (t *Translations) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals legacy translations from the given JSON
type TypedEnvelope ¶
TypedEnvelope represents a json blob with a type property
func (*TypedEnvelope) UnmarshalJSON ¶
func (e *TypedEnvelope) UnmarshalJSON(b []byte) error
UnmarshalJSON unmarshals a typed envelope from the given JSON
type UI ¶
type UI struct { Nodes map[uuids.UUID]*NodeUI `json:"nodes"` Stickies map[uuids.UUID]Sticky `json:"stickies"` }
UI is the _ui section of the flow definition used by the editor
type UINodeType ¶
type UINodeType string
UINodeType tells the editor how to render a particular node
const ( UINodeTypeActionSet UINodeType = "execute_actions" UINodeTypeWaitForResponse UINodeType = "wait_for_response" UINodeTypeSplitByAirtime UINodeType = "split_by_airtime" UINodeTypeSplitBySubflow UINodeType = "split_by_subflow" UINodeTypeSplitByWebhook UINodeType = "split_by_webhook" UINodeTypeSplitByResthook UINodeType = "split_by_resthook" UINodeTypeSplitByGroups UINodeType = "split_by_groups" UINodeTypeSplitByExpression UINodeType = "split_by_expression" UINodeTypeSplitByContactField UINodeType = "split_by_contact_field" UINodeTypeSplitByRunResult UINodeType = "split_by_run_result" UINodeTypeSplitByRunResultDelimited UINodeType = "split_by_run_result_delimited" UINodeTypeSplitByRandom UINodeType = "split_by_random" )
the different node types supported by the editor
type VariableReference ¶
type VariableReference struct {
ID string `json:"id"`
}