Evo Voice

<back to all web services

PatchFlow

Update the specified flow

Requires Authentication
Requires any of the roles:SystemAdministrator, Manager, Customer
The following routes are available for this service:
PATCH/flows/{flowId}
namespace Voice.Api

open System
open System.IO
open System.Collections
open System.Collections.Generic
open System.Runtime.Serialization
open ServiceStack
open ServiceStack.DataAnnotations

    [<AllowNullLiteral>]
    type EntityInfo() = 
        ///<summary>
        ///The ID of the object
        ///</summary>
        [<ApiMember(Description="The ID of the object")>]
        member val Id:String = null with get,set

        ///<summary>
        ///The date the object was created
        ///</summary>
        [<ApiMember(Description="The date the object was created")>]
        member val DateCreated:String = null with get,set

        ///<summary>
        ///The date the object was last modified
        ///</summary>
        [<ApiMember(Description="The date the object was last modified")>]
        member val DateLastModified:String = null with get,set

        ///<summary>
        ///The user that created this object
        ///</summary>
        [<ApiMember(Description="The user that created this object")>]
        member val CreatedBy:String = null with get,set

        ///<summary>
        ///The user that last modified this object
        ///</summary>
        [<ApiMember(Description="The user that last modified this object")>]
        member val LastModifiedBy:String = null with get,set

    type FlowRoles =
        | UI = 0
        | Reference = 1
        | PhoneNumberRouting = 2
        | UserDialOut = 3
        | FaxNumberRouting = 4

    [<AllowNullLiteral>]
    type CustomerBreadcrumb() = 
        member val Id:String = null with get,set
        member val Name:String = null with get,set

    type FlowNodeCategories =
        | General = 0
        | Voice = 1
        | Logic = 2
        | DateAndTime = 3
        | Audio = 4
        | Messaging = 5
        | Assistant = 6
        | Flows = 7
        | Fax = 8
        | Network = 9
        | Cookies = 10
        | CallCenter = 11
        | Intelligence = 12

    type ValueTypes =
        | NotSpecified = 0
        | String = 1
        | Boolean = 2
        | Number = 3
        | List = 4
        | Struct = 5
        | Transition = 6
        | Custom = 7
        | Date = 8
        | AudioFile = 9
        | TimeZoneId = 10
        | PhoneNumber = 11
        | User = 12
        | Endpoint = 13
        | Time = 14
        | File = 15
        | FaxNumber = 16
        | EmailAccount = 17
        | Customer = 18
        | Flow = 19
        | Team = 20
        | FlowReference = 21
        | Integration = 22
        | Assistant = 23

    type UIHints =
        | None = 0
        | LargeText = 1
        | InlineForm = 2
        | Password = 3
        | InlineStruct = 4

    [<AllowNullLiteral>]
    type Struct() = 
        inherit Dictionary<String, Value>()

    [<AllowNullLiteral>]
    type Value() = 
        member val BoolValue:Nullable<Boolean> = new Nullable<Boolean>() with get,set
        member val StringValue:String = null with get,set
        member val NumberValue:Nullable<Double> = new Nullable<Double>() with get,set
        member val ListValue:ResizeArray<Struct> = null with get,set
        member val StructValue:Struct = null with get,set

    type DataFieldUniqueness =
        | NotUnique = 0
        | Unique = 1
        | UniqueToCustomer = 2

    type UserDataFieldModes =
        | Hidden = 0
        | ReadOnly = 1
        | ReadWrite = 2

    [<AllowNullLiteral>]
    type DataField() = 
        member val Id:String = null with get,set
        member val Name:String = null with get,set
        member val Type:ValueTypes = new ValueTypes() with get,set
        member val UIHint:UIHints = new UIHints() with get,set
        member val UITab:String = null with get,set
        member val IsAsync:Boolean = new Boolean() with get,set
        member val DisableBinding:Boolean = new Boolean() with get,set
        member val StructType:DataType = null with get,set
        member val ListType:DataType = null with get,set
        member val Description:String = null with get,set
        member val PossibleValues:ResizeArray<String> = null with get,set
        member val IsOutput:Boolean = new Boolean() with get,set
        member val CustomFieldValuesUrl:String = null with get,set
        member val DefaultValue:Value = null with get,set
        member val TransitionNameFormat:String = null with get,set
        member val Uniqueness:DataFieldUniqueness = new DataFieldUniqueness() with get,set
        member val VoiceOnly:Boolean = new Boolean() with get,set
        member val ConditionalVisibilityField:String = null with get,set
        member val ConditionalVisibilityValue:String = null with get,set
        member val NoEvalTemplate:Boolean = new Boolean() with get,set
        member val UserMode:UserDataFieldModes = new UserDataFieldModes() with get,set
        member val AnyValueType:Boolean = new Boolean() with get,set

    [<AllowNullLiteral>]
    type DataType() = 
        member val TypeName:String = null with get,set
        member val Fields:ResizeArray<DataField> = null with get,set

    type FlowChannels =
        | Voice = 0
        | Chat = 1
        | Fax = 2

    [<AllowNullLiteral>]
    type FlowNodeSpec() = 
        ///<summary>
        ///The name of this node
        ///</summary>
        [<ApiMember(Description="The name of this node")>]
        member val Name:String = null with get,set

        ///<summary>
        ///A description of this node
        ///</summary>
        [<ApiMember(Description="A description of this node")>]
        member val Description:String = null with get,set

        ///<summary>
        ///Icon class for this node (FontAwesome)
        ///</summary>
        [<ApiMember(Description="Icon class for this node (FontAwesome)")>]
        member val IconClass:String = null with get,set

        ///<summary>
        ///The type name for this node
        ///</summary>
        [<ApiMember(Description="The type name for this node")>]
        member val TypeName:String = null with get,set

        ///<summary>
        ///The category this node should be grouped under
        ///</summary>
        [<ApiMember(Description="The category this node should be grouped under")>]
        member val Category:FlowNodeCategories = new FlowNodeCategories() with get,set

        ///<summary>
        ///The URL where this node is located
        ///</summary>
        [<ApiMember(Description="The URL where this node is located")>]
        member val Url:String = null with get,set

        ///<summary>
        ///The data type for this node
        ///</summary>
        [<ApiMember(Description="The data type for this node")>]
        member val DataType:DataType = null with get,set

        ///<summary>
        ///URL for documentation for this node
        ///</summary>
        [<ApiMember(Description="URL for documentation for this node")>]
        member val DocumentationUrl:String = null with get,set

        ///<summary>
        ///The channels that this node is restricted to
        ///</summary>
        [<ApiMember(Description="The channels that this node is restricted to")>]
        member val RestrictToChannels:ResizeArray<FlowChannels> = null with get,set

    [<AllowNullLiteral>]
    type FlowNodeUI() = 
        ///<summary>
        ///The X position of the node
        ///</summary>
        [<ApiMember(Description="The X position of the node")>]
        member val X:Double = new Double() with get,set

        ///<summary>
        ///The Y position of the node
        ///</summary>
        [<ApiMember(Description="The Y position of the node")>]
        member val Y:Double = new Double() with get,set

        ///<summary>
        ///Notes for this node
        ///</summary>
        [<ApiMember(Description="Notes for this node")>]
        member val Notes:String = null with get,set

    type ValueSources =
        | Value = 0
        | Flow = 1
        | System = 2
        | Customer = 3
        | Session = 4
        | Endpoint = 5
        | Expression = 6
        | User = 7

    [<AllowNullLiteral>]
    type NodeParameter() = 
        member val Id:String = null with get,set
        member val Type:ValueTypes = new ValueTypes() with get,set
        member val Source:ValueSources = new ValueSources() with get,set
        member val IsAsync:Boolean = new Boolean() with get,set
        member val ReferenceId:String = null with get,set
        member val Value:Value = null with get,set
        member val NoEvalTemplate:Boolean = new Boolean() with get,set
        member val ListParameters:ResizeArray<NodeParameterMap> = null with get,set
        member val StructParameters:NodeParameterMap = null with get,set
        member val IsOutput:Boolean = new Boolean() with get,set
        member val Expression:String = null with get,set
        member val ListType:DataType = null with get,set

    [<AllowNullLiteral>]
    type NodeParameterMap() = 
        inherit Dictionary<String, NodeParameter>()

    [<AllowNullLiteral>]
    type FlowNode() = 
        ///<summary>
        ///The ID of this node. Must be unique within the flow but can be anything
        ///</summary>
        [<ApiMember(Description="The ID of this node. Must be unique within the flow but can be anything")>]
        member val Id:String = null with get,set

        ///<summary>
        ///Is this the starting node for the flow. Only one node can have this set
        ///</summary>
        [<ApiMember(Description="Is this the starting node for the flow. Only one node can have this set")>]
        member val IsStartNode:Boolean = new Boolean() with get,set

        ///<summary>
        ///The name of the node, descriptive to be used as a reminder in the GUI
        ///</summary>
        [<ApiMember(Description="The name of the node, descriptive to be used as a reminder in the GUI")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The specification for the node
        ///</summary>
        [<ApiMember(Description="The specification for the node")>]
        member val Spec:FlowNodeSpec = null with get,set

        ///<summary>
        ///The UI data for the node
        ///</summary>
        [<ApiMember(Description="The UI data for the node")>]
        member val UI:FlowNodeUI = null with get,set

        ///<summary>
        ///The data for this node. These will be POST'd to the endpoint when it is called.
        ///</summary>
        [<ApiMember(Description="The data for this node. These will be POST'd to the endpoint when it is called.")>]
        member val Parameters:NodeParameterMap = null with get,set

    [<AllowNullLiteral>]
    type FlowParameter() = 
        inherit DataField()
        member val IsPublic:Boolean = new Boolean() with get,set
        member val IsKnob:Boolean = new Boolean() with get,set

    [<AllowNullLiteral>]
    type FlowExit() = 
        ///<summary>
        ///The unique ID for this exit
        ///</summary>
        [<ApiMember(Description="The unique ID for this exit")>]
        member val Id:String = null with get,set

        ///<summary>
        ///The name of this exit
        ///</summary>
        [<ApiMember(Description="The name of this exit")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The UI for the exit
        ///</summary>
        [<ApiMember(Description="The UI for the exit")>]
        member val UI:FlowNodeUI = null with get,set

    [<AllowNullLiteral>]
    type FlowUI() = 
        member val SelectedNode:String = null with get,set
        member val CanvasX:Double = new Double() with get,set
        member val CanvasY:Double = new Double() with get,set
        member val CanvasZoom:Double = new Double() with get,set

    type TagColors =
        | Magenta = 0
        | Red = 1
        | Volcano = 2
        | Orange = 3
        | Gold = 4
        | Lime = 5
        | Green = 6
        | Cyan = 7
        | Blue = 8
        | GeekBlue = 9
        | Purple = 10

    [<AllowNullLiteral>]
    type Tag() = 
        member val Id:String = null with get,set
        member val Name:String = null with get,set
        member val Color:TagColors = new TagColors() with get,set

    [<AllowNullLiteral>]
    type FlowInfo() = 
        inherit EntityInfo()
        ///<summary>
        ///The name of this flow
        ///</summary>
        [<ApiMember(Description="The name of this flow")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The roles that this flow has
        ///</summary>
        [<ApiMember(Description="The roles that this flow has")>]
        member val Roles:ResizeArray<FlowRoles> = null with get,set

        ///<summary>
        ///What this flow does
        ///</summary>
        [<ApiMember(Description="What this flow does")>]
        member val Description:String = null with get,set

        ///<summary>
        ///Any notes for this flow
        ///</summary>
        [<ApiMember(Description="Any notes for this flow")>]
        member val Notes:String = null with get,set

        ///<summary>
        ///The ID of the account associated with the flow
        ///</summary>
        [<ApiMember(Description="The ID of the account associated with the flow")>]
        member val AccountId:String = null with get,set

        ///<summary>
        ///The name of the account associated with the flow
        ///</summary>
        [<ApiMember(Description="The name of the account associated with the flow")>]
        member val AccountName:String = null with get,set

        ///<summary>
        ///The ID of the customer this flow is associated with
        ///</summary>
        [<ApiMember(Description="The ID of the customer this flow is associated with")>]
        member val CustomerId:String = null with get,set

        ///<summary>
        ///The name of the customer this flow is associated with
        ///</summary>
        [<ApiMember(Description="The name of the customer this flow is associated with")>]
        member val CustomerName:String = null with get,set

        ///<summary>
        ///The breadcrumb to the flow for this endpoint
        ///</summary>
        [<ApiMember(Description="The breadcrumb to the flow for this endpoint")>]
        member val CustomerBreadcrumb:ResizeArray<CustomerBreadcrumb> = null with get,set

        ///<summary>
        ///The nodes in this flow
        ///</summary>
        [<ApiMember(Description="The nodes in this flow")>]
        member val Nodes:ResizeArray<FlowNode> = null with get,set

        ///<summary>
        ///The flow's parameters
        ///</summary>
        [<ApiMember(Description="The flow's parameters")>]
        member val Parameters:ResizeArray<FlowParameter> = null with get,set

        ///<summary>
        ///The flow's exits
        ///</summary>
        [<ApiMember(Description="The flow's exits")>]
        member val Exits:ResizeArray<FlowExit> = null with get,set

        ///<summary>
        ///The UI data for the flow
        ///</summary>
        [<ApiMember(Description="The UI data for the flow")>]
        member val UI:FlowUI = null with get,set

        ///<summary>
        ///The list of tags for this flow
        ///</summary>
        [<ApiMember(Description="The list of tags for this flow")>]
        member val Tags:ResizeArray<Tag> = null with get,set

        ///<summary>
        ///The number of nodes in this flow
        ///</summary>
        [<ApiMember(Description="The number of nodes in this flow")>]
        member val NodeCount:Int32 = new Int32() with get,set

    ///<summary>
    ///Update the specified flow
    ///</summary>
    [<Api(Description="Update the specified flow")>]
    [<AllowNullLiteral>]
    type PatchFlow() = 
        interface IPatch
        ///<summary>
        ///the ID of the flow to update
        ///</summary>
        [<ApiMember(Description="the ID of the flow to update")>]
        member val FlowId:String = null with get,set

        ///<summary>
        ///The ID of the customer to associate with the flow
        ///</summary>
        [<ApiMember(Description="The ID of the customer to associate with the flow")>]
        member val CustomerId:String = null with get,set

        ///<summary>
        ///The new name for the flow
        ///</summary>
        [<ApiMember(Description="The new name for the flow")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The roles that this flow has
        ///</summary>
        [<ApiMember(Description="The roles that this flow has")>]
        member val Roles:ResizeArray<FlowRoles> = null with get,set

        ///<summary>
        ///What this flow does
        ///</summary>
        [<ApiMember(Description="What this flow does")>]
        member val Description:String = null with get,set

        ///<summary>
        ///Any notes for this flow
        ///</summary>
        [<ApiMember(Description="Any notes for this flow")>]
        member val Notes:String = null with get,set

        ///<summary>
        ///The list of nodes for this flow
        ///</summary>
        [<ApiMember(Description="The list of nodes for this flow")>]
        member val Nodes:ResizeArray<FlowNode> = null with get,set

        ///<summary>
        ///The list of flow exits
        ///</summary>
        [<ApiMember(Description="The list of flow exits")>]
        member val Exits:ResizeArray<FlowExit> = null with get,set

        ///<summary>
        ///The parameters for this flow
        ///</summary>
        [<ApiMember(Description="The parameters for this flow")>]
        member val Parameters:ResizeArray<FlowParameter> = null with get,set

        ///<summary>
        ///The time zone ID for this flow
        ///</summary>
        [<ApiMember(Description="The time zone ID for this flow")>]
        member val TimeZoneId:String = null with get,set

        ///<summary>
        ///The UI data for the flow
        ///</summary>
        [<ApiMember(Description="The UI data for the flow")>]
        member val UI:FlowUI = null with get,set

        ///<summary>
        ///The list of tag IDs for this flow
        ///</summary>
        [<ApiMember(Description="The list of tag IDs for this flow")>]
        member val TagIds:ResizeArray<String> = null with get,set

F# PatchFlow DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

PATCH /flows/{flowId} HTTP/1.1 
Host: team.evovoice.io 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	flowId: String,
	customerId: String,
	name: String,
	roles: 
	[
		UI
	],
	description: String,
	notes: String,
	nodes: 
	[
		{
			id: String,
			isStartNode: False,
			name: String,
			spec: 
			{
				name: String,
				description: String,
				iconClass: String,
				typeName: String,
				category: General,
				url: String,
				documentationUrl: String,
				restrictToChannels: 
				[
					Voice
				]
			},
			ui: 
			{
				x: 0,
				y: 0,
				notes: String
			},
			parameters: {}
		}
	],
	exits: 
	[
		{
			id: String,
			name: String,
			ui: 
			{
				x: 0,
				y: 0,
				notes: String
			}
		}
	],
	parameters: 
	[
		{
			isPublic: False,
			isKnob: False,
			id: String,
			name: String,
			type: NotSpecified,
			uiHint: None,
			uiTab: String,
			isAsync: False,
			disableBinding: False,
			description: String,
			possibleValues: 
			[
				String
			],
			isOutput: False,
			customFieldValuesUrl: String,
			defaultValue: 
			{
				boolValue: False,
				stringValue: String,
				numberValue: 0,
				listValue: 
				[
					null
				]
			},
			transitionNameFormat: String,
			uniqueness: NotUnique,
			voiceOnly: False,
			conditionalVisibilityField: String,
			conditionalVisibilityValue: String,
			noEvalTemplate: False,
			userMode: Hidden,
			anyValueType: False
		}
	],
	timeZoneId: String,
	ui: 
	{
		selectedNode: String,
		canvasX: 0,
		canvasY: 0,
		canvasZoom: 0
	},
	tagIds: 
	[
		String
	]
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	name: String,
	roles: 
	[
		UI
	],
	description: String,
	notes: String,
	accountId: String,
	accountName: String,
	customerId: String,
	customerName: String,
	customerBreadcrumb: 
	[
		{
			id: String,
			name: String
		}
	],
	nodes: 
	[
		{
			id: String,
			isStartNode: False,
			name: String,
			spec: 
			{
				name: String,
				description: String,
				iconClass: String,
				typeName: String,
				category: General,
				url: String,
				documentationUrl: String,
				restrictToChannels: 
				[
					Voice
				]
			},
			ui: 
			{
				x: 0,
				y: 0,
				notes: String
			},
			parameters: {}
		}
	],
	parameters: 
	[
		{
			isPublic: False,
			isKnob: False,
			id: String,
			name: String,
			type: NotSpecified,
			uiHint: None,
			uiTab: String,
			isAsync: False,
			disableBinding: False,
			description: String,
			possibleValues: 
			[
				String
			],
			isOutput: False,
			customFieldValuesUrl: String,
			defaultValue: 
			{
				boolValue: False,
				stringValue: String,
				numberValue: 0,
				listValue: 
				[
					null
				]
			},
			transitionNameFormat: String,
			uniqueness: NotUnique,
			voiceOnly: False,
			conditionalVisibilityField: String,
			conditionalVisibilityValue: String,
			noEvalTemplate: False,
			userMode: Hidden,
			anyValueType: False
		}
	],
	exits: 
	[
		{
			id: String,
			name: String,
			ui: 
			{
				x: 0,
				y: 0,
				notes: String
			}
		}
	],
	ui: 
	{
		selectedNode: String,
		canvasX: 0,
		canvasY: 0,
		canvasZoom: 0
	},
	tags: 
	[
		{
			id: String,
			name: String,
			color: Magenta
		}
	],
	nodeCount: 0,
	id: String,
	dateCreated: String,
	dateLastModified: String,
	createdBy: String,
	lastModifiedBy: String
}