Skip to content

Ilhasoft/goflow

 
 

Repository files navigation

Goflow Build Status codecov Go Report Card

Specification

See https://nyaruka.github.io/goflow/ for the complete specification docs.

Basic Usage

import (
    "github.com/nyaruka/goflow/assets/static"
    "github.com/nyaruka/goflow/flows"
    "github.com/nyaruka/goflow/flows/engine"
    "github.com/nyaruka/goflow/utils"
)

source, _ := static.LoadSource("myassets.json")
assets, _ := engine.NewSessionAssets(source)
contact := flows.NewContact(assets, ...)
env := utils.NewEnvironmentBuilder().Build()
trigger := triggers.NewManualTrigger(env, contact, flow.Reference(), nil, nil, time.Now())
eng := engine.NewBuilder().WithDefaultUserAgent("goflow-flowrunner").Build()
session := eng.NewSession(assets)
session.Start(trigger)

Sessions

Sessions can easily be persisted between waits by calling json.Marshal on the Session instance to marshal it as JSON. You can inspect this JSON at https://sessions.temba.io/.

Utilities

Flow Runner

Provides a command line interface for stepping through a given flow.

% go install github.com/nyaruka/goflow/cmd/flowrunner
% $GOPATH/bin/flowrunner test/testdata/flows/two_questions.json 615b8a0f-588c-4d20-a05f-363b0b4ce6f4
Starting flow 'U-Report Registration Flow'....
---------------------------------------
💬 "Hi Ben Haggerty! What is your favorite color? (red/blue) Your number is (206) 555-1212"
⏳ waiting for message....

By default it will use a manual trigger to create a session, but the -msg flag can be used to start the session with a message trigger:

% $GOPATH/bin/flowrunner -msg "hi there" cmd/flowrunner/testdata/two_questions.json 615b8a0f-588c-4d20-a05f-363b0b4ce6f4

If the -repro flag is set, it will dump the triggers and resumes it used which can be used to reproduce the session in a test:

% $GOPATH/bin/flowrunner -repro cmd/flowrunner/testdata/two_questions.json 615b8a0f-588c-4d20-a05f-363b0b4ce6f4

Flow Migrator

Takes a legacy flow definition as piped input and outputs the migrated definition:

% go install github.com/nyaruka/goflow/cmd/flowmigrate
% cat legacy_flow.json | $GOPATH/bin/flowmigrate
% cat legacy_export.json | jq '.flows[0]' | $GOPATH/bin/flowmigrate

Expression Tester

Provides a quick way to test evaluation of expressions which can be used in flows:

% go install github.com/nyaruka/goflow/cmd/exptester
% $GOPATH/bin/exptester '@(10 / 5 >= 2)'
% $GOPATH/bin/exptester '@(TITLE("foo"))'

Development

You can run all the tests with:

% go test github.com/nyaruka/goflow/...

If you've made changes to the flow engine output, regenerate the test files with:

% go test github.com/nyaruka/goflow/test -write

About

Golang Flow Engine for RapidPro

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 98.3%
  • ANTLR 1.5%
  • Other 0.2%