Evo Voice

<back to all web services

NewFlow

Create a new flow

Requires Authentication
Requires any of the roles:SystemAdministrator, Manager, Customer
The following routes are available for this service:
POST/flows
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using Voice.Api.Flows;
using Voice.Api.Flows.Data;
using Voice.Api.Endpoints;
using Voice.Api;
using Voice.Api.Customers;
using Voice.Api.Settings;

namespace Voice.Api
{
    public partial class EntityInfo
    {
        ///<summary>
        ///The ID of the object
        ///</summary>
        [ApiMember(Description="The ID of the object")]
        public virtual string Id { get; set; }

        ///<summary>
        ///The date the object was created
        ///</summary>
        [ApiMember(Description="The date the object was created")]
        public virtual string DateCreated { get; set; }

        ///<summary>
        ///The date the object was last modified
        ///</summary>
        [ApiMember(Description="The date the object was last modified")]
        public virtual string DateLastModified { get; set; }

        ///<summary>
        ///The user that created this object
        ///</summary>
        [ApiMember(Description="The user that created this object")]
        public virtual string CreatedBy { get; set; }

        ///<summary>
        ///The user that last modified this object
        ///</summary>
        [ApiMember(Description="The user that last modified this object")]
        public virtual string LastModifiedBy { get; set; }
    }

}

namespace Voice.Api.Customers
{
    public partial class CustomerBreadcrumb
    {
        public virtual string Id { get; set; }
        public virtual string Name { get; set; }
    }

}

namespace Voice.Api.Endpoints
{
    public enum UserDataFieldModes
    {
        Hidden,
        ReadOnly,
        ReadWrite,
    }

}

namespace Voice.Api.Flows
{
    public enum FlowChannels
    {
        Voice,
        Chat,
        Fax,
    }

    public partial class FlowExit
    {
        ///<summary>
        ///The unique ID for this exit
        ///</summary>
        [ApiMember(Description="The unique ID for this exit")]
        public virtual string Id { get; set; }

        ///<summary>
        ///The name of this exit
        ///</summary>
        [ApiMember(Description="The name of this exit")]
        public virtual string Name { get; set; }

        ///<summary>
        ///The UI for the exit
        ///</summary>
        [ApiMember(Description="The UI for the exit")]
        public virtual FlowNodeUI UI { get; set; }
    }

