voicetel 2.2.10 → 2.2.14

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.
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module VoiceTel
6
+ module Models
7
+ # ------------------------------------------------------------- requests ---
8
+ # Body for POST /v2.2/orders. numbers holds up to 100 entries — plain
9
+ # 10-digit strings or OrderNumberSpec objects for per-number routing.
10
+ OrderCreateRequest = Data.define(:numbers) do
11
+ include Request
12
+ end
13
+
14
+ # Per-number routing override inside OrderCreateRequest.
15
+ OrderNumberSpec = Data.define(:number, :route) do
16
+ include Request
17
+ end
18
+
19
+ # LIDB feature for a port-in TN.
20
+ PortFeatureLidb = Data.define(:name) do
21
+ include Request
22
+ end
23
+
24
+ # Routing feature for a port-in TN.
25
+ PortFeatureRouting = Data.define(:gateway_id) do
26
+ include Request
27
+ end
28
+
29
+ # SMS feature for a port-in TN.
30
+ PortFeatureSms = Data.define(:campaign_id) do
31
+ include Request
32
+ end
33
+
34
+ # Per-TN feature configuration applied after a port completes. routing,
35
+ # lidb, and sms may be the matching feature objects or plain hashes.
36
+ PortFeature = Data.define(:number, :routing, :lidb, :sms) do
37
+ include Request
38
+ end
39
+
40
+ # Body for POST /v2.2/ports — submit a port-in order.
41
+ PortSubmitRequest = Data.define(
42
+ :did, :name, :name_type, :lc_btn, :lc_account_number, :street_number, :street,
43
+ :street_type, :city, :state, :zip, :country, :auth_person, :street_prefix,
44
+ :street_suffix, :floor, :room, :building, :unit_value, :desired_due_date, :pin,
45
+ :features
46
+ ) do
47
+ include Request
48
+ end
49
+
50
+ # ------------------------------------------------- entities & data ---
51
+ # A single TN available for assignment.
52
+ InventoryItem = Data.define(:number, :rate_center, :city, :province, :lata) do
53
+ extend Base
54
+ end
55
+
56
+ # One aggregated availability bucket. Which members are populated
57
+ # depends on the countBy of the query.
58
+ InventoryCoverageItem = Data.define(
59
+ :count, :npa, :nxx, :block, :city, :rc_abbre, :lata, :loc_state
60
+ ) do
61
+ extend Base
62
+ end
63
+
64
+ # One row in the customer port-status list.
65
+ PortSummary = Data.define(:status, :id, :pid, :foc, :created_at, :message) do
66
+ extend Base
67
+ end
68
+
69
+ # Full detail for a single port-in record.
70
+ PortDetail = Data.define(
71
+ :status, :id, :pid, :name, :email, :foc, :created_at, :numbers, :message
72
+ ) do
73
+ extend Base
74
+ end
75
+
76
+ # ------------------------------------------------------ response data ---
77
+ # Data payload from GET /v2.2/inventory.
78
+ InventorySearchData = Data.define(:numbers) do
79
+ extend Base
80
+
81
+ def self.nested
82
+ { numbers: InventoryItem }
83
+ end
84
+ end
85
+
86
+ # Data payload from GET /v2.2/inventory/coverage.
87
+ InventoryCoverageData = Data.define(:coverage) do
88
+ extend Base
89
+
90
+ def self.nested
91
+ { coverage: InventoryCoverageItem }
92
+ end
93
+ end
94
+
95
+ # One row in OrderCreateData.failed.
96
+ OrderFailedEntry = Data.define(:number, :reason) do
97
+ extend Base
98
+ end
99
+
100
+ # Data payload from POST /v2.2/orders. amount_charged is the amount
101
+ # deducted from the account balance.
102
+ OrderCreateData = Data.define(:order_id, :amount_charged, :numbers_ordered, :failed) do
103
+ extend Base
104
+
105
+ def self.nested
106
+ { failed: OrderFailedEntry }
107
+ end
108
+ end
109
+
110
+ # Data payload from GET /v2.2/ports.
111
+ PortListData = Data.define(:ports) do
112
+ extend Base
113
+
114
+ def self.nested
115
+ { ports: PortSummary }
116
+ end
117
+ end
118
+
119
+ # Data payload from GET /v2.2/ports/{id}.
120
+ PortDetailData = Data.define(:port) do
121
+ extend Base
122
+
123
+ def self.nested
124
+ { port: PortDetail }
125
+ end
126
+ end
127
+
128
+ # Data payload from POST /v2.2/ports.
129
+ PortSubmitData = Data.define(:pid, :ticket, :message, :loa_url, :port_url) do
130
+ extend Base
131
+ end
132
+
133
+ # Data payload from GET /v2.2/ports/availability/{number}.
134
+ PortAvailabilityData = Data.define(
135
+ :number, :portable, :losing_carrier, :local_routing_number, :rate_center_tier, :reason
136
+ ) do
137
+ extend Base
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module VoiceTel
6
+ module Models
7
+ # Data payload from GET /v2.2/cnam/{number}.
8
+ CnamData = Data.define(:cnam, :number) do
9
+ extend Base
10
+ end
11
+
12
+ # LRN dip result. Returned nested inside LrnLookupData for the full
13
+ # /v2.2/lrn/{n}/{ani} form.
14
+ LrnData = Data.define(
15
+ :lrn, :state, :city, :rc, :lata, :ocn, :lec, :lec_type, :jurisdiction, :local
16
+ ) do
17
+ extend Base
18
+ end
19
+
20
+ # Data payload from GET /v2.2/lrn/{number}/{ani}.
21
+ LrnLookupData = Data.define(:ani, :destination, :lrn) do
22
+ extend Base
23
+
24
+ def self.nested
25
+ { lrn: LrnData }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module VoiceTel
6
+ module Models
7
+ # ------------------------------------------------------------- requests ---
8
+ # Body for POST /v2.2/messages — send an SMS or MMS. media_urls switches
9
+ # the message type to MMS (and unlocks subject). Note the wire field
10
+ # names fromNumber / toNumber.
11
+ MessageSendRequest = Data.define(
12
+ :from_number, :to_number, :text, :subject, :media_urls
13
+ ) do
14
+ include Request
15
+ end
16
+
17
+ # Body for POST /v2.2/messaging/brands.
18
+ MessagingBrandCreateRequest = Data.define(
19
+ :messaging_brand_id, :messaging_brand_name, :messaging_brand_description
20
+ ) do
21
+ include Request
22
+ end
23
+
24
+ # Body for POST /v2.2/messaging/campaigns. Passed through to the
25
+ # campaign registration service; campaign_class_name (from the campaign
26
+ # registry) and campaign_start_date (today) are auto-populated if
27
+ # omitted.
28
+ MessagingCampaignCreateRequest = Data.define(
29
+ :messaging_brand_id, :external_campaign_id, :campaign_description,
30
+ :campaign_class_name, :campaign_start_date
31
+ ) do
32
+ include Request
33
+ end
34
+
35
+ # ------------------------------------------------------ response data ---
36
+ # Per-record fields inside MessageRecord. Shape varies by type:
37
+ # sms/mms populate source_number, destination_number, direction, rate,
38
+ # message; dlr populates source_number and destination_number only.
39
+ MessageRecordValue = Data.define(
40
+ :source_number, :destination_number, :direction, :rate, :number, :message
41
+ ) do
42
+ extend Base
43
+ end
44
+
45
+ # One row in MessageHistoryData.messages. key is a composite range key —
46
+ # for sms/mms [destinationNumber, timestamp]; for dlr
47
+ # [accountId, fromNumberWithCountryCode, timestamp] — with mixed types.
48
+ MessageRecord = Data.define(:id, :key, :value) do
49
+ extend Base
50
+
51
+ def self.nested
52
+ { value: MessageRecordValue }
53
+ end
54
+ end
55
+
56
+ # Data payload from GET /v2.2/messages.
57
+ MessageHistoryData = Data.define(:number, :type, :from_ts, :to_ts, :messages) do
58
+ extend Base
59
+
60
+ def self.nested
61
+ { messages: MessageRecord }
62
+ end
63
+ end
64
+
65
+ # Data payload from POST /v2.2/messages.
66
+ MessageSendData = Data.define(
67
+ :id, :type, :from_number, :to_number, :parts, :subject, :media_urls
68
+ ) do
69
+ extend Base
70
+ end
71
+
72
+ # Status payload for brand registration. status_code is the HTTP status
73
+ # as a string; "200" on success.
74
+ BrandRegistrationResult = Data.define(:status_code, :status) do
75
+ extend Base
76
+ end
77
+
78
+ # Data payload from POST /v2.2/messaging/brands.
79
+ MessagingBrandCreateData = Data.define(:result) do
80
+ extend Base
81
+
82
+ def self.nested
83
+ { result: BrandRegistrationResult }
84
+ end
85
+ end
86
+
87
+ # Status payload for campaign registration.
88
+ CampaignRegistrationResult = Data.define(:status_code, :status) do
89
+ extend Base
90
+ end
91
+
92
+ # Data payload from POST /v2.2/messaging/campaigns.
93
+ MessagingCampaignCreateData = Data.define(:result) do
94
+ extend Base
95
+
96
+ def self.nested
97
+ { result: CampaignRegistrationResult }
98
+ end
99
+ end
100
+
101
+ # One carrier's latest DCA decision in CampaignDca. status is one of
102
+ # ACTIVE, REJECTED, SUSPENDED, UNSUNSPENDED or TERMINATED; detail is the
103
+ # reviewer's note, as given.
104
+ CampaignDcaCarrier = Data.define(:carrier, :status, :detail, :updated_at) do
105
+ extend Base
106
+ end
107
+
108
+ # Carrier (DCA) review progress for a campaign. nil for
109
+ # CAMPAIGN_INVALID_ID statuses.
110
+ CampaignDca = Data.define(:election_complete, :elected_carriers, :carriers) do
111
+ extend Base
112
+
113
+ def self.nested
114
+ { carriers: CampaignDcaCarrier }
115
+ end
116
+ end
117
+
118
+ # A single campaign and its current numbers. status is one of
119
+ # CAMPAIGN_DCA_COMPLETE (ready: carrier review finished, numbers
120
+ # assigned), CAMPAIGN_DCA_COMPLETE_NO_NUMBERS_ASSIGNED,
121
+ # CAMPAIGN_PENDING_DCA (active at the campaign registry, but carrier
122
+ # (DCA) review is not finished yet; numbers cannot be enabled until it
123
+ # is), CAMPAIGN_DCA_REJECTED (a carrier's DCA rejected or suspended the
124
+ # campaign; see dca.carriers), CAMPAIGN_<registry status>, or
125
+ # CAMPAIGN_INVALID_ID.
126
+ CampaignStatusItem = Data.define(:id, :status, :numbers, :dca) do
127
+ extend Base
128
+
129
+ def self.nested
130
+ { dca: CampaignDca }
131
+ end
132
+ end
133
+
134
+ # Data payload from GET /v2.2/messaging/campaigns.
135
+ MessagingCampaignStatusData = Data.define(:campaigns) do
136
+ extend Base
137
+
138
+ def self.nested
139
+ { campaigns: CampaignStatusItem }
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,276 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module VoiceTel
6
+ module Models
7
+ # ------------------------------------------------------------- requests ---
8
+ # Body for POST /v2.2/numbers.
9
+ NumberAddRequest = Data.define(:number, :route) do
10
+ include Request
11
+ end
12
+
13
+ # Body for PUT /v2.2/numbers/{number}/route.
14
+ NumberRouteRequest = Data.define(:route) do
15
+ include Request
16
+ end
17
+
18
+ # Body for PUT /v2.2/numbers/{number}/cnam — inbound CNAM toggle.
19
+ NumberCnamRequest = Data.define(:enabled) do
20
+ include Request
21
+ end
22
+
23
+ # Body for PUT /v2.2/numbers/{number}/lidb — outbound caller name.
24
+ NumberLidbRequest = Data.define(:cnam, :customer_order_reference) do
25
+ include Request
26
+ end
27
+
28
+ # Body for PUT /v2.2/numbers/{number}/fax.
29
+ NumberFaxRequest = Data.define(:email) do
30
+ include Request
31
+ end
32
+
33
+ # Body for PUT /v2.2/numbers/{number}/forward.
34
+ NumberForwardRequest = Data.define(:destination) do
35
+ include Request
36
+ end
37
+
38
+ # Body for PUT /v2.2/numbers/{number}/translation.
39
+ NumberTranslationRequest = Data.define(:translation) do
40
+ include Request
41
+ end
42
+
43
+ # Body for PUT /v2.2/numbers/{number}/sms. type is "email", "webhook",
44
+ # or "sip"; resource is the matching destination.
45
+ NumberSmsRequest = Data.define(:type, :resource) do
46
+ include Request
47
+ end
48
+
49
+ # Body for PATCH /v2.2/numbers/{number}/messaging — update inbound
50
+ # and/or outbound routing. route_in must be a numbers_sms row id owned
51
+ # by the authenticated account, or 0 to detach. route_out is the
52
+ # outbound carrier id — 0 (outbound off) or the route the number is
53
+ # enabled on; to move a number to another campaign or messaging path
54
+ # use PUT /v2.2/numbers/{number}/messaging-campaign.
55
+ NumberMessagingPatchRequest = Data.define(:route_in, :route_out) do
56
+ include Request
57
+ end
58
+
59
+ # Body for PUT /v2.2/numbers/{number}/messaging-campaign.
60
+ NumberCampaignAssignRequest = Data.define(:campaign_id) do
61
+ include Request
62
+ end
63
+
64
+ # Body for PATCH /v2.2/numbers/{number} — move to another account.
65
+ NumberMoveRequest = Data.define(:account_id, :route) do
66
+ include Request
67
+ end
68
+
69
+ # Body for PATCH /v2.2/numbers/{number}/port-out-pin.
70
+ PortOutPinUpdateRequest = Data.define(:pin) do
71
+ include Request
72
+ end
73
+
74
+ # ------------------------------------------------- entities & data ---
75
+ # Per-number routing / feature state. Returned by GET /v2.2/numbers and
76
+ # GET /v2.2/numbers/{number}.
77
+ NumberDetail = Data.define(
78
+ :number, :translated, :route, :gateway, :cnam, :forward, :forward_to, :carrier,
79
+ :sms_enabled, :fax_enabled
80
+ ) do
81
+ extend Base
82
+ end
83
+
84
+ # The campaign bound to a number, with its CSP-side status.
85
+ CampaignBinding = Data.define(:id, :network, :status, :upstream_cnp_id) do
86
+ extend Base
87
+ end
88
+
89
+ # State of an asynchronous (path C) enablement. Attached to a campaign
90
+ # assignment (status "pending") or surfaced by
91
+ # GET /v2.2/numbers/{number}/messaging while provisioning is in flight.
92
+ # state is one of queued, hosting, assigning, routing, done, or failed
93
+ # (queued -> hosting -> assigning -> routing -> done, or failed — see
94
+ # message; the number keeps its previous routing until done).
95
+ MessagingEnablementJob = Data.define(
96
+ :campaign_id, :state, :message, :created_at, :updated_at
97
+ ) do
98
+ extend Base
99
+ end
100
+
101
+ # Current messaging routing state for one number.
102
+ #
103
+ # network — messaging path the number is currently on ("A", "B", or
104
+ # "C"); nil when carrier is 0 or any non-messaging carrier. pending —
105
+ # async path-C enablement in progress, nil when none.
106
+ NumberMessagingState = Data.define(
107
+ :number, :on_account, :enabled, :carrier, :route_in, :resource, :network, :campaign,
108
+ :pending
109
+ ) do
110
+ extend Base
111
+
112
+ def self.nested
113
+ { campaign: CampaignBinding, pending: MessagingEnablementJob }
114
+ end
115
+ end
116
+
117
+ # Data payload from POST /v2.2/numbers.
118
+ NumberAddData = Data.define(:number, :route) do
119
+ extend Base
120
+ end
121
+
122
+ # Data payload from PUT /v2.2/numbers/{number}/cnam.
123
+ NumberCnamData = Data.define(:number, :cnam) do
124
+ extend Base
125
+ end
126
+
127
+ # Data payload from GET/PUT /v2.2/numbers/{number}/fax.
128
+ NumberFaxData = Data.define(:number, :email) do
129
+ extend Base
130
+ end
131
+
132
+ # Data payload from PUT /v2.2/numbers/{number}/forward.
133
+ NumberForwardData = Data.define(:number, :forward_to) do
134
+ extend Base
135
+ end
136
+
137
+ # Data payload from PUT /v2.2/numbers/{number}/lidb.
138
+ NumberLidbData = Data.define(:number, :cnam, :customer_order_reference, :carrier_status) do
139
+ extend Base
140
+ end
141
+
142
+ # Data payload from PATCH /v2.2/numbers/{number}/messaging. updated is
143
+ # the subset of {routeIn, routeOut} the request changed.
144
+ NumberMessagingPatchData = Data.define(:number, :updated) do
145
+ extend Base
146
+ end
147
+
148
+ # Data payload from PATCH /v2.2/numbers/{number}.
149
+ NumberMoveData = Data.define(:number, :account_id, :route) do
150
+ extend Base
151
+ end
152
+
153
+ # Data payload from PUT /v2.2/numbers/{number}/route.
154
+ NumberRouteData = Data.define(:number, :route) do
155
+ extend Base
156
+ end
157
+
158
+ # Data payload from GET/PUT /v2.2/numbers/{number}/sms.
159
+ NumberSmsData = Data.define(:number, :type, :resource) do
160
+ extend Base
161
+ end
162
+
163
+ # Data payload from PUT /v2.2/numbers/{number}/translation.
164
+ NumberTranslationData = Data.define(:number, :translation) do
165
+ extend Base
166
+ end
167
+
168
+ # Data payload from PUT /v2.2/numbers/{number}/messaging-campaign —
169
+ # the result of binding a single number to a 10DLC campaign.
170
+ #
171
+ # status — "enabled" = bound now (path B); "already" = the number was
172
+ # already bound to this campaign (records reconciled, no new order);
173
+ # "pending" = accepted and being provisioned (path C) — poll
174
+ # GET /v2.2/numbers/{number}/messaging (pending) until state is done or
175
+ # failed.
176
+ #
177
+ # network — messaging path the campaign resolves to (from the CSP
178
+ # sharing record): "B" (assigned synchronously) or "C" (provisioned
179
+ # asynchronously, status "pending").
180
+ #
181
+ # upstream_cnp_id — CNP ID from the CSP sharing record: SB8TWLO = path
182
+ # B, BANDW = path C. (Campaigns on path A, SFL9UTQ, are being migrated
183
+ # and take no new numbers.)
184
+ #
185
+ # carrier — outbound carrier id the number routes through once enabled
186
+ # (19 = path B, 1 = path C). For a pending path-C enablement the number
187
+ # keeps its current routing until provisioning completes.
188
+ #
189
+ # already_assigned — true when the number was already bound to this
190
+ # campaign on the target messaging path; records are reconciled and no
191
+ # new network order is placed.
192
+ #
193
+ # order_id — network order id created for a path-B assignment. nil for
194
+ # path C (see job), idempotent no-ops, and assignments confirmed without
195
+ # a new order.
196
+ #
197
+ # previous_network — messaging path the number was bound to before this
198
+ # call ("A" or "B"), nil if there was no prior binding.
199
+ #
200
+ # warning — non-fatal condition detected during the assignment (for
201
+ # example a stale registration on the other messaging path whose removal
202
+ # has been requested).
203
+ #
204
+ # message — human-readable note for a pending enablement.
205
+ #
206
+ # job — async path-C enablement job, nil otherwise.
207
+ NumberMessagingCampaignAssignData = Data.define(
208
+ :number, :campaign_id, :status, :network, :upstream_cnp_id, :carrier,
209
+ :already_assigned, :order_id, :previous_network, :previous_network_cleared,
210
+ :warning, :message, :job
211
+ ) do
212
+ extend Base
213
+
214
+ def self.nested
215
+ { job: MessagingEnablementJob }
216
+ end
217
+ end
218
+
219
+ # Data payload from DELETE /v2.2/numbers/{number}/messaging-campaign.
220
+ NumberMessagingCampaignUnassignData = Data.define(
221
+ :number, :campaign_id, :network, :upstream_cnp_id, :unassigned
222
+ ) do
223
+ extend Base
224
+ end
225
+
226
+ # One row in the failure list returned by bulk unassign.
227
+ CampaignUnassignFailure = Data.define(:number, :reason) do
228
+ extend Base
229
+ end
230
+
231
+ # Data payload from DELETE /v2.2/numbers/messaging-campaign (bulk).
232
+ NumbersMessagingCampaignUnassignData = Data.define(
233
+ :campaign_id, :network, :upstream_cnp_id, :unassigned_numbers, :failed
234
+ ) do
235
+ extend Base
236
+
237
+ def self.nested
238
+ { failed: CampaignUnassignFailure }
239
+ end
240
+ end
241
+
242
+ # Data payload from GET /v2.2/numbers.
243
+ NumbersListData = Data.define(:numbers) do
244
+ extend Base
245
+
246
+ def self.nested
247
+ { numbers: NumberDetail }
248
+ end
249
+ end
250
+
251
+ # Data payload from GET /v2.2/numbers/messaging.
252
+ NumbersMessagingListData = Data.define(:numbers) do
253
+ extend Base
254
+
255
+ def self.nested
256
+ { numbers: NumberMessagingState }
257
+ end
258
+ end
259
+
260
+ # Data payload from PATCH /v2.2/numbers/{number}/port-out-pin.
261
+ #
262
+ # The call is idempotent: a PIN is locked for 30 days once set, so a
263
+ # number that already has one returns it unchanged with changed=false;
264
+ # both cases return HTTP 200.
265
+ #
266
+ # number — ten-digit telephone number whose PIN is reported.
267
+ # port_out_pin — the port-out PIN now on file for this number (the value
268
+ # just set, or the existing value if the number was already locked).
269
+ # changed — true if this request set the PIN; false if the number
270
+ # already had one, which is locked for 30 days once set and is returned
271
+ # unchanged.
272
+ PortOutPinUpdateData = Data.define(:number, :port_out_pin, :changed) do
273
+ extend Base
274
+ end
275
+ end
276
+ end