Workflows

Workflows manage and control the distribution of tasks to workers based on Workflows configurations and capabilities of workers. Workflows configurations is the most important aspect of a workflow process which specifies the order in which tasks must be executed over time by simply described in JSON format and pair tasks into Queues. Each configuration includes a set of conditions which control and evaluate tasks attributes. The rules of condition were defined in JSONLogic format. Read more about JSONLogic here .

When a task is added to the workspace, its own workflow is executed in order to control the task to be channeled into proper Queues. The workflow managing process will continue until the task is either completed or cancelled. Afterwards, based on the evaluation process of Workflows configurations, a task is assigned to a TaskQueue. Workers listen to TaskQueues and reserve the task according to workers availability and capabilities. Assignment Callback mechanism will be enabled to execute the intended request. Workflow’s Assignment Callback contains all the information necessary for the worker to perform the task (for example, emailing or texting the Worker or showing a Notification If your Worker is logged in some sort of portal or making an IVR call to your Worker and later updating the Task with the input from the call).

Main features of Workflow listed as following:

  • Condition: Condition of each Workflow is defined in the filters field of Workflow Configuration. Condition determines whether Task execution happens or not.
  • Fork: A Task can be triggered to fork out to create new Tasks for different Workflows, executed in parallel.Read more about use cases and details here at Task Forking
  • Redirected to: A filter can redirect the flow of the Task to another Filter to run a different course , like a branch.
  • Looping Filter : A looping filter that can be validated between time periods, till It turns true or It’s validated enough

You can read about these features and more about Workflows here .

Workflow Properties

Properties
field description
sid The unique string that we created to identify the Workflow resource.
account_sid The SID of the Account that created the Workflow resource.
workspace_sid The SID of the Workspace that contains the Workflow
friendly_name The string that you assigned to describe the resource. Friendly names are case insensitive, and unique within the Rindap Workspace.
assignment_callback_url The URL that we call when a task managed by the Workflow is assigned to a Worker.
fallback_assignment_callback_url The URL that we call when a call to the AssignmentCallbackUrl fails.
task_reservation_timeout How long Rindap will wait for a confirmation response from your application after notifying the AssignmentCallbackUrl about the reservation.Can be up to 86,400 (24* hours) , minimum 5 , and the default is 86,400..
configuration A URL-encoded JSON string that contains the Workflow’s configuration. See Configuring Workflows for more information.
date_created The date and time in GMT when the resource was created, specified in ISO 8601 format.
date_updated The date and time in GMT when the resource was last updated, specified in ISO 8601 format.
url The absolute URL of the resource
links The URLs of related resources.

Create A Workflow

POST /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workflows

You can easily design and create your Workflow on our developer Portal with an intuitive drag&drop interface. For more information Workflows

Query Parameters
Parameter Type Default Description
WorkspaceSID String “” The SID of the Workspace in which the Task is created
FriendlyName String “” Human readable friendly name. It can be 512 characters long
AssignmentCallbackUrl URL “” The URL that we call when a task managed by the Workflow is assigned to a Worker.
FallbackAssignmentCallbackUrl URL “” The URL that we call when a call to the assignment_callback_url fails.
Configuration String “” A URL-encoded JSON string that contains the Workflow’s configuration. For more information , see Workflows .
TaskReservationTimeout Integer 86400 (optional) How long Rindap will wait for a confirmation response from your application after notifying the assignment_callback_url about the reservation.

Example code pieces using SDKs

Shell

curl -X POST https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows \
--data-urlencode 'FriendlyName=my test workflow'
--data-urlencode 'Configuration={"first_step":"FS111","filters":{"FS111":{"true_queue_sid":"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","false_filter_sid":"FS222","name":"Hot","conditions":{">":[{"var":"temp"},"300"]}},"FS222":{"true_queue_sid":"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","name":"Mild","conditions":{"!=":["1","1"]}}}}'
--data-urlencode 'AssignmentCallbackUrl=https://assignment-callback.my-backbone.mydomain.org'
-H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \
-H "Content-Type:application/x-www-form-urlencoded"

Java

// Install the Java helper library from rindap.com/docs/java/install

import com.rindap.Rindap;
import com.rindap.rest.v1.workspace.Workflow;

public class Example {
    // Find your Account Sid and Token at rindap.com/console

