Skip to content

Commit

Permalink
Add Workflow Builder
Browse files Browse the repository at this point in the history
  • Loading branch information
jwitz10 committed Jul 22, 2015
1 parent 60236be commit ee05b00
Show file tree
Hide file tree
Showing 3 changed files with 166 additions and 7 deletions.
43 changes: 36 additions & 7 deletions examples/taskrouter.examples.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
require 'json'

# taskrouter examples version 1
@account_sid = 'AC9242e2195ab0681fd413fc3c03b7d7f8'
@auth_token = '3706b85b34b688189f9a47bf393752cc'
@workspace_sid = 'WS0b37cb82ee097132c15cc5295dbe42a1'
@account_sid = 'YourAccountSid'
@auth_token = 'YourAuthToken'
@workspace_sid = 'YourWorkspaceSid'

# set up a client
@client = Twilio::REST::TaskRouterClient.new @account_sid, @auth_token, @workspace_sid
Expand All @@ -17,9 +17,9 @@
end

# create a task
@workflow_sid = 'WW71cfb6c66ac8be88a5f78b527f66c9aa'
@workflow_sid = 'YourWorkflowSid'
@task_attributes = '{"foo":"bar"}'
@client.workspace.tasks.create(attributes: @task_attributes, workflow_sid: @workflow_sid)
# @client.workspace.tasks.create(attributes: @task_attributes, workflow_sid: @workflow_sid)

# list all the tasks created
@client.workspace.tasks.list.each do |task|
Expand All @@ -28,6 +28,35 @@
end

# get all the statistics for a workspace
@workspaceStats = @client.workspace.statistics
@cumulative = @workspaceStats.cumulative
@workspace_stats = @client.workspace.statistics
@cumulative = @workspace_stats.cumulative
puts 'Avg Task Acceptance Time: ' + @cumulative['avg_task_acceptance_time'].to_s + ' with ' + @cumulative['tasks_created'].to_s + ' tasks created'

# build a workflow
@support_queue_sid = 'YourSupportQueueSid'
@marketing_queue_sid = 'YourMarketingQueueSid'
@default_queue_sid = 'YourDefaultQueue'

@support_target = Twilio::TaskRouter::WorkflowRuleTarget.new @support_queue_sid
@support_targets = [@support_target]
@support_rule = Twilio::TaskRouter::WorkflowRule.new 'type == support', @support_targets

@marketing_target = Twilio::TaskRouter::WorkflowRuleTarget.new @marketing_queue_sid
@marketing_targets = [@marketing_target]
@marketing_rule = Twilio::TaskRouter::WorkflowRule.new 'type == support', @marketing_targets

@rules = [@support_rule, @marketing_rule]
@default_target = Twilio::TaskRouter::WorkflowRuleTarget.new @default_queue_sid

@config = Twilio::TaskRouter::WorkflowConfiguration.new @rules, @default_target
puts @config.to_json

@workflowCreated = @client.workspace.workflows.create(configuration: @config.to_json, friendly_name: 'MyWorkflow2', assignment_callback_url: 'http://example.com')
@workflowFetched = @client.workspace.workflows.get(@workflowCreated.sid)

@config_string = @workflowFetched.configuration
@config_obj = Twilio::TaskRouter::WorkflowConfiguration.parse_json(@config_string)

puts @config_string
puts @config_obj.rules[0].expression
puts @config_obj.default_target.queue
1 change: 1 addition & 0 deletions lib/twilio-ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
require 'twilio-ruby/twiml/response'
require 'twilio-ruby/task_router'
require 'twilio-ruby/task_router/capability'
require 'twilio-ruby/task_router/workflow_builder'
require 'twilio-ruby/rest/errors'
require 'twilio-ruby/rest/utils'
require 'twilio-ruby/rest/list_resource'
Expand Down
129 changes: 129 additions & 0 deletions lib/twilio-ruby/task_router/workflow_builder.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
require 'json'

module Twilio
module TaskRouter
class WorkflowConfiguration

def initialize(rules, default_target)
@rules = rules
@default_target = default_target
end

def rules
@rules
end

def default_target
@default_target
end

def to_json
filters = Array.new
@rules.each do |rule|
filters.push(rule.to_json)
end

task_routing = {'filters' => filters, 'default_filter' => @default_target.to_json}
config = {'task_routing' => task_routing}
config.to_json
end

def self.parse_json(json_data)
task_routing = JSON.parse(json_data)['task_routing']

filters = task_routing['filters']
rules = Array.new
filters.each do |rule|
rules.push(Twilio::TaskRouter::WorkflowRule.parse_json(rule))
end

default_filter = Twilio::TaskRouter::WorkflowRuleTarget.parse_json(task_routing['default_filter'])
Twilio::TaskRouter::WorkflowConfiguration.new rules, default_filter
end
end
class WorkflowRule

def initialize(expression, targets, friendly_name=nil)
@expression = expression
@targets = targets
@friendly_name = friendly_name
end

def expression
@expression
end

def targets
@targets
end

def friendly_name
@friendly_name
end

def to_json
rule = {'expression' => @expression}
ruleTargets = Array.new
@targets.each do |target|
ruleTargets.push(target.to_json)
end
rule['targets'] = ruleTargets
unless @friendly_name.nil?
rule['friendly_name'] = @friendly_name
end
rule
end

def self.parse_json(rule)
targets = Array.new
rule['targets'].each do |target|
targets.push(Twilio::TaskRouter::WorkflowRuleTarget.parse_json(target))
end
Twilio::TaskRouter::WorkflowRule.new rule['expression'], targets, rule['friendly_name']
end
end
class WorkflowRuleTarget

def initialize(queue, priority=nil, timeout=nil, expression=nil)
@queue = queue
@priority = priority
@timeout = timeout
@expression = expression
end

def queue
@queue
end

def priority
@priority
end

def timeout
@timeout
end

def expression
@expression
end

def to_json
target = {'queue' => @queue}
unless @priority.nil?
target['priority'] = @priority
end
unless @timeout.nil?
target['timeout'] = @timeout
end
unless @expression.nil?
target['expression'] = @expression
end
target
end

def self.parse_json(target)
Twilio::TaskRouter::WorkflowRuleTarget.new target['queue'], target['priority'], target['timeout'], target['expression']
end
end
end
end

0 comments on commit ee05b00

Please sign in to comment.