twilio-ruby 4.3.0 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +8 -0
- data/README.md +26 -3
- data/docs/getting-started.rst +21 -0
- data/docs/usage/taskrouter.rst +235 -21
- data/docs/usage/token-generation.rst +19 -0
- data/examples/taskrouter.examples.rb +86 -0
- data/lib/twilio-ruby.rb +1 -0
- data/lib/twilio-ruby/rest/task_router/workers.rb +6 -0
- data/lib/twilio-ruby/task_router/workflow_builder.rb +129 -0
- data/lib/twilio-ruby/version.rb +1 -1
- data/spec/rest/task_router/reservation_spec.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecb07fd26a80b320199741a2ce2c188331969654
|
4
|
+
data.tar.gz: 1dbdea6628f1a8f9f7bda6fd25d28b7ec30a4884
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 624f9abd8990248bea0fdbb3fc7a235cddd6ff0edbe197237dc6b048dea14a052a3200f237acaea47754b72f7d8b4e95dfafc274a48c7dc5bc145ded3b071726
|
7
|
+
data.tar.gz: 5fb8fe1662af3af16b1efc90eb746ca78aa6a96d7eff2568574ffc23725e51518913367e2858ae9c028479845eec5332db3ccdaee6eb180493ea0f0306b5e2c7
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -118,7 +118,30 @@ end
|
|
118
118
|
@client.incoming_phone_numbers.create(phone_number: @number)
|
119
119
|
```
|
120
120
|
|
121
|
-
##
|
121
|
+
## Create a Task with TaskRouter
|
122
|
+
|
123
|
+
If you need to create a Task to TaskRouter, you can do so by using the TaskRouterClient.
|
124
|
+
|
125
|
+
Additional resources had off of the workspace object (task_queues, workers, workflows, activities, tasks, statistics, events).
|
126
|
+
|
127
|
+
``` ruby
|
128
|
+
require 'rubygems'
|
129
|
+
require 'twilio-ruby'
|
130
|
+
|
131
|
+
# put your own account credentials here:
|
132
|
+
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
133
|
+
auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
|
134
|
+
workspace_sid = 'WSzzzzzzzzzzzzzzzzzzzzzzzzzzz'
|
135
|
+
|
136
|
+
# set up a client
|
137
|
+
client = Twilio::REST::TaskRouterClient.new account_sid, auth_token, workspace_sid
|
138
|
+
|
139
|
+
# create a task
|
140
|
+
workflow_sid = 'WWffffffffffffffffffffffffffff'
|
141
|
+
client.workspace.tasks.create(attributes: '{"foo": "bar"}', workflow_sid: "WWfffffffffffffffffffffffffffffff")
|
142
|
+
```
|
143
|
+
|
144
|
+
## Create a Twilio Client Capability Token
|
122
145
|
|
123
146
|
If you just need to generate a Capability Token for use with Twilio Client, you
|
124
147
|
can do this:
|
@@ -128,8 +151,8 @@ require 'rubygems' # not necessary with ruby 1.9 but included for completeness
|
|
128
151
|
require 'twilio-ruby'
|
129
152
|
|
130
153
|
# put your own account credentials here:
|
131
|
-
account_sid = '
|
132
|
-
auth_token = '
|
154
|
+
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
155
|
+
auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
|
133
156
|
|
134
157
|
# set up
|
135
158
|
capability = Twilio::Util::Capability.new account_sid, auth_token
|
data/docs/getting-started.rst
CHANGED
@@ -87,6 +87,27 @@ to easily create such responses.
|
|
87
87
|
<Play loop="5">https://api.twilio.com/cowbell.mp3</Play>
|
88
88
|
<Response>
|
89
89
|
|
90
|
+
Create a Task with TaskRouter
|
91
|
+
=================
|
92
|
+
|
93
|
+
If you need to create a Task to TaskRouter, you can do so by using the TaskRouterClient.
|
94
|
+
|
95
|
+
Additional resources had off of the workspace object (task_queues, workers, workflows, activities, tasks, statistics, events).
|
96
|
+
|
97
|
+
.. code-block:: ruby
|
98
|
+
|
99
|
+
require 'twilio-ruby'
|
100
|
+
|
101
|
+
# To find these visit https://www.twilio.com/user/account
|
102
|
+
account_sid = "ACXXXXXXXXXXXXXXXXX"
|
103
|
+
auth_token = "YYYYYYYYYYYYYYYYYY"
|
104
|
+
workspace_sid = "WSzzzzzzzzzzzzzzzzzzzzzzzzzzz"
|
105
|
+
|
106
|
+
client = Twilio::REST::TaskRouterClient.new account_sid, auth_token, workspace_sid
|
107
|
+
|
108
|
+
workflow_sid = "WFzzzzzzzzzzzzz"
|
109
|
+
task = client.workspace.tasks.create(attributes: '{"foo":"bar"}', workflow_sid: workflow_sid)
|
110
|
+
|
90
111
|
|
91
112
|
Digging Deeper
|
92
113
|
========================
|
data/docs/usage/taskrouter.rst
CHANGED
@@ -11,17 +11,15 @@ can best handle them.
|
|
11
11
|
For more information, see the `TaskRouter documentation
|
12
12
|
<https://www.twilio.com/docs/taskrouter>_`.
|
13
13
|
|
14
|
+
Note: Passed in Form/Query Parameters are based on their json equivalent attribute.
|
14
15
|
|
15
|
-
|
16
|
+
Workspaces
|
16
17
|
--------------------
|
17
18
|
|
18
19
|
A Workspace is a container for your Tasks, Workers, TaskQueues, Workflows and
|
19
20
|
Activities. Each of these items exists within a single Workspace and will not
|
20
21
|
be shared across Workspaces.
|
21
22
|
|
22
|
-
The following code will create a new :class:`Workspace` resource and print
|
23
|
-
its unique ID.
|
24
|
-
|
25
23
|
.. code-block:: ruby
|
26
24
|
|
27
25
|
require 'twilio-ruby'
|
@@ -35,12 +33,29 @@ its unique ID.
|
|
35
33
|
|
36
34
|
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
37
35
|
|
36
|
+
# creating a workspace
|
38
37
|
@workspace = @client.workspaces.create(
|
39
38
|
friendly_name: "Customer Support",
|
40
39
|
template: "FIFO", # Sets up default activities and a FIFO TaskQueue
|
41
40
|
)
|
42
41
|
puts @workspace.sid
|
43
42
|
|
43
|
+
# fetching a workspace
|
44
|
+
@workspace = @client.workspace
|
45
|
+
puts @workspace.sid
|
46
|
+
puts @workspace.friendly_name
|
47
|
+
|
48
|
+
# fetching a list of workspaces
|
49
|
+
@client.workspaces.list.each do |workspace|
|
50
|
+
puts workspace.friendly_name
|
51
|
+
end
|
52
|
+
|
53
|
+
# updating a workspace
|
54
|
+
@client.workspace.update(friendly_name: 'MyWorkspace2')
|
55
|
+
|
56
|
+
# deleting a workspace
|
57
|
+
@client.workspace.delete
|
58
|
+
|
44
59
|
|
45
60
|
Workflows
|
46
61
|
---------
|
@@ -50,6 +65,9 @@ how Tasks should escalate in priority or move across queues over time.
|
|
50
65
|
Workflows are described in a simple JSON format and can be modified through the
|
51
66
|
REST API or through the account portal.
|
52
67
|
|
68
|
+
Creating a Workflow
|
69
|
+
--------------------
|
70
|
+
|
53
71
|
The following code will create a new :class:`Workflow` resource and print its
|
54
72
|
unique ID:
|
55
73
|
|
@@ -75,14 +93,14 @@ unique ID:
|
|
75
93
|
"expression":"customer_value == 'Gold' AND type == 'ticket'",
|
76
94
|
"targets":[
|
77
95
|
{
|
78
|
-
"
|
96
|
+
"queue":"YourGoldTicketQueueSid",
|
79
97
|
"priority":"2"
|
80
98
|
}
|
81
99
|
]
|
82
100
|
}
|
83
101
|
],
|
84
102
|
"default_filter":{
|
85
|
-
"
|
103
|
+
"queue":"YourDefaultQueueSid"
|
86
104
|
}
|
87
105
|
}
|
88
106
|
}
|
@@ -90,14 +108,75 @@ unique ID:
|
|
90
108
|
|
91
109
|
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
92
110
|
|
93
|
-
@
|
111
|
+
@workflow = @client.workspace.workflows.create(
|
94
112
|
friendly_name: "Incoming Call Flow",
|
95
113
|
assignment_callback_url: "https://example.com/callback",
|
96
114
|
fallback_assignment_callback_url: "https://example.com/callback2",
|
97
115
|
configuration: CONFIG
|
98
116
|
)
|
99
|
-
puts @
|
117
|
+
puts @workflow.sid
|
118
|
+
|
119
|
+
You can also utilize our Workflow Builder to make this process a bit easier utilizing objects:
|
120
|
+
|
121
|
+
.. code-block:: ruby
|
122
|
+
|
123
|
+
require twilio-ruby
|
124
|
+
|
125
|
+
# To find these visit https://www.twilio.com/user/account
|
126
|
+
ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXX"
|
127
|
+
AUTH_TOKEN = "YYYYYYYYYYYYYYYYYY"
|
128
|
+
|
129
|
+
# See previous examples to create a Workspace
|
130
|
+
WORKSPACE_SID = "WSZZZZZZZZZZZZZZ"
|
131
|
+
|
132
|
+
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
133
|
+
|
134
|
+
gold_ticket_queue_sid = 'YourGoldTicketQueueSid'
|
135
|
+
default_queue_sid = 'YourDefaultQueueSid'
|
136
|
+
|
137
|
+
gold_ticket_targets = [Twilio::TaskRouter::WorkflowRuleTarget.new(gold_ticket_queue_sid)]
|
138
|
+
gold_ticket_rule = Twilio::TaskRouter::WorkflowRule.new 'customer_value == "Gold" AND type == "ticket"', gold_ticket_targets, 'Gold Tickets'
|
139
|
+
|
140
|
+
@rules = [gold_ticket_rule]
|
141
|
+
@default_target = Twilio::TaskRouter::WorkflowRuleTarget.new default_queue_sid
|
100
142
|
|
143
|
+
@config = Twilio::TaskRouter::WorkflowConfiguration.new @rules, @default_target
|
144
|
+
puts @config.to_json
|
145
|
+
|
146
|
+
@workflow = @client.workspace.workflows.create(configuration: @config.to_json, friendly_name: 'Incoming Call Flow', assignment_callback_url: 'https://example.com/callback', fallback_assignment_callback_url: 'https://example.com/callback2')
|
147
|
+
puts @workflow.sid
|
148
|
+
|
149
|
+
Fetching, Updating, Deleting Workflows
|
150
|
+
--------------------
|
151
|
+
|
152
|
+
.. code-block:: ruby
|
153
|
+
|
154
|
+
require twilio-ruby
|
155
|
+
|
156
|
+
# To find these visit https://www.twilio.com/user/account
|
157
|
+
ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXX"
|
158
|
+
AUTH_TOKEN = "YYYYYYYYYYYYYYYYYY"
|
159
|
+
|
160
|
+
# See previous examples to create a Workspace
|
161
|
+
WORKSPACE_SID = "WSZZZZZZZZZZZZZZ"
|
162
|
+
WORKFLOW_SID = "WFZZZZZZZZZZZZZZZ"
|
163
|
+
|
164
|
+
# fetching a workflow
|
165
|
+
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
166
|
+
@workflow = @client.workspace.workflows.get(WORKFLOW_SID)
|
167
|
+
puts @workflow.sid
|
168
|
+
puts @workflow.friendly_name
|
169
|
+
|
170
|
+
# fetching a list of workflows
|
171
|
+
@client.workspace.workflows.list.each do |workflow|
|
172
|
+
puts workflow.friendly_name
|
173
|
+
end
|
174
|
+
|
175
|
+
# updating a workflow
|
176
|
+
@workflow.update(friendly_name: 'NewWorkflowName')
|
177
|
+
|
178
|
+
# deleting a workflow
|
179
|
+
@workflow.delete
|
101
180
|
|
102
181
|
Activities
|
103
182
|
----------
|
@@ -106,8 +185,6 @@ Activities describe the current status of your Workers, which determines
|
|
106
185
|
whether they are eligible to receive task assignments. Workers are always set
|
107
186
|
to a single Activity.
|
108
187
|
|
109
|
-
To create a new :class:`Activity`:
|
110
|
-
|
111
188
|
.. code-block:: ruby
|
112
189
|
|
113
190
|
require 'twilio-ruby'
|
@@ -121,12 +198,27 @@ To create a new :class:`Activity`:
|
|
121
198
|
|
122
199
|
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
123
200
|
|
124
|
-
|
201
|
+
# creating an activity
|
202
|
+
@activity = @client.workspace.activities.create(
|
125
203
|
friendly_name: "Coffee Break",
|
126
204
|
available: false # Whether workers are available to handle tasks during this activity
|
127
205
|
)
|
128
206
|
puts @activity.sid
|
129
207
|
|
208
|
+
# fetching a list of activities
|
209
|
+
@client.workspace.activities.list.each do |activity|
|
210
|
+
puts activity.friendly_name
|
211
|
+
end
|
212
|
+
|
213
|
+
# fetching an activity
|
214
|
+
ACTIVITY_SID = "WAZZZZZZZZZZZZZZZZZ"
|
215
|
+
@activity = @client.workspace.activities.get(ACTIVITY_SID)
|
216
|
+
|
217
|
+
# updating an activity
|
218
|
+
@activity.update(friendly_name: 'NewFriendlyName')
|
219
|
+
|
220
|
+
# deleting an activity
|
221
|
+
@activity.delete
|
130
222
|
|
131
223
|
Workers
|
132
224
|
-------
|
@@ -134,8 +226,6 @@ Workers
|
|
134
226
|
Workers represent an entity that is able to perform tasks, such as an agent
|
135
227
|
working in a call center, or a salesperson handling leads.
|
136
228
|
|
137
|
-
To create a new :class:`Worker`:
|
138
|
-
|
139
229
|
.. code-block:: ruby
|
140
230
|
|
141
231
|
require 'twilio-ruby'
|
@@ -149,12 +239,33 @@ To create a new :class:`Worker`:
|
|
149
239
|
|
150
240
|
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
151
241
|
|
152
|
-
|
242
|
+
# creating a worker
|
243
|
+
@worker = @client.workspace.workers.create(
|
153
244
|
friendly_name:"Jamie",
|
154
245
|
attributes:'{"phone": "+14155551234", "languages": ["EN", "ES"]}'
|
155
246
|
)
|
156
247
|
puts @worker.sid
|
157
248
|
|
249
|
+
# fetching a list of workers
|
250
|
+
@client.workspace.workers.list.each do |worker|
|
251
|
+
puts worker.friendly_name
|
252
|
+
end
|
253
|
+
|
254
|
+
# fetching a list of workers based on activity
|
255
|
+
@client.workspace.workers.list(activity_name: 'Offline').each do |worker|
|
256
|
+
puts worker.friendly_name + ' is offline'
|
257
|
+
end
|
258
|
+
|
259
|
+
# fetching an worker
|
260
|
+
WORKER_SID = "WKZZZZZZZZZZZZZZZZZ"
|
261
|
+
@worker = @client.workspace.workers.get(WORKER_SID)
|
262
|
+
|
263
|
+
# updating an worker
|
264
|
+
@worker.update(friendly_name: 'NewFriendlyName')
|
265
|
+
|
266
|
+
# deleting an worker
|
267
|
+
@worker.delete
|
268
|
+
|
158
269
|
|
159
270
|
TaskQueues
|
160
271
|
----------
|
@@ -164,8 +275,6 @@ Workers are eligible to handle those Tasks. As your Workflows process Tasks,
|
|
164
275
|
those Tasks will pass through one or more TaskQueues until the Task is assigned
|
165
276
|
and accepted by an eligible Worker.
|
166
277
|
|
167
|
-
To create a new :class:`TaskQueue`:
|
168
|
-
|
169
278
|
.. code-block:: ruby
|
170
279
|
|
171
280
|
require 'twilio-ruby'
|
@@ -179,14 +288,30 @@ To create a new :class:`TaskQueue`:
|
|
179
288
|
|
180
289
|
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
181
290
|
|
182
|
-
|
291
|
+
# creating a task_queue
|
292
|
+
@taskqueue = @client.workspace.task_queues.create(
|
183
293
|
friendly_name: "Sales",
|
184
294
|
# The Activity to assign workers when a task is reserved for them
|
185
295
|
reservation_activity_sid: "WA11111111111",
|
186
296
|
# The Activity to assign workers when a task is assigned to them
|
187
297
|
assignment_activity_sid: "WA222222222222",
|
188
298
|
)
|
189
|
-
puts @
|
299
|
+
puts @taskqueue.sid
|
300
|
+
|
301
|
+
# fetching a list of task_queues
|
302
|
+
@client.workspace.task_queues.list.each do |task_queue|
|
303
|
+
puts task_queue.friendly_name
|
304
|
+
end
|
305
|
+
|
306
|
+
# fetching an taskqueue
|
307
|
+
TASK_QUEUE_SID = "WQZZZZZZZZZZZZZZZZZ"
|
308
|
+
@taskqueue = @client.workspace.task_queues.get(TASK_QUEUE_SID)
|
309
|
+
|
310
|
+
# updating an taskqueue
|
311
|
+
@taskqueue.update(friendly_name: 'NewFriendlyName')
|
312
|
+
|
313
|
+
# deleting an taskqueue
|
314
|
+
@taskqueue.delete
|
190
315
|
|
191
316
|
|
192
317
|
Tasks
|
@@ -195,8 +320,6 @@ Tasks
|
|
195
320
|
A Task instance resource represents a single item of work waiting to be
|
196
321
|
processed.
|
197
322
|
|
198
|
-
To create a new :class:`Task` via the REST API:
|
199
|
-
|
200
323
|
.. code-block:: ruby
|
201
324
|
|
202
325
|
# To find these visit https://www.twilio.com/user/account
|
@@ -219,8 +342,99 @@ To create a new :class:`Task` via the REST API:
|
|
219
342
|
}
|
220
343
|
EOS
|
221
344
|
|
222
|
-
|
345
|
+
# creating a task
|
346
|
+
@task = @client.workspace.tasks.create(
|
223
347
|
attributes: TASK_ATTRIBUTES,
|
224
348
|
assignment_status: 'pending',
|
225
349
|
)
|
226
350
|
puts @task.sid
|
351
|
+
|
352
|
+
# fetching a list of tasks
|
353
|
+
@client.workspace.tasks.list.each do |task|
|
354
|
+
puts task.sid
|
355
|
+
end
|
356
|
+
|
357
|
+
# fetching a list of tasks that are pending
|
358
|
+
@client.workspace.tasks.list(assignment_status: 'pending').each do |task|
|
359
|
+
puts task.sid
|
360
|
+
end
|
361
|
+
|
362
|
+
# fetching an task
|
363
|
+
TASK_SID = "WTZZZZZZZZZZZZZZZZZ"
|
364
|
+
@task = @client.workspace.tasks.get(TASK_SID)
|
365
|
+
|
366
|
+
# updating an task
|
367
|
+
@task.update(friendly_name: 'NewFriendlyName')
|
368
|
+
|
369
|
+
# deleting an task
|
370
|
+
@task.delete
|
371
|
+
|
372
|
+
Reservations
|
373
|
+
-----
|
374
|
+
|
375
|
+
A Reservation instance resource represents a single matching item of work from a task to a worker.
|
376
|
+
|
377
|
+
.. code-block:: ruby
|
378
|
+
|
379
|
+
# To find these visit https://www.twilio.com/user/account
|
380
|
+
ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXX"
|
381
|
+
AUTH_TOKEN = "YYYYYYYYYYYYYYYYYY"
|
382
|
+
|
383
|
+
# See previous examples to create a Workspace
|
384
|
+
WORKSPACE_SID = "WSZZZZZZZZZZZZZZ"
|
385
|
+
|
386
|
+
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
387
|
+
|
388
|
+
# fetching an task
|
389
|
+
TASK_SID = "WTZZZZZZZZZZZZZZZZZ"
|
390
|
+
@task = @client.workspace.tasks.get(TASK_SID)
|
391
|
+
|
392
|
+
# fetching reservations for said task
|
393
|
+
@task.reservations.list.each do |reservation|
|
394
|
+
puts reservation.sid
|
395
|
+
end
|
396
|
+
|
397
|
+
Statistics
|
398
|
+
-----
|
399
|
+
|
400
|
+
A Statistics resource represents the statistics over a time period for a particular resource
|
401
|
+
|
402
|
+
.. code-block:: ruby
|
403
|
+
|
404
|
+
# To find these visit https://www.twilio.com/user/account
|
405
|
+
ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXX"
|
406
|
+
AUTH_TOKEN = "YYYYYYYYYYYYYYYYYY"
|
407
|
+
|
408
|
+
# See previous examples to create a Workspace
|
409
|
+
WORKSPACE_SID = "WSZZZZZZZZZZZZZZ"
|
410
|
+
|
411
|
+
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
412
|
+
|
413
|
+
# fetching statistics based on the last 4 hours
|
414
|
+
@workspace_stats = @client.workspace.statistics(minutes: '240')
|
415
|
+
@cumulative = @workspace_stats.cumulative
|
416
|
+
puts 'Avg Task Acceptance Time: ' + @cumulative['avg_task_acceptance_time'].to_s \
|
417
|
+
+ ' with ' + @cumulative['tasks_created'].to_s + ' tasks created'
|
418
|
+
|
419
|
+
Events
|
420
|
+
-----
|
421
|
+
|
422
|
+
A Event represents an internal TaskRouter event that occurred and has been logged.
|
423
|
+
You can query based on time the event occurred, a certain resource or combination.
|
424
|
+
|
425
|
+
.. code-block:: ruby
|
426
|
+
|
427
|
+
# To find these visit https://www.twilio.com/user/account
|
428
|
+
ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXX"
|
429
|
+
AUTH_TOKEN = "YYYYYYYYYYYYYYYYYY"
|
430
|
+
|
431
|
+
# See previous examples to create a Workspace
|
432
|
+
WORKSPACE_SID = "WSZZZZZZZZZZZZZZ"
|
433
|
+
|
434
|
+
@client = Twilio::REST::TaskRouterClient.new ACCOUNT_SID, AUTH_TOKEN, WORKSPACE_SID
|
435
|
+
|
436
|
+
# fetching events for a workspace for the last 15 minutes
|
437
|
+
@events = @client.workspace.events.list(minutes: '15')
|
438
|
+
@events.each do |event|
|
439
|
+
puts event.event_type + ' at ' + event.event_date
|
440
|
+
end
|
@@ -75,6 +75,25 @@ for outputting valid TwiML to control phone calls and messages.
|
|
75
75
|
# Twilio Application Sid
|
76
76
|
application_sid = "APabe7650f654fc34655fc81ae71caa3ff"
|
77
77
|
@capability.allow_client_outgoing(application_sid)
|
78
|
+
|
79
|
+
Add Parameters to an Outgoing Scope
|
80
|
+
===================================
|
81
|
+
|
82
|
+
You can send parameters to your Twilio Application's :attr:`VoiceUrl` by passing
|
83
|
+
a hash to :attr:`#allow_client_outgoing`. Here we pass along a hypothetical user
|
84
|
+
id.
|
85
|
+
|
86
|
+
.. code-block:: ruby
|
87
|
+
|
88
|
+
application_sid = "APabe7650f654fc34655fc81ae71caa3ff"
|
89
|
+
params = {'user_id' => @user.id}
|
90
|
+
|
91
|
+
# Allow outgoing calls to an application and pass the user id to your server.
|
92
|
+
@capability.allow_client_outgoing(application_sid, params)
|
93
|
+
|
94
|
+
The :attr:`user_id` parameter and its value will be sent to your Application's
|
95
|
+
:attr:`VoiceUrl` along with the other parameters that Twilio usually sends, like
|
96
|
+
:attr:`From`, :attr:`To` and :attr:`CallSid`.
|
78
97
|
|
79
98
|
|
80
99
|
Generate a Token
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'twilio-ruby'
|
3
|
+
|
4
|
+
# taskrouter examples version 1
|
5
|
+
account_sid = 'YourAccountSid'
|
6
|
+
auth_token = 'YourAuthToken'
|
7
|
+
workspace_sid = 'YourWorkspaceSid'
|
8
|
+
|
9
|
+
# set up a client
|
10
|
+
client = Twilio::REST::TaskRouterClient.new account_sid, auth_token, workspace_sid
|
11
|
+
puts client.workspace.sid + ' with ' + client.workspace.friendly_name
|
12
|
+
|
13
|
+
client.workspace.update(friendly_name: 'MyWorkspace2')
|
14
|
+
|
15
|
+
# fetch the list of workers and their status
|
16
|
+
client.workspace.workers.list.each do |worker|
|
17
|
+
puts worker.friendly_name + ' is available ' + worker.available.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
# fetch the list of workers and their status
|
21
|
+
client.workspace.workers.list(activity_name: 'Offline').each do |worker|
|
22
|
+
puts worker.friendly_name + ' is available ' + worker.available.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
# create a task
|
26
|
+
workflow_sid = 'YourWorkflowSid'
|
27
|
+
task = client.workspace.tasks.create(attributes: '{"foo":"bar"}', workflow_sid: workflow_sid)
|
28
|
+
|
29
|
+
# list all the tasks created
|
30
|
+
client.workspace.tasks.list.each do |task|
|
31
|
+
attributes = JSON.parse(task.attributes)
|
32
|
+
puts attributes['foo'] + ' with age ' + task.age.to_s
|
33
|
+
task.reservations.list.each do |reservation|
|
34
|
+
puts reservation.sid
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# fetching a list of tasks that are pending
|
39
|
+
client.workspace.tasks.list(assignment_status: 'pending').each do |task|
|
40
|
+
puts 'pending task ' + task.sid
|
41
|
+
end
|
42
|
+
|
43
|
+
# delete all tasks
|
44
|
+
client.workspace.tasks.list.each do |task|
|
45
|
+
puts 'deleting task ' + task.sid
|
46
|
+
task.delete
|
47
|
+
end
|
48
|
+
|
49
|
+
# get all the statistics for a workspace
|
50
|
+
workspace_stats = client.workspace.statistics(minutes: '240')
|
51
|
+
cumulative = workspace_stats.cumulative
|
52
|
+
puts 'Avg Task Acceptance Time: ' + cumulative['avg_task_acceptance_time'].to_s \
|
53
|
+
+ ' with ' + cumulative['tasks_created'].to_s + ' tasks created'
|
54
|
+
|
55
|
+
# get events for a workspace
|
56
|
+
events = client.workspace.events.list(minutes: '15')
|
57
|
+
events.each do |event|
|
58
|
+
puts event.event_type + ' at ' + event.event_date
|
59
|
+
end
|
60
|
+
|
61
|
+
# build a workflow
|
62
|
+
support_queue_sid = 'YourSupportQueueSid'
|
63
|
+
marketing_queue_sid = 'YourMarketingQueueSid'
|
64
|
+
default_queue_sid = 'YourDefaultQueue'
|
65
|
+
|
66
|
+
support_targets = [Twilio::TaskRouter::WorkflowRuleTarget.new support_queue_sid]
|
67
|
+
support_rule = Twilio::TaskRouter::WorkflowRule.new 'type == "support"', support_targets
|
68
|
+
|
69
|
+
marketing_targets = [Twilio::TaskRouter::WorkflowRuleTarget.new marketing_queue_sid]
|
70
|
+
marketing_rule = Twilio::TaskRouter::WorkflowRule.new 'type == "marketing"', marketing_targets
|
71
|
+
|
72
|
+
rules = [support_rule, marketing_rule]
|
73
|
+
default_target = Twilio::TaskRouter::WorkflowRuleTarget.new default_queue_sid
|
74
|
+
|
75
|
+
config = Twilio::TaskRouter::WorkflowConfiguration.new rules, default_target
|
76
|
+
puts config.to_json
|
77
|
+
|
78
|
+
workflowCreated = client.workspace.workflows.create(configuration: config.to_json, friendly_name: 'MyWorkflow2', assignment_callback_url: 'http://example.com')
|
79
|
+
workflowFetched = client.workspace.workflows.get(workflowCreated.sid)
|
80
|
+
|
81
|
+
config_string = workflowFetched.configuration
|
82
|
+
config_obj = Twilio::TaskRouter::WorkflowConfiguration.parse_json(config_string)
|
83
|
+
|
84
|
+
puts config_string
|
85
|
+
puts config_obj.rules[0].expression
|
86
|
+
puts config_obj.default_target.queue
|
data/lib/twilio-ruby.rb
CHANGED
@@ -17,6 +17,7 @@ require 'twilio-ruby/util/capability'
|
|
17
17
|
require 'twilio-ruby/twiml/response'
|
18
18
|
require 'twilio-ruby/task_router'
|
19
19
|
require 'twilio-ruby/task_router/capability'
|
20
|
+
require 'twilio-ruby/task_router/workflow_builder'
|
20
21
|
require 'twilio-ruby/rest/errors'
|
21
22
|
require 'twilio-ruby/rest/utils'
|
22
23
|
require 'twilio-ruby/rest/list_resource'
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Twilio
|
4
|
+
module TaskRouter
|
5
|
+
class WorkflowConfiguration
|
6
|
+
|
7
|
+
def initialize(rules, default_target)
|
8
|
+
@rules = rules
|
9
|
+
@default_target = default_target
|
10
|
+
end
|
11
|
+
|
12
|
+
def rules
|
13
|
+
@rules
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_target
|
17
|
+
@default_target
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_json
|
21
|
+
filters = Array.new
|
22
|
+
@rules.each do |rule|
|
23
|
+
filters.push(rule.to_json)
|
24
|
+
end
|
25
|
+
|
26
|
+
task_routing = {filters: filters, default_filter: @default_target.to_json}
|
27
|
+
config = {task_routing: task_routing}
|
28
|
+
config.to_json
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.parse_json(json_data)
|
32
|
+
task_routing = JSON.parse(json_data)['task_routing']
|
33
|
+
|
34
|
+
filters = task_routing['filters']
|
35
|
+
rules = Array.new
|
36
|
+
filters.each do |rule|
|
37
|
+
rules.push(Twilio::TaskRouter::WorkflowRule.parse_json(rule))
|
38
|
+
end
|
39
|
+
|
40
|
+
default_filter = Twilio::TaskRouter::WorkflowRuleTarget.parse_json(task_routing['default_filter'])
|
41
|
+
Twilio::TaskRouter::WorkflowConfiguration.new rules, default_filter
|
42
|
+
end
|
43
|
+
end
|
44
|
+
class WorkflowRule
|
45
|
+
|
46
|
+
def initialize(expression, targets, friendly_name=nil)
|
47
|
+
@expression = expression
|
48
|
+
@targets = targets
|
49
|
+
@friendly_name = friendly_name
|
50
|
+
end
|
51
|
+
|
52
|
+
def expression
|
53
|
+
@expression
|
54
|
+
end
|
55
|
+
|
56
|
+
def targets
|
57
|
+
@targets
|
58
|
+
end
|
59
|
+
|
60
|
+
def friendly_name
|
61
|
+
@friendly_name
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_json
|
65
|
+
rule = {expression: @expression}
|
66
|
+
ruleTargets = Array.new
|
67
|
+
@targets.each do |target|
|
68
|
+
ruleTargets.push(target.to_json)
|
69
|
+
end
|
70
|
+
rule['targets'] = ruleTargets
|
71
|
+
unless @friendly_name.nil?
|
72
|
+
rule['friendly_name'] = @friendly_name
|
73
|
+
end
|
74
|
+
rule
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.parse_json(rule)
|
78
|
+
targets = Array.new
|
79
|
+
rule['targets'].each do |target|
|
80
|
+
targets.push(Twilio::TaskRouter::WorkflowRuleTarget.parse_json(target))
|
81
|
+
end
|
82
|
+
Twilio::TaskRouter::WorkflowRule.new rule['expression'], targets, rule['friendly_name']
|
83
|
+
end
|
84
|
+
end
|
85
|
+
class WorkflowRuleTarget
|
86
|
+
|
87
|
+
def initialize(queue, priority=nil, timeout=nil, expression=nil)
|
88
|
+
@queue = queue
|
89
|
+
@priority = priority
|
90
|
+
@timeout = timeout
|
91
|
+
@expression = expression
|
92
|
+
end
|
93
|
+
|
94
|
+
def queue
|
95
|
+
@queue
|
96
|
+
end
|
97
|
+
|
98
|
+
def priority
|
99
|
+
@priority
|
100
|
+
end
|
101
|
+
|
102
|
+
def timeout
|
103
|
+
@timeout
|
104
|
+
end
|
105
|
+
|
106
|
+
def expression
|
107
|
+
@expression
|
108
|
+
end
|
109
|
+
|
110
|
+
def to_json
|
111
|
+
target = {queue: @queue}
|
112
|
+
unless @priority.nil?
|
113
|
+
target['priority'] = @priority
|
114
|
+
end
|
115
|
+
unless @timeout.nil?
|
116
|
+
target['timeout'] = @timeout
|
117
|
+
end
|
118
|
+
unless @expression.nil?
|
119
|
+
target['expression'] = @expression
|
120
|
+
end
|
121
|
+
target
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.parse_json(target)
|
125
|
+
Twilio::TaskRouter::WorkflowRuleTarget.new target['queue'], target['priority'], target['timeout'], target['expression']
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/lib/twilio-ruby/version.rb
CHANGED
@@ -6,4 +6,9 @@ describe Twilio::REST::TaskRouter::Reservations do
|
|
6
6
|
expect(task).to respond_to(:reservations)
|
7
7
|
expect(task.reservations.instance_variable_get('@path')).to eq('someUri/Reservations')
|
8
8
|
end
|
9
|
+
it 'gets a reservation object' do
|
10
|
+
worker = Twilio::REST::TaskRouter::Worker.new('someUri', 'someClient')
|
11
|
+
expect(worker).to respond_to(:reservations)
|
12
|
+
expect(worker.reservations.instance_variable_get('@path')).to eq('someUri/Reservations')
|
13
|
+
end
|
9
14
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twilio-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Benton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- docs/usage/validation.rst
|
130
130
|
- examples/examples.rb
|
131
131
|
- examples/print-call-log.rb
|
132
|
+
- examples/taskrouter.examples.rb
|
132
133
|
- lib/rack/twilio_webhook_authentication.rb
|
133
134
|
- lib/twilio-ruby.rb
|
134
135
|
- lib/twilio-ruby/rest/accounts.rb
|
@@ -209,6 +210,7 @@ files:
|
|
209
210
|
- lib/twilio-ruby/rest/utils.rb
|
210
211
|
- lib/twilio-ruby/task_router.rb
|
211
212
|
- lib/twilio-ruby/task_router/capability.rb
|
213
|
+
- lib/twilio-ruby/task_router/workflow_builder.rb
|
212
214
|
- lib/twilio-ruby/twiml/response.rb
|
213
215
|
- lib/twilio-ruby/util.rb
|
214
216
|
- lib/twilio-ruby/util/capability.rb
|