    public static void main(String[] args) {

        Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN");

        Workflow wf = Workflow.creator("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "my test workflow",
            "https://assignment-callback.my-backbone.mydomain.org",
            "{\"first_step\":\"FS111\",\"filters\":{\"FS111\":{\"true_queue_sid\":\"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"false_filter_sid\":\"FS222\",\"name\":\"Hot\",\"conditions\":{\">\":[{\"var\":\"temp\"},\"300\"]}},\"FS222\":{\"true_queue_sid\":\"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Mild\",\"conditions\":{\"!=\":[\"1\",\"1\"]}}}}",
            )
            .create();

        System.out.println(wf);
    }
}

Phyton

from rindap.rest import Client
from rindap.rest import Rindap

# Authenticate
client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN")
rindap = Rindap(client)

# Get Workspace with workspace_sid
workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

# create configuration
configuration = {
    "first_step": "FS111",
    "filters": {
        "FS111": {
            "true_queue_sid":"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "false_filter_sid":"FS222",
            "name":"Hot",
            "conditions": {
                ">":[{"var":"temp"},"300"]
            }
        },
        "FS222":{
            "true_queue_sid":"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "name":"Mild",
            "conditions": {
                "!=" : ["1","1"]
            }
        }
    }
}

# Create a workflow
workflow = workspace.workflows.create("My Workflow",
                                    str(configuration),
                                    assignment_callback_url="https://assignment-callback.my-backbone.mydomain.org")

# Print workflow content
print("WorkflowSid: {}".format(workflow.sid))
print("FriendlyName: {}".format(workflow.friendly_name))

JS

var Rindap = require('rindap');

// Authenticate
var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

// Workflow configuration
var configuration = {
    "first_step": "FS111",
    "filters": {
        "FS111": {
            "true_queue_sid":"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "false_filter_sid":"FS222",
            "name":"Hot",
            "conditions": {
                ">":[{"var":"temp"},"300"]
            }
        },
        "FS222":{
            "true_queue_sid":"WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "name":"Mild",
            "conditions": {
                "!=" : ["1","1"]
            }
        }
    }
}

// Crate a workflow
rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
.workflows
.create({
    friendlyName: "Friendly Name",
    configuration: JSON.stringify(configuration),
    assignmentCallbackUrl: "https://assignment-callback.my-backbone.mydomain.org"
}, function(err, workflow) {
    console.log(workflow.sid);
    console.log(workflow.friendlyName);
});

C#

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Rindap;
using Rindap.Rest.V1.Workspace;

