telerivet 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/cacert.pem +3895 -0
- data/lib/telerivet/apicursor.rb +156 -0
- data/lib/telerivet/contact.rb +403 -0
- data/lib/telerivet/contactservicestate.rb +108 -0
- data/lib/telerivet/datarow.rb +91 -0
- data/lib/telerivet/datatable.rb +191 -0
- data/lib/telerivet/entity.rb +124 -0
- data/lib/telerivet/group.rb +181 -0
- data/lib/telerivet/label.rb +134 -0
- data/lib/telerivet/message.rb +300 -0
- data/lib/telerivet/mobilemoneyreceipt.rb +187 -0
- data/lib/telerivet/phone.rb +229 -0
- data/lib/telerivet/project.rb +919 -0
- data/lib/telerivet/scheduledmessage.rb +185 -0
- data/lib/telerivet/service.rb +296 -0
- data/lib/telerivet.rb +193 -0
- metadata +59 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
|
2
|
+
module Telerivet
|
3
|
+
|
4
|
+
#
|
5
|
+
# Represents a row in a custom data table.
|
6
|
+
#
|
7
|
+
# For example, each response to a poll is stored as one row in a data table.
|
8
|
+
# If a poll has a question with ID 'q1', the verbatim response to that question would be
|
9
|
+
# stored in row.vars.q1, and the response code would be stored in row.vars.q1_code.
|
10
|
+
#
|
11
|
+
# Each custom variable name within a data row corresponds to a different
|
12
|
+
# column/field of the data table.
|
13
|
+
#
|
14
|
+
# Fields:
|
15
|
+
#
|
16
|
+
# - id (string, max 34 characters)
|
17
|
+
# * ID of the data row
|
18
|
+
# * Read-only
|
19
|
+
#
|
20
|
+
# - contact_id
|
21
|
+
# * ID of the contact this row is associated with (or null if not associated with any
|
22
|
+
# contact)
|
23
|
+
# * Updatable via API
|
24
|
+
#
|
25
|
+
# - from_number (string)
|
26
|
+
# * Phone number that this row is associated with (or null if not associated with any
|
27
|
+
# phone number)
|
28
|
+
# * Updatable via API
|
29
|
+
#
|
30
|
+
# - vars (Hash)
|
31
|
+
# * Custom variables stored for this data row
|
32
|
+
# * Updatable via API
|
33
|
+
#
|
34
|
+
# - table_id
|
35
|
+
# * ID of the table this data row belongs to
|
36
|
+
# * Read-only
|
37
|
+
#
|
38
|
+
# - project_id
|
39
|
+
# * ID of the project this data row belongs to
|
40
|
+
# * Read-only
|
41
|
+
#
|
42
|
+
class DataRow < Entity
|
43
|
+
#
|
44
|
+
# Saves any fields or custom variables that have changed for this data row.
|
45
|
+
#
|
46
|
+
def save()
|
47
|
+
super
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Deletes this data row.
|
52
|
+
#
|
53
|
+
def delete()
|
54
|
+
@api.do_request("DELETE", get_base_api_path())
|
55
|
+
end
|
56
|
+
|
57
|
+
def id
|
58
|
+
get('id')
|
59
|
+
end
|
60
|
+
|
61
|
+
def contact_id
|
62
|
+
get('contact_id')
|
63
|
+
end
|
64
|
+
|
65
|
+
def contact_id=(value)
|
66
|
+
set('contact_id', value)
|
67
|
+
end
|
68
|
+
|
69
|
+
def from_number
|
70
|
+
get('from_number')
|
71
|
+
end
|
72
|
+
|
73
|
+
def from_number=(value)
|
74
|
+
set('from_number', value)
|
75
|
+
end
|
76
|
+
|
77
|
+
def table_id
|
78
|
+
get('table_id')
|
79
|
+
end
|
80
|
+
|
81
|
+
def project_id
|
82
|
+
get('project_id')
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_base_api_path()
|
86
|
+
"/projects/#{get('project_id')}/tables/#{get('table_id')}/rows/#{get('id')}"
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
|
2
|
+
module Telerivet
|
3
|
+
|
4
|
+
#
|
5
|
+
# Represents a custom data table that can store arbitrary rows.
|
6
|
+
#
|
7
|
+
# For example, poll services use data tables to store a row for each response.
|
8
|
+
#
|
9
|
+
#
|
10
|
+
# DataTables are schemaless -- each row simply stores custom variables. Each
|
11
|
+
# variable name is equivalent to a different "column" of the data table.
|
12
|
+
# Telerivet refers to these variables/columns as "fields", and automatically
|
13
|
+
# creates a new field for each variable name used in a row of the table.
|
14
|
+
#
|
15
|
+
# Fields:
|
16
|
+
#
|
17
|
+
# - id (string, max 34 characters)
|
18
|
+
# * ID of the data table
|
19
|
+
# * Read-only
|
20
|
+
#
|
21
|
+
# - name
|
22
|
+
# * Name of the data table
|
23
|
+
# * Updatable via API
|
24
|
+
#
|
25
|
+
# - num_rows (int)
|
26
|
+
# * Number of rows in the table
|
27
|
+
# * Read-only
|
28
|
+
#
|
29
|
+
# - vars (Hash)
|
30
|
+
# * Custom variables stored for this data table
|
31
|
+
# * Updatable via API
|
32
|
+
#
|
33
|
+
# - project_id
|
34
|
+
# * ID of the project this data table belongs to
|
35
|
+
# * Read-only
|
36
|
+
#
|
37
|
+
class DataTable < Entity
|
38
|
+
#
|
39
|
+
# Queries rows in this data table.
|
40
|
+
#
|
41
|
+
# Arguments:
|
42
|
+
# - options (Hash)
|
43
|
+
#
|
44
|
+
# - time_created (UNIX timestamp)
|
45
|
+
# * Filter data rows by the time they were created
|
46
|
+
# * Allowed modifiers: time_created[ne], time_created[min], time_created[max]
|
47
|
+
#
|
48
|
+
# - vars (Hash)
|
49
|
+
# * Filter data rows by value of a custom variable (e.g. vars[q1], vars[foo], etc.)
|
50
|
+
# * Allowed modifiers: vars[foo][exists], vars[foo][ne], vars[foo][prefix],
|
51
|
+
# vars[foo][not_prefix], vars[foo][gte], vars[foo][gt], vars[foo][lt], vars[foo][lte],
|
52
|
+
# vars[foo][min], vars[foo][max]
|
53
|
+
#
|
54
|
+
# - sort
|
55
|
+
# * Sort the results based on a field
|
56
|
+
# * Allowed values: default
|
57
|
+
# * Default: default
|
58
|
+
#
|
59
|
+
# - sort_dir
|
60
|
+
# * Sort the results in ascending or descending order
|
61
|
+
# * Allowed values: asc, desc
|
62
|
+
# * Default: asc
|
63
|
+
#
|
64
|
+
# - page_size (int)
|
65
|
+
# * Number of results returned per page (max 200)
|
66
|
+
# * Default: 50
|
67
|
+
#
|
68
|
+
# - offset (int)
|
69
|
+
# * Number of items to skip from beginning of result set
|
70
|
+
# * Default: 0
|
71
|
+
#
|
72
|
+
# Returns:
|
73
|
+
# Telerivet::APICursor (of Telerivet::DataRow)
|
74
|
+
#
|
75
|
+
def query_rows(options = nil)
|
76
|
+
require_relative 'datarow'
|
77
|
+
@api.cursor(DataRow, get_base_api_path() + "/rows", options)
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Adds a new row to this data table.
|
82
|
+
#
|
83
|
+
# Arguments:
|
84
|
+
# - options (Hash)
|
85
|
+
#
|
86
|
+
# - contact_id
|
87
|
+
# * ID of the contact that this row is associated with (if applicable)
|
88
|
+
#
|
89
|
+
# - from_number (string)
|
90
|
+
# * Phone number that this row is associated with (if applicable)
|
91
|
+
#
|
92
|
+
# - vars
|
93
|
+
# * Custom variables and values to set for this data row
|
94
|
+
#
|
95
|
+
# Returns:
|
96
|
+
# Telerivet::DataRow
|
97
|
+
#
|
98
|
+
def create_row(options = nil)
|
99
|
+
require_relative 'datarow'
|
100
|
+
DataRow.new(@api, @api.do_request("POST", get_base_api_path() + "/rows", options))
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# Retrieves the row in the given table with the given ID.
|
105
|
+
#
|
106
|
+
# Note: This does not make any API requests until you access a property of the DataRow.
|
107
|
+
#
|
108
|
+
# Arguments:
|
109
|
+
# - id
|
110
|
+
# * ID of the row
|
111
|
+
# * Required
|
112
|
+
#
|
113
|
+
# Returns:
|
114
|
+
# Telerivet::DataRow
|
115
|
+
#
|
116
|
+
def get_row_by_id(id)
|
117
|
+
require_relative 'datarow'
|
118
|
+
return DataRow.new(@api, {'project_id' => self.project_id, 'table_id' => self.id, 'id' => id}, false)
|
119
|
+
end
|
120
|
+
|
121
|
+
#
|
122
|
+
# Gets a list of all fields (columns) defined for this data table. The return value is an
|
123
|
+
# array of objects with the properties 'name' and 'variable'. (Fields are automatically
|
124
|
+
# created any time a DataRow's 'vars' property is updated.)
|
125
|
+
#
|
126
|
+
# Returns:
|
127
|
+
# array
|
128
|
+
#
|
129
|
+
def get_fields()
|
130
|
+
return @api.do_request("GET", get_base_api_path() + "/fields")
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# Returns the number of rows for each value of a given variable. This can be used to get the
|
135
|
+
# total number of responses for each choice in a poll, without making a separate query for
|
136
|
+
# each response choice. The return value is an object mapping values to row counts, e.g.
|
137
|
+
# `{"yes":7,"no":3}`
|
138
|
+
#
|
139
|
+
# Arguments:
|
140
|
+
# - variable
|
141
|
+
# * Variable of field to count by.
|
142
|
+
# * Required
|
143
|
+
#
|
144
|
+
# Returns:
|
145
|
+
# object
|
146
|
+
#
|
147
|
+
def count_rows_by_value(variable)
|
148
|
+
return @api.do_request("GET", get_base_api_path() + "/count_rows_by_value", {'variable' => variable})
|
149
|
+
end
|
150
|
+
|
151
|
+
#
|
152
|
+
# Saves any fields that have changed for this data table.
|
153
|
+
#
|
154
|
+
def save()
|
155
|
+
super
|
156
|
+
end
|
157
|
+
|
158
|
+
#
|
159
|
+
# Permanently deletes the given data table, including all its rows
|
160
|
+
#
|
161
|
+
def delete()
|
162
|
+
@api.do_request("DELETE", get_base_api_path())
|
163
|
+
end
|
164
|
+
|
165
|
+
def id
|
166
|
+
get('id')
|
167
|
+
end
|
168
|
+
|
169
|
+
def name
|
170
|
+
get('name')
|
171
|
+
end
|
172
|
+
|
173
|
+
def name=(value)
|
174
|
+
set('name', value)
|
175
|
+
end
|
176
|
+
|
177
|
+
def num_rows
|
178
|
+
get('num_rows')
|
179
|
+
end
|
180
|
+
|
181
|
+
def project_id
|
182
|
+
get('project_id')
|
183
|
+
end
|
184
|
+
|
185
|
+
def get_base_api_path()
|
186
|
+
"/projects/#{get('project_id')}/tables/#{get('id')}"
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module Telerivet
|
2
|
+
|
3
|
+
class Entity
|
4
|
+
|
5
|
+
def initialize(api, data, is_loaded = true)
|
6
|
+
@api = api
|
7
|
+
@vars = nil
|
8
|
+
@dirty = {}
|
9
|
+
@data = {}
|
10
|
+
set_data(data)
|
11
|
+
@is_loaded = is_loaded
|
12
|
+
end
|
13
|
+
|
14
|
+
def set_data(data)
|
15
|
+
@data = data
|
16
|
+
|
17
|
+
if data.has_key?('vars')
|
18
|
+
@vars = CustomVars.new(data['vars'])
|
19
|
+
else
|
20
|
+
@vars = CustomVars.new({})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_data()
|
25
|
+
if !@is_loaded
|
26
|
+
@is_loaded = true
|
27
|
+
set_data(@api.do_request('GET', get_base_api_path()))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def vars
|
32
|
+
@vars
|
33
|
+
end
|
34
|
+
|
35
|
+
def get(name)
|
36
|
+
if @data.has_key?(name)
|
37
|
+
return @data[name]
|
38
|
+
elsif @is_loaded
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
|
42
|
+
load_data()
|
43
|
+
|
44
|
+
return @data[name]
|
45
|
+
end
|
46
|
+
|
47
|
+
def set(name, value)
|
48
|
+
if !@is_loaded
|
49
|
+
loadData()
|
50
|
+
end
|
51
|
+
|
52
|
+
@data[name] = value
|
53
|
+
@dirty[name] = value
|
54
|
+
end
|
55
|
+
|
56
|
+
def save()
|
57
|
+
dirty_props = @dirty
|
58
|
+
|
59
|
+
if @vars != nil
|
60
|
+
dirty_vars = @vars.get_dirty_variables()
|
61
|
+
@dirty['vars'] = dirty_vars if dirty_vars.length() > 0
|
62
|
+
end
|
63
|
+
|
64
|
+
@api.do_request('POST', get_base_api_path(), @dirty)
|
65
|
+
@dirty = {}
|
66
|
+
|
67
|
+
@vars.clear_dirty_variables() if @vars != nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_s()
|
71
|
+
res = self.class.name
|
72
|
+
|
73
|
+
if not @is_loaded
|
74
|
+
res += " (not loaded)"
|
75
|
+
end
|
76
|
+
|
77
|
+
res += " JSON: " + JSON.dump(@data)
|
78
|
+
|
79
|
+
return res
|
80
|
+
end
|
81
|
+
|
82
|
+
def get_base_api_path()
|
83
|
+
abstract
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class CustomVars
|
88
|
+
def initialize(vars)
|
89
|
+
@vars = vars
|
90
|
+
@dirty = {}
|
91
|
+
end
|
92
|
+
|
93
|
+
def all()
|
94
|
+
@vars
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_dirty_variables()
|
98
|
+
@dirty
|
99
|
+
end
|
100
|
+
|
101
|
+
def clear_dirty_variables()
|
102
|
+
@dirty = {}
|
103
|
+
end
|
104
|
+
|
105
|
+
def get(name)
|
106
|
+
@vars[name]
|
107
|
+
end
|
108
|
+
|
109
|
+
def set(name, value)
|
110
|
+
@vars[name] = value
|
111
|
+
@dirty[name] = value
|
112
|
+
end
|
113
|
+
|
114
|
+
def method_missing(m, *args)
|
115
|
+
name = m.to_s
|
116
|
+
if name.end_with?('=')
|
117
|
+
set(name.chop, args[0])
|
118
|
+
else
|
119
|
+
get(name)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
|
2
|
+
module Telerivet
|
3
|
+
|
4
|
+
#
|
5
|
+
# Represents a group used to organize contacts within Telerivet.
|
6
|
+
#
|
7
|
+
# Fields:
|
8
|
+
#
|
9
|
+
# - id (string, max 34 characters)
|
10
|
+
# * ID of the group
|
11
|
+
# * Read-only
|
12
|
+
#
|
13
|
+
# - name
|
14
|
+
# * Name of the group
|
15
|
+
# * Updatable via API
|
16
|
+
#
|
17
|
+
# - num_members (int)
|
18
|
+
# * Number of contacts in the group
|
19
|
+
# * Read-only
|
20
|
+
#
|
21
|
+
# - time_created (UNIX timestamp)
|
22
|
+
# * Time the group was created in Telerivet
|
23
|
+
# * Read-only
|
24
|
+
#
|
25
|
+
# - vars (Hash)
|
26
|
+
# * Custom variables stored for this group
|
27
|
+
# * Updatable via API
|
28
|
+
#
|
29
|
+
# - project_id
|
30
|
+
# * ID of the project this group belongs to
|
31
|
+
# * Read-only
|
32
|
+
#
|
33
|
+
class Group < Entity
|
34
|
+
#
|
35
|
+
# Queries contacts that are members of the given group.
|
36
|
+
#
|
37
|
+
# Arguments:
|
38
|
+
# - options (Hash)
|
39
|
+
#
|
40
|
+
# - name
|
41
|
+
# * Filter contacts by name
|
42
|
+
# * Allowed modifiers: name[ne], name[prefix], name[not_prefix], name[gte], name[gt],
|
43
|
+
# name[lt], name[lte]
|
44
|
+
#
|
45
|
+
# - phone_number
|
46
|
+
# * Filter contacts by phone number
|
47
|
+
# * Allowed modifiers: phone_number[ne], phone_number[prefix],
|
48
|
+
# phone_number[not_prefix], phone_number[gte], phone_number[gt], phone_number[lt],
|
49
|
+
# phone_number[lte]
|
50
|
+
#
|
51
|
+
# - time_created (UNIX timestamp)
|
52
|
+
# * Filter contacts by time created
|
53
|
+
# * Allowed modifiers: time_created[ne], time_created[min], time_created[max]
|
54
|
+
#
|
55
|
+
# - last_message_time (UNIX timestamp)
|
56
|
+
# * Filter contacts by last time a message was sent or received
|
57
|
+
# * Allowed modifiers: last_message_time[exists], last_message_time[ne],
|
58
|
+
# last_message_time[min], last_message_time[max]
|
59
|
+
#
|
60
|
+
# - vars (Hash)
|
61
|
+
# * Filter contacts by value of a custom variable (e.g. vars[email], vars[foo], etc.)
|
62
|
+
# * Allowed modifiers: vars[foo][exists], vars[foo][ne], vars[foo][prefix],
|
63
|
+
# vars[foo][not_prefix], vars[foo][gte], vars[foo][gt], vars[foo][lt], vars[foo][lte],
|
64
|
+
# vars[foo][min], vars[foo][max]
|
65
|
+
#
|
66
|
+
# - sort
|
67
|
+
# * Sort the results based on a field
|
68
|
+
# * Allowed values: default, name, phone_number, last_message_time
|
69
|
+
# * Default: default
|
70
|
+
#
|
71
|
+
# - sort_dir
|
72
|
+
# * Sort the results in ascending or descending order
|
73
|
+
# * Allowed values: asc, desc
|
74
|
+
# * Default: asc
|
75
|
+
#
|
76
|
+
# - page_size (int)
|
77
|
+
# * Number of results returned per page (max 200)
|
78
|
+
# * Default: 50
|
79
|
+
#
|
80
|
+
# - offset (int)
|
81
|
+
# * Number of items to skip from beginning of result set
|
82
|
+
# * Default: 0
|
83
|
+
#
|
84
|
+
# Returns:
|
85
|
+
# Telerivet::APICursor (of Telerivet::Contact)
|
86
|
+
#
|
87
|
+
def query_contacts(options = nil)
|
88
|
+
require_relative 'contact'
|
89
|
+
@api.cursor(Contact, get_base_api_path() + "/contacts", options)
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Queries scheduled messages to the given group.
|
94
|
+
#
|
95
|
+
# Arguments:
|
96
|
+
# - options (Hash)
|
97
|
+
#
|
98
|
+
# - message_type
|
99
|
+
# * Filter scheduled messages by message_type
|
100
|
+
# * Allowed values: sms, mms, ussd, call
|
101
|
+
#
|
102
|
+
# - time_created (UNIX timestamp)
|
103
|
+
# * Filter scheduled messages by time_created
|
104
|
+
# * Allowed modifiers: time_created[ne], time_created[min], time_created[max]
|
105
|
+
#
|
106
|
+
# - next_time (UNIX timestamp)
|
107
|
+
# * Filter scheduled messages by next_time
|
108
|
+
# * Allowed modifiers: next_time[exists], next_time[ne], next_time[min],
|
109
|
+
# next_time[max]
|
110
|
+
#
|
111
|
+
# - sort
|
112
|
+
# * Sort the results based on a field
|
113
|
+
# * Allowed values: default, name
|
114
|
+
# * Default: default
|
115
|
+
#
|
116
|
+
# - sort_dir
|
117
|
+
# * Sort the results in ascending or descending order
|
118
|
+
# * Allowed values: asc, desc
|
119
|
+
# * Default: asc
|
120
|
+
#
|
121
|
+
# - page_size (int)
|
122
|
+
# * Number of results returned per page (max 200)
|
123
|
+
# * Default: 50
|
124
|
+
#
|
125
|
+
# - offset (int)
|
126
|
+
# * Number of items to skip from beginning of result set
|
127
|
+
# * Default: 0
|
128
|
+
#
|
129
|
+
# Returns:
|
130
|
+
# Telerivet::APICursor (of Telerivet::ScheduledMessage)
|
131
|
+
#
|
132
|
+
def query_scheduled_messages(options = nil)
|
133
|
+
require_relative 'scheduledmessage'
|
134
|
+
@api.cursor(ScheduledMessage, get_base_api_path() + "/scheduled", options)
|
135
|
+
end
|
136
|
+
|
137
|
+
#
|
138
|
+
# Saves any fields that have changed for this group.
|
139
|
+
#
|
140
|
+
def save()
|
141
|
+
super
|
142
|
+
end
|
143
|
+
|
144
|
+
#
|
145
|
+
# Deletes this group (Note: no contacts are deleted.)
|
146
|
+
#
|
147
|
+
def delete()
|
148
|
+
@api.do_request("DELETE", get_base_api_path())
|
149
|
+
end
|
150
|
+
|
151
|
+
def id
|
152
|
+
get('id')
|
153
|
+
end
|
154
|
+
|
155
|
+
def name
|
156
|
+
get('name')
|
157
|
+
end
|
158
|
+
|
159
|
+
def name=(value)
|
160
|
+
set('name', value)
|
161
|
+
end
|
162
|
+
|
163
|
+
def num_members
|
164
|
+
get('num_members')
|
165
|
+
end
|
166
|
+
|
167
|
+
def time_created
|
168
|
+
get('time_created')
|
169
|
+
end
|
170
|
+
|
171
|
+
def project_id
|
172
|
+
get('project_id')
|
173
|
+
end
|
174
|
+
|
175
|
+
def get_base_api_path()
|
176
|
+
"/projects/#{get('project_id')}/groups/#{get('id')}"
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
|
2
|
+
module Telerivet
|
3
|
+
|
4
|
+
#
|
5
|
+
# Represents a label used to organize messages within Telerivet.
|
6
|
+
#
|
7
|
+
# Fields:
|
8
|
+
#
|
9
|
+
# - id (string, max 34 characters)
|
10
|
+
# * ID of the label
|
11
|
+
# * Read-only
|
12
|
+
#
|
13
|
+
# - name
|
14
|
+
# * Name of the label
|
15
|
+
# * Updatable via API
|
16
|
+
#
|
17
|
+
# - time_created (UNIX timestamp)
|
18
|
+
# * Time the label was created in Telerivet
|
19
|
+
# * Read-only
|
20
|
+
#
|
21
|
+
# - vars (Hash)
|
22
|
+
# * Custom variables stored for this label
|
23
|
+
# * Updatable via API
|
24
|
+
#
|
25
|
+
# - project_id
|
26
|
+
# * ID of the project this label belongs to
|
27
|
+
# * Read-only
|
28
|
+
#
|
29
|
+
class Label < Entity
|
30
|
+
#
|
31
|
+
# Queries messages with the given label.
|
32
|
+
#
|
33
|
+
# Arguments:
|
34
|
+
# - options (Hash)
|
35
|
+
#
|
36
|
+
# - direction
|
37
|
+
# * Filter messages by direction
|
38
|
+
# * Allowed values: incoming, outgoing
|
39
|
+
#
|
40
|
+
# - message_type
|
41
|
+
# * Filter messages by message_type
|
42
|
+
# * Allowed values: sms, mms, ussd, call
|
43
|
+
#
|
44
|
+
# - source
|
45
|
+
# * Filter messages by source
|
46
|
+
# * Allowed values: phone, provider, web, api, service, webhook, scheduled
|
47
|
+
#
|
48
|
+
# - starred (bool)
|
49
|
+
# * Filter messages by starred/unstarred
|
50
|
+
#
|
51
|
+
# - status
|
52
|
+
# * Filter messages by status
|
53
|
+
# * Allowed values: ignored, processing, received, sent, queued, failed,
|
54
|
+
# failed_queued, cancelled, delivered, not_delivered
|
55
|
+
#
|
56
|
+
# - time_created[min] (UNIX timestamp)
|
57
|
+
# * Filter messages created on or after a particular time
|
58
|
+
#
|
59
|
+
# - time_created[max] (UNIX timestamp)
|
60
|
+
# * Filter messages created before a particular time
|
61
|
+
#
|
62
|
+
# - contact_id
|
63
|
+
# * ID of the contact who sent/received the message
|
64
|
+
#
|
65
|
+
# - phone_id
|
66
|
+
# * ID of the phone that sent/received the message
|
67
|
+
#
|
68
|
+
# - sort
|
69
|
+
# * Sort the results based on a field
|
70
|
+
# * Allowed values: default
|
71
|
+
# * Default: default
|
72
|
+
#
|
73
|
+
# - sort_dir
|
74
|
+
# * Sort the results in ascending or descending order
|
75
|
+
# * Allowed values: asc, desc
|
76
|
+
# * Default: asc
|
77
|
+
#
|
78
|
+
# - page_size (int)
|
79
|
+
# * Number of results returned per page (max 200)
|
80
|
+
# * Default: 50
|
81
|
+
#
|
82
|
+
# - offset (int)
|
83
|
+
# * Number of items to skip from beginning of result set
|
84
|
+
# * Default: 0
|
85
|
+
#
|
86
|
+
# Returns:
|
87
|
+
# Telerivet::APICursor (of Telerivet::Message)
|
88
|
+
#
|
89
|
+
def query_messages(options = nil)
|
90
|
+
require_relative 'message'
|
91
|
+
@api.cursor(Message, get_base_api_path() + "/messages", options)
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# Saves any fields that have changed for the label.
|
96
|
+
#
|
97
|
+
def save()
|
98
|
+
super
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# Deletes the given label (Note: no messages are deleted.)
|
103
|
+
#
|
104
|
+
def delete()
|
105
|
+
@api.do_request("DELETE", get_base_api_path())
|
106
|
+
end
|
107
|
+
|
108
|
+
def id
|
109
|
+
get('id')
|
110
|
+
end
|
111
|
+
|
112
|
+
def name
|
113
|
+
get('name')
|
114
|
+
end
|
115
|
+
|
116
|
+
def name=(value)
|
117
|
+
set('name', value)
|
118
|
+
end
|
119
|
+
|
120
|
+
def time_created
|
121
|
+
get('time_created')
|
122
|
+
end
|
123
|
+
|
124
|
+
def project_id
|
125
|
+
get('project_id')
|
126
|
+
end
|
127
|
+
|
128
|
+
def get_base_api_path()
|
129
|
+
"/projects/#{get('project_id')}/labels/#{get('id')}"
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|