    public partial class FlowInfo
        : EntityInfo
    {
        ///<summary>
        ///The name of this flow
        ///</summary>
        [ApiMember(Description="The name of this flow")]
        public virtual string Name { get; set; }

        ///<summary>
        ///The roles that this flow has
        ///</summary>
        [ApiMember(Description="The roles that this flow has")]
        public virtual List<FlowRoles> Roles { get; set; }

        ///<summary>
        ///What this flow does
        ///</summary>
        [ApiMember(Description="What this flow does")]
        public virtual string Description { get; set; }

        ///<summary>
        ///Any notes for this flow
        ///</summary>
        [ApiMember(Description="Any notes for this flow")]
        public virtual string Notes { get; set; }

        ///<summary>
        ///The ID of the account associated with the flow
        ///</summary>
        [ApiMember(Description="The ID of the account associated with the flow")]
        public virtual string AccountId { get; set; }

        ///<summary>
        ///The name of the account associated with the flow
        ///</summary>
        [ApiMember(Description="The name of the account associated with the flow")]
        public virtual string AccountName { 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")]
        public virtual string CustomerId { 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")]
        public virtual string CustomerName { get; set; }

        ///<summary>
        ///The breadcrumb to the flow for this endpoint
        ///</summary>
        [ApiMember(Description="The breadcrumb to the flow for this endpoint")]
        public virtual List<CustomerBreadcrumb> CustomerBreadcrumb { get; set; }

        ///<summary>
        ///The nodes in this flow
        ///</summary>
        [ApiMember(Description="The nodes in this flow")]
        public virtual List<FlowNode> Nodes { get; set; }

        ///<summary>
        ///The flow's parameters
        ///</summary>
        [ApiMember(Description="The flow's parameters")]
        public virtual List<FlowParameter> Parameters { get; set; }

        ///<summary>
        ///The flow's exits
        ///</summary>
        [ApiMember(Description="The flow's exits")]
        public virtual List<FlowExit> Exits { get; set; }

        ///<summary>
        ///The UI data for the flow
        ///</summary>
        [ApiMember(Description="The UI data for the flow")]
        public virtual FlowUI UI { get; set; }

        ///<summary>
        ///The list of tags for this flow
        ///</summary>
        [ApiMember(Description="The list of tags for this flow")]
        public virtual List<Tag> Tags { get; set; }

        ///<summary>
        ///The number of nodes in this flow
        ///</summary>
        [ApiMember(Description="The number of nodes in this flow")]
        public virtual int NodeCount { get; set; }
    }

    public partial class 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")]
        public virtual string Id { 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")]
        public virtual bool IsStartNode { 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")]
        public virtual string Name { get; set; }

        ///<summary>
        ///The specification for the node
        ///</summary>
        [ApiMember(Description="The specification for the node")]
        public virtual FlowNodeSpec Spec { get; set; }

        ///<summary>
        ///The UI data for the node
        ///</summary>
        [ApiMember(Description="The UI data for the node")]
        public virtual FlowNodeUI UI { 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.")]
        public virtual NodeParameterMap Parameters { get; set; }
    }

    public enum FlowNodeCategories
    {
        General,
        Voice,
        Logic,
        DateAndTime,
        Audio,
        Messaging,
        Assistant,
        Flows,
        Fax,
        Network,
        Cookies,
        CallCenter,
        Intelligence,
    }

    public partial class FlowNodeSpec
    {
        ///<summary>
        ///The name of this node
        ///</summary>
        [ApiMember(Description="The name of this node")]
        public virtual string Name { get; set; }

        ///<summary>
        ///A description of this node
        ///</summary>
        [ApiMember(Description="A description of this node")]
        public virtual string Description { get; set; }

        ///<summary>
        ///Icon class for this node (FontAwesome)
        ///</summary>
        [ApiMember(Description="Icon class for this node (FontAwesome)")]
        public virtual string IconClass { get; set; }

        ///<summary>
        ///The type name for this node
        ///</summary>
        [ApiMember(Description="The type name for this node")]
        public virtual string TypeName { get; set; }

        ///<summary>
        ///The category this node should be grouped under
        ///</summary>
        [ApiMember(Description="The category this node should be grouped under")]
        public virtual FlowNodeCategories Category { get; set; }

        ///<summary>
        ///The URL where this node is located
        ///</summary>
        [ApiMember(Description="The URL where this node is located")]
        public virtual string Url { get; set; }

        ///<summary>
        ///The data type for this node
        ///</summary>
        [ApiMember(Description="The data type for this node")]
        public virtual DataType DataType { get; set; }

        ///<summary>
        ///URL for documentation for this node
        ///</summary>
        [ApiMember(Description="URL for documentation for this node")]
        public virtual string DocumentationUrl { get; set; }

        ///<summary>
        ///The channels that this node is restricted to
        ///</summary>
        [ApiMember(Description="The channels that this node is restricted to")]
        public virtual List<FlowChannels> RestrictToChannels { get; set; }
    }

    public partial class FlowNodeUI
    {
        ///<summary>
        ///The X position of the node
        ///</summary>
        [ApiMember(Description="The X position of the node")]
        public virtual double X { get; set; }

        ///<summary>
        ///The Y position of the node
        ///</summary>
        [ApiMember(Description="The Y position of the node")]
        public virtual double Y { get; set; }

        ///<summary>
        ///Notes for this node
        ///</summary>
        [ApiMember(Description="Notes for this node")]
        public virtual string Notes { get; set; }
    }

    public partial class FlowParameter
        : DataField
    {
        public virtual bool IsPublic { get; set; }
        public virtual bool IsKnob { get; set; }
    }

    public enum FlowRoles
    {
        UI,
        Reference,
        PhoneNumberRouting,
        UserDialOut,
        FaxNumberRouting,
    }

    public partial class FlowUI
    {
        public virtual string SelectedNode { get; set; }
        public virtual double CanvasX { get; set; }
        public virtual double CanvasY { get; set; }
        public virtual double CanvasZoom { get; set; }
    }

    ///<summary>
    ///Create a new flow
    ///</summary>
    [Api(Description="Create a new flow")]
    public partial class NewFlow
        : IPost
    {
        ///<summary>
        ///The account ID to associate with the flow
        ///</summary>
        [ApiMember(Description="The account ID to associate with the flow")]
        public virtual string AccountId { 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")]
        public virtual string CustomerId { get; set; }

        ///<summary>
        ///The name of the flow
        ///</summary>
        [ApiMember(Description="The name of the flow")]
        public virtual string Name { get; set; }

        ///<summary>
        ///The roles that this flow has
        ///</summary>
        [ApiMember(Description="The roles that this flow has")]
        public virtual List<FlowRoles> Roles { get; set; }

        ///<summary>
        ///The list of nodes for this flow
        ///</summary>
        [ApiMember(Description="The list of nodes for this flow")]
        public virtual List<FlowNode> Nodes { get; set; }
    }

    public partial class NodeParameter
    {
        public virtual string Id { get; set; }
        public virtual ValueTypes Type { get; set; }
        public virtual ValueSources Source { get; set; }
        public virtual bool IsAsync { get; set; }
        public virtual string ReferenceId { get; set; }
        public virtual Value Value { get; set; }
        public virtual bool NoEvalTemplate { get; set; }
        public virtual List<NodeParameterMap> ListParameters { get; set; }
        public virtual NodeParameterMap StructParameters { get; set; }
        public virtual bool IsOutput { get; set; }
        public virtual string Expression { get; set; }
        public virtual DataType ListType { get; set; }
    }

    public partial class NodeParameterMap
        : Dictionary<string, NodeParameter>
    {
    }

}

namespace Voice.Api.Flows.Data
{
    public partial class DataField
    {
        public virtual string Id { get; set; }
        public virtual string Name { get; set; }
        public virtual ValueTypes Type { get; set; }
        public virtual UIHints UIHint { get; set; }
        public virtual string UITab { get; set; }
        public virtual bool IsAsync { get; set; }
        public virtual bool DisableBinding { get; set; }
        public virtual DataType StructType { get; set; }
        public virtual DataType ListType { get; set; }
        public virtual string Description { get; set; }
        public virtual List<string> PossibleValues { get; set; }
        public virtual bool IsOutput { get; set; }
        public virtual string CustomFieldValuesUrl { get; set; }
        public virtual Value DefaultValue { get; set; }
        public virtual string TransitionNameFormat { get; set; }
        public virtual DataFieldUniqueness Uniqueness { get; set; }
        public virtual bool VoiceOnly { get; set; }
        public virtual string ConditionalVisibilityField { get; set; }
        public virtual string ConditionalVisibilityValue { get; set; }
        public virtual bool NoEvalTemplate { get; set; }
        public virtual UserDataFieldModes UserMode { get; set; }
        public virtual bool AnyValueType { get; set; }
    }

    public enum DataFieldUniqueness
    {
        NotUnique,
        Unique,
        UniqueToCustomer,
    }

    public partial class DataType
    {
        public virtual string TypeName { get; set; }
        public virtual List<DataField> Fields { get; set; }
    }

    public partial class Struct
        : Dictionary<string, Value>
    {
    }

    public enum UIHints
    {
        None,
        LargeText,
        InlineForm,
        Password,
        InlineStruct,
    }

    public partial class Value
    {
        public virtual bool? BoolValue { get; set; }
        public virtual string StringValue { get; set; }
        public virtual double? NumberValue { get; set; }
        public virtual List<Struct> ListValue { get; set; }
        public virtual Struct StructValue { get; set; }
    }

    public enum ValueSources
    {
        Value,
        Flow,
        System,
        Customer,
        Session,
        Endpoint,
        Expression,
        User,
    }

    public enum ValueTypes
    {
        NotSpecified,
        String,
        Boolean,
        Number,
        List,
        Struct,
        Transition,
        Custom,
        Date,
        AudioFile,
        TimeZoneId,
        PhoneNumber,
        User,
        Endpoint,
        Time,
        File,
        FaxNumber,
        EmailAccount,
        Customer,
        Flow,
        Team,
        FlowReference,
        Integration,
        Assistant,
    }

}

namespace Voice.Api.Settings
{
    public partial class Tag
    {
        public virtual string Id { get; set; }
        public virtual string Name { get; set; }
        public virtual TagColors Color { get; set; }
    }

    public enum TagColors
    {
        Magenta,
        Red,
        Volcano,
        Orange,
        Gold,
        Lime,
        Green,
        Cyan,
        Blue,
        GeekBlue,
        Purple,
    }

}

C# NewFlow DTOs

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

HTTP + XML

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

POST /flows HTTP/1.1 
Host: team.evovoice.io 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<NewFlow xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows">
  <AccountId>String</AccountId>
  <CustomerId>String</CustomerId>
  <Name>String</Name>
  <Nodes>
    <FlowNode>
      <Id>String</Id>
      <IsStartNode>false</IsStartNode>
      <Name>String</Name>
      <Parameters xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:KeyValueOfstringNodeParameteripFhVFNS>
          <d4p1:Key>String</d4p1:Key>
          <d4p1:Value i:nil="true" />
        </d4p1:KeyValueOfstringNodeParameteripFhVFNS>
      </Parameters>
      <Spec>
        <Category>General</Category>
        <DataType xmlns:d5p1="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data" i:nil="true" />
        <Description>String</Description>
        <DocumentationUrl>String</DocumentationUrl>
        <IconClass>String</IconClass>
        <Name>String</Name>
        <RestrictToChannels>
          <FlowChannels>Voice</FlowChannels>
        </RestrictToChannels>
        <TypeName>String</TypeName>
        <Url>String</Url>
      </Spec>
      <UI>
        <Notes>String</Notes>
        <X>0</X>
        <Y>0</Y>
      </UI>
    </FlowNode>
  </Nodes>
  <Roles>
    <FlowRoles>UI</FlowRoles>
  </Roles>
</NewFlow>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<FlowInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows">
  <CreatedBy xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</CreatedBy>
  <DateCreated xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</DateCreated>
  <DateLastModified xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</DateLastModified>
  <Id xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</Id>
  <LastModifiedBy xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</LastModifiedBy>
  <AccountId>String</AccountId>
  <AccountName>String</AccountName>
  <CustomerBreadcrumb xmlns:d2p1="http://schemas.datacontract.org/2004/07/Voice.Api.Customers">
    <d2p1:CustomerBreadcrumb>
      <d2p1:Id>String</d2p1:Id>
      <d2p1:Name>String</d2p1:Name>
    </d2p1:CustomerBreadcrumb>
  </CustomerBreadcrumb>
  <CustomerId>String</CustomerId>
  <CustomerName>String</CustomerName>
  <Description>String</Description>
  <Exits>
    <FlowExit>
      <Id>String</Id>
      <Name>String</Name>
      <UI>
        <Notes>String</Notes>
        <X>0</X>
        <Y>0</Y>
      </UI>
    </FlowExit>
  </Exits>
  <Name>String</Name>
  <NodeCount>0</NodeCount>
  <Nodes>
    <FlowNode>
      <Id>String</Id>
      <IsStartNode>false</IsStartNode>
      <Name>String</Name>
      <Parameters xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:KeyValueOfstringNodeParameteripFhVFNS>
          <d4p1:Key>String</d4p1:Key>
          <d4p1:Value i:nil="true" />
        </d4p1:KeyValueOfstringNodeParameteripFhVFNS>
      </Parameters>
      <Spec>
        <Category>General</Category>
        <DataType xmlns:d5p1="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data" i:nil="true" />
        <Description>String</Description>
        <DocumentationUrl>String</DocumentationUrl>
        <IconClass>String</IconClass>
        <Name>String</Name>
        <RestrictToChannels>
          <FlowChannels>Voice</FlowChannels>
        </RestrictToChannels>
        <TypeName>String</TypeName>
        <Url>String</Url>
      </Spec>
      <UI>
        <Notes>String</Notes>
        <X>0</X>
        <Y>0</Y>
      </UI>
    </FlowNode>
  </Nodes>
  <Notes>String</Notes>
  <Parameters>
    <FlowParameter>
      <AnyValueType xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">false</AnyValueType>
      <ConditionalVisibilityField xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</ConditionalVisibilityField>
      <ConditionalVisibilityValue xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</ConditionalVisibilityValue>
      <CustomFieldValuesUrl xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</CustomFieldValuesUrl>
      <DefaultValue xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">
        <BoolValue>false</BoolValue>
        <ListValue xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:ArrayOfKeyValueOfstringValue8Ahp2kgT i:nil="true" />
        </ListValue>
        <NumberValue>0</NumberValue>
        <StringValue>String</StringValue>
        <StructValue xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
      </DefaultValue>
      <Description xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</Description>
      <DisableBinding xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">false</DisableBinding>
      <Id xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</Id>
      <IsAsync xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">false</IsAsync>
      <IsOutput xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">false</IsOutput>
      <ListType i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data" />
      <Name xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</Name>
      <NoEvalTemplate xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">false</NoEvalTemplate>
      <PossibleValues xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">
        <d4p1:string>String</d4p1:string>
      </PossibleValues>
      <StructType i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data" />
      <TransitionNameFormat xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</TransitionNameFormat>
      <Type xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">NotSpecified</Type>
      <UIHint xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">None</UIHint>
      <UITab xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">String</UITab>
      <Uniqueness xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">NotUnique</Uniqueness>
      <UserMode xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">Hidden</UserMode>
      <VoiceOnly xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Flows.Data">false</VoiceOnly>
      <IsKnob>false</IsKnob>
      <IsPublic>false</IsPublic>
    </FlowParameter>
  </Parameters>
  <Roles>
    <FlowRoles>UI</FlowRoles>
  </Roles>
  <Tags xmlns:d2p1="http://schemas.datacontract.org/2004/07/Voice.Api.Settings">
    <d2p1:Tag>
      <d2p1:Color>Magenta</d2p1:Color>
      <d2p1:Id>String</d2p1:Id>
      <d2p1:Name>String</d2p1:Name>
    </d2p1:Tag>
  </Tags>
  <UI>
    <CanvasX>0</CanvasX>
    <CanvasY>0</CanvasY>
    <CanvasZoom>0</CanvasZoom>
    <SelectedNode>String</SelectedNode>
  </UI>
</FlowInfo>