class Program
{
    static void Main(string[] args)
    {
        // Authenticate
        RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

        // Create a configuration
        var configuration = JsonConvert.SerializeObject(new Dictionary<string, Object>()
        {
            {"first_step", "FS111"},
            {"filters",
                new Dictionary<string, Object>()
                {
                    {
                        "FS111", new Dictionary<string, Object>()
                        {
                            { "true_queue_sid", "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},
                            { "false_filter_sid", "FS222"},
                            { "name", "Hot"},
                            { "conditions",
                                new Dictionary<string, Object>() {
                                    { ">",
                                        new object [] {
                                            new Dictionary<string, Object>() { { "var", "temp" } }, 300 }
                                    }
                                }
                            }
                        }
                    },
                    {
                        "FS222", new Dictionary<string, Object>()
                        {
                            { "true_queue_sid", "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" },
                            { "name", "Mild" },
                            { "conditions",
                                new Dictionary<string, Object>() {
                                    { "!=",
                                        new object [] { "1", "1" }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }, Formatting.None);

        // Create a workflow
        var workflow = WorkflowResource.Create(
            assignmentCallbackUrl: new Uri("https://example.com/"),
            fallbackAssignmentCallbackUrl: new Uri("https://example2.com/"),
            friendlyName: "New Friendly Name",
            configuration: configuration,
            pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        );

        // Print workflow content
        Console.WriteLine("WorkflowSID   : " + workflow.Sid);
        Console.WriteLine("Friendly Name : " + workflow.FriendlyName);

    }
}

The above command returns JSON structured like this:

{
"sid": "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"friendly_name": "WF1-yesno",
"configuration": {
    "first_step": "FS111",
    "filters": {
    "FS111": {
        "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "false_filter_sid": "FS222",
        "name": "Hot",
        "conditions": {
        ">": [
            {
            "var": "temp"
            },
            "300"
        ]
        }
    },
    "FS222": {
        "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "name": "Mild",
        "conditions": {
        "!=": [
            "1",
            "1"
        ]
        }
    }
    }
},
"task_reservation_timeout": 86400,
"assignment_callback_url": "https://assignment-callback.my-backbone.mydomain.org",
"date_created": "2020-05-06T10:13:34+03:00",
"date_updated": "2020-05-06T10:13:34+03:00",
"url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WS2b948ebc07d14f5388eecbc92139e4c7/Workflows/WWc6187bd0d24a4365bc01ee340d3f7010",
"links": {
    "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WS2b948ebc07d14f5388eecbc92139e4c7"
}
}

Get All Workflows

GET /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workflows`

This endpoint retrives all Workflows

Query Parameters
Parameter Type Default Description
WorkspaceSID String “” The SID of the Workspace
FriendlyName String “” (optional) Human readable friendly name. Can be used for filtering
PageSize Integer 50 Page size for paging
Page Integer 0 Page number for paging

Example code pieces using SDKs

Shell

curl -X GET https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows \
-H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \
-H "Content-Type:application/x-www-form-urlencoded"

Java

// Install the Java helper library from rindap.com/docs/java/install

import com.rindap.Rindap;
import com.rindap.rest.v1.workspace.Workflow;

public class Example {
    // Find your Account Sid and Token at rindap.com/console


    public static void main(String[] args) {

        Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN");

        Workflow.Reader reader = Workflow.reader("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

        for(Workflow wf:reader.read())
        System.out.println(wf);
    }
}

Phyton

from rindap.rest import Client
from rindap.rest import Rindap

# Authenticate
client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN")
rindap = Rindap(client)

# Get Workspace with workspace_sid
workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

# Fetch all workflow and print content
workflow_fetcher = workspace.workflows.list(limit=10, page_size=5)
for workflow in workflow_fetcher:
    print("WorkflowSid: {}".format(workflow.sid))
    print("FriendlyName: {}".format(workflow.friendly_name))

JS

var Rindap = require('rindap');

// Authenticate
var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

// List all workflows
rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
.workflows
.list({
    limit: 100,
    pageSize: 100
}, function(err, workflows) {
    workflows.forEach(function(workflow) {
    console.log(workflow.sid);
    console.log(workflow.friendlyName);
    })
});

C#

using System;
using Rindap;
using Rindap.Rest.V1.Workspace;

class Program
{
    static void Main(string[] args)
    {
        // Authenticate
        RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

        // Fetch all workflows
        var workflows = WorkflowResource.Read(
            pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            limit: 100,
            pageSize: 100
        );

        // Iterate on workflows
        foreach (var workflow in workflows)
        {
            // Print workflow content
            Console.WriteLine("WorkflowSID   : " + workflow.Sid);
            Console.WriteLine("Friendly Name : " + workflow.FriendlyName);
        }
    }
}

The above command returns JSON structured like this:

{
"meta": {
    "page_size": 50,
    "page": 0,
    "first_page_url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows?Page=0&PageSize=50",
    "previous_page_url": null,
    "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows?Page=0&PageSize=50",
    "key": "workflows",
    "next_page_url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows?Page=1&PageSize=50"
},
"workflows": [
    {
    "sid": "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "friendly_name": "my test workflow",
    "configuration": {
        "first_step": "FS111",
        "filters": {
        "FS111": {
            "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "false_filter_sid": "FS222",
            "name": "Hot",
            "conditions": {
            ">": [
                {
                "var": "temp"
                },
                "300"
            ]
            }
        },
        "FS222": {
            "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "name": "Mild",
            "conditions": {
            "!=": [
                "1",
                "1"
            ]
            }
        }
        }
    },
    "task_reservation_timeout": 86400,
    "assignment_callback_url": "https://assignment-callback.my-backbone.mydomain.org",
    "date_created": "2020-05-06T10:13:34+03:00",
    "date_updated": "2020-05-06T10:13:34+03:00",
    "url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WS2b948ebc07d14f5388eecbc92139e4c7/Workflows/WWc6187bd0d24a4365bc01ee340d3f7010",
    "links": {
        "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WS2b948ebc07d14f5388eecbc92139e4c7"
    }
    }
]
}

Fetch a Workflow

GET /v1/rindap-rest-gw/Workspaces/{WorkspaceSid}/Workflows/{WorkflowSID}

This endpoint fetches a single Workflow with all Its details

Query Parameters
Parameter Type Default Description
WorkspaceSID String “” The SID of the Workspace
WorkflowSID String “” The SID of the Workflow

Example code pieces using SDKs

Shell

curl -X GET https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
/Workflows/WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \
-H "Content-Type:application/x-www-form-urlencoded"

Java

// Install the Java helper library from rindap.com/docs/java/install

import com.rindap.Rindap;
import com.rindap.rest.v1.workspace.Workflow;

public class Example {
    // Find your Account Sid and Token at rindap.com/console

    public static void main(String[] args) {

        Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN");

        Workflow wf = Workflow
            .fetcher("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
            .fetch();

        System.out.println(wf);
    }
}

Phyton

from rindap.rest import Client
from rindap.rest import Rindap

# Authenticate
client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN")
rindap = Rindap(client)

# Get Workspace with workspace_sid
workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

# Get workflow with sid and print content
workflow = workspace.workflows.get("WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").fetch()
print("WorkflowSid: {}".format(workflow.sid))
print("FriendlyName: {}".format(workflow.friendly_name))

JS

var Rindap = require('rindap');

// Authenticate
var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

// Get a workflows with SID
rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
.workflows("WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
.fetch(function(err, workflow) {
    console.log(workflow.sid);
    console.log(workflow.friendlyName);
});

C#

using System;
using Rindap;
using Rindap.Rest.V1.Workspace;

class Program
{
    static void Main(string[] args)
    {
        // Authenticate
        RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

        // Get a workflow with SID
        var workflow = WorkflowResource.Fetch(
            pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            pathSid: "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        );

        // Print workflow content
        Console.WriteLine("WorkflowSID   : " + workflow.Sid);
        Console.WriteLine("Friendly Name : " + workflow.FriendlyName);
    }
}

The above command returns JSON structured like this:

{
"sid": "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"friendly_name": "my test workflow",
"configuration": {
    "first_step": "FS111",
    "filters": {
    "FS111": {
        "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "false_filter_sid": "FS222",
        "name": "Hot",
        "conditions": {
        ">": [
            {
            "var": "temp"
            },
            "300"
        ]
        }
    },
    "FS222": {
        "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "name": "Mild",
        "conditions": {
        "!=": [
            "1",
            "1"
        ]
        }
    }
    }
},
"task_reservation_timeout": 86400,
"assignment_callback_url": "https://assignment-callback.my-backbone.mydomain.org",
"date_created": "2020-05-06T10:13:34+03:00",
"date_updated": "2020-05-06T10:13:34+03:00",
"url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows/WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"links": {
    "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}

Update a Workflow

PUT /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workflows/{WorkflowSID}
Query Parameters
Parameter Type Default Description
WorkspaceSID String “” The SID of the Workspace
WorkflowSID String “” The SID of the Workflow
FriendlyName String “” (optional) Human readable friendly name. It can be 512 characters long
AssignmentCallbackUrl URL “” (optional) The URL that we call when a task managed by the Workflow is assigned to a Worker.
FallbackAssignmentCallbackUrl URL “” (optional) The URL that we call when a call to the assignment_callback_url fails.
Configuration String “” (optional) A URL-encoded JSON string that contains the Workflow’s configuration. For more information , see Workflows .
TaskReservationTimeout Integer
(optional) How long Rindap will wait for a confirmation response from your application after notifying the assignment_callback_url about the reservation.

Example code pieces using SDKs

Shell

curl -X PUT https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
/Workflows/WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
--data-urlencode 'FriendlyName=my newly named workflow' \
--data-urlencode 'TaskReservationTimeout=3600' \
-H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \
-H "Content-Type:application/x-www-form-urlencoded"

Java

// Install the Java helper library from rindap.com/docs/java/install

import com.rindap.Rindap;
import com.rindap.rest.v1.workspace.Workflow;

public class Example {
    // Find your Account Sid and Token at rindap.com/console

    public static void main(String[] args) {

        Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN");

        Workflow wf = Workflow
            .updater("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
            .setFriendlyName("my newly named workflow")
            .setTaskReservationTimeout(3600)
            .update();

        System.out.println(w);
    }
}

Phyton

from rindap.rest import Client
from rindap.rest import Rindap

# Authenticate
client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN")
rindap = Rindap(client)

# Get Workspace with workspace_sid
workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

# Update Workflow
updated_workflow = workflow.update("New Workflow Name", task_reservation_timeout=3600)

print("WorkflowSid: {}".format(updated_workflow.sid))
print("FriendlyName: {}".format(updated_workflow.friendly_name))

JS

var Rindap = require('rindap');

// Authenticate
var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

// Update a workflows with SID
rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
.workflows("WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
.update({
    friendlyName: "New Workflow Name",
    taskReservationTimeout: 3600
},function(err, workflow) {
    console.log(workflow.sid);
    console.log(workflow.friendlyName);
});

C#

using System;
using Rindap;
using Rindap.Rest.V1.Workspace;

class Program
{
    static void Main(string[] args)
    {
        // Authenticate
        RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

        // Update a workflow
        var workflow = WorkflowResource.Update(
            pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            pathSid: "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            assignmentCallbackUrl: new Uri("https://example.org"),
            friendlyName: "New workflow name"
        );

        // Print workflow content
        Console.WriteLine("WorkflowSID   : " + workflow.Sid);
        Console.WriteLine("Friendly Name : " + workflow.FriendlyName);
        Console.WriteLine("Callback URI  : " + workflow.AssignmentCallbackUrl);
    }
}

The above command returns JSON structured like this:

{
"sid": "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"workspace_sid": "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"friendly_name": "my newly named workflow",
"configuration": {
    "first_step": "FS111",
    "filters": {
    "FS111": {
        "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "false_filter_sid": "FS222",
        "name": "Hot",
        "conditions": {
        ">": [
            {
            "var": "temp"
            },
            "300"
        ]
        }
    },
    "FS222": {
        "true_queue_sid": "WQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "name": "Mild",
        "conditions": {
        "!=": [
            "1",
            "1"
        ]
        }
    }
    }
},
"task_reservation_timeout": 3600,
"assignment_callback_url": "https://assignment-callback.my-backbone.mydomain.org",
"date_created": "2020-05-06T10:13:34+03:00",
"date_updated": "2020-05-06T10:13:34+03:00",
"url": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Workflows/WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"links": {
    "workspace": "https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}

Delete a Workflow

DELETE /v1/rindap-rest-gw/Workspaces/{WorkspaceSID}/Workflows/{WorkflowSID}
Query Parameters
Parameter Type Default Description
WorkspaceSID String “” The SID of the Workspace
WorkflowSID String “” The SID of the Workflow

Example code pieces using SDKs

Shell

curl -X DEL https://api.rindap.com/v1/rindap-rest-gw/Workspaces/WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
/Workflows/WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-H "Authorization: Bearer {YOUR_ACCOUNT_SID}.{YOUR_AUTH_TOKEN}" \
-H "Content-Type:application/x-www-form-urlencoded"

Java

// Install the Java helper library from rindap.com/docs/java/install

import com.rindap.Rindap;
import com.rindap.rest.v1.workspace.Workflow;

public class Example {
    // Find your Account Sid and Token at rindap.com/console

    public static void main(String[] args) {

        Rindap.init("YOUR_ACCOUNT_SID","YOUR_AUTH_TOKEN");

        Workflow.deleter("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
            .delete();
    }
}

Phyton

from rindap.rest import Client
from rindap.rest import Rindap

# Authenticate
client = Client("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN")
rindap = Rindap(client)

# Get Workspace with workspace_sid
workspace = rindap.workspaces.get("WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

# Delete workflow with sid
if workspace.workflows.get("WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx").delete():
    print("Workflow has been deleted!")

JS

var Rindap = require('rindap');

// Authenticate
var rindap = new Rindap("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

// Delete a workflows with SID
rindap.workspaces('WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
.workflows("WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
.remove();

C#

using System;
using Rindap;
using Rindap.Rest.V1.Workspace;

class Program
{
    static void Main(string[] args)
    {
        // Authenticate
        RindapClient.Init("YOUR_ACCOUNT_SID", "YOUR_AUTH_TOKEN");

        // Update a workflows workflow
        var isDeleted = WorkflowResource.Delete(
            pathWorkspaceSid: "WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            pathSid: "WWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        );

        if (isDeleted)
        {
            Console.WriteLine("Workflow has been deleted!");
        }
    }
}