rcs 2.0.0.pre.rc.5 → 2.0.0
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 +4 -4
- data/lib/rcs/brands/client.rb +36 -24
- data/lib/rcs/campaigns/dlc/client.rb +36 -26
- data/lib/rcs/campaigns/rcs/client.rb +26 -22
- data/lib/rcs/campaigns/rcs/types/rcs_autofill_response.rb +6 -6
- data/lib/rcs/campaigns/toll_free/client.rb +32 -26
- data/lib/rcs/campaigns/toll_free/types/toll_free_autofill_response.rb +6 -6
- data/lib/rcs/contacts/client.rb +10 -8
- data/lib/rcs/conversations/client.rb +144 -16
- data/lib/rcs/conversations/types/conversations_list_messages_request_direction.rb +12 -0
- data/lib/rcs/conversations/types/conversations_list_messages_request_sort_order.rb +12 -0
- data/lib/rcs/conversations/types/conversations_list_messages_request_status.rb +17 -0
- data/lib/rcs/conversations/types/conversations_list_messages_request_type.rb +13 -0
- data/lib/rcs/messages/client.rb +12 -29
- data/lib/rcs/messages/rcs/client.rb +1 -1
- data/lib/rcs/phone_numbers/campaign/client.rb +20 -6
- data/lib/rcs/phone_numbers/client.rb +0 -14
- data/lib/rcs/phone_numbers/webhook/client.rb +12 -10
- data/lib/rcs/rcs/client.rb +32 -18
- data/lib/rcs/status/get/client.rb +32 -16
- data/lib/rcs/tools/contact_card/client.rb +18 -8
- data/lib/rcs/tools/file/client.rb +92 -2
- data/lib/rcs/tools/file/types/upload_file_options.rb +21 -3
- data/lib/rcs/tools/url/client.rb +4 -2
- data/lib/rcs/types/attach_webhook_by_id_params.rb +5 -5
- data/lib/rcs/types/attach_webhook_response_webhook.rb +5 -3
- data/lib/rcs/types/autofill_campaign_params.rb +15 -3
- data/lib/rcs/types/autofill_dlc_campaign_response.rb +10 -6
- data/lib/rcs/types/autofill_dlc_response_keywords.rb +8 -10
- data/lib/rcs/types/autofill_dlc_response_keywords_help.rb +3 -3
- data/lib/rcs/types/autofill_dlc_response_keywords_opt_in.rb +6 -4
- data/lib/rcs/types/autofill_dlc_response_keywords_opt_out.rb +3 -3
- data/lib/rcs/types/autofill_dlc_response_options.rb +12 -12
- data/lib/rcs/types/brand_status.rb +5 -3
- data/lib/rcs/types/{inbound_button.rb → button_clicked.rb} +7 -7
- data/lib/rcs/types/button_clicked_data.rb +80 -0
- data/lib/rcs/types/button_clicked_data_button.rb +118 -0
- data/lib/rcs/types/{click_action_data.rb → button_clicked_data_button_raw.rb} +10 -8
- data/lib/rcs/types/button_clicked_data_button_type.rb +15 -0
- data/lib/rcs/types/campaign_query.rb +10 -2
- data/lib/rcs/types/contact.rb +5 -3
- data/lib/rcs/types/contact_id.rb +5 -3
- data/lib/rcs/types/conversation.rb +16 -8
- data/lib/rcs/types/conversation_by_id_params.rb +7 -3
- data/lib/rcs/types/conversation_contact.rb +5 -3
- data/lib/rcs/types/conversation_list.rb +50 -28
- data/lib/rcs/types/create_url_options.rb +4 -2
- data/lib/rcs/types/detached_webhook_info.rb +5 -3
- data/lib/rcs/types/dlc_campaign_status.rb +5 -3
- data/lib/rcs/types/dlc_campaign_with_extended_brand_and_status.rb +21 -19
- data/lib/rcs/types/dlc_with_extended_brand_and_status_keywords_help.rb +3 -3
- data/lib/rcs/types/dlc_with_extended_brand_and_status_keywords_opt_in.rb +6 -4
- data/lib/rcs/types/dlc_with_extended_brand_and_status_keywords_opt_out.rb +6 -4
- data/lib/rcs/types/extended_brand.rb +25 -13
- data/lib/rcs/types/extended_brand_with_vetting.rb +25 -13
- data/lib/rcs/types/extended_rcs_campaign.rb +25 -14
- data/lib/rcs/types/link_click_event.rb +1 -17
- data/lib/rcs/types/message.rb +5 -3
- data/lib/rcs/types/message_content.rb +4 -4
- data/lib/rcs/types/message_event.rb +143 -0
- data/lib/rcs/types/message_event_content.rb +127 -0
- data/lib/rcs/types/message_event_conversation.rb +82 -0
- data/lib/rcs/types/message_event_direction.rb +11 -0
- data/lib/rcs/types/message_event_mms_content.rb +94 -0
- data/lib/rcs/types/message_event_rcs_button_data.rb +104 -0
- data/lib/rcs/types/message_event_rcs_cards_content.rb +99 -0
- data/lib/rcs/types/message_event_rcs_cards_content_cards_item.rb +94 -0
- data/lib/rcs/types/message_event_rcs_location_data.rb +91 -0
- data/lib/rcs/types/message_event_rcs_media_content.rb +94 -0
- data/lib/rcs/types/message_event_rcs_text_content.rb +92 -0
- data/lib/rcs/types/message_event_sms_content.rb +81 -0
- data/lib/rcs/types/{retrieved_conversations.rb → message_list.rb} +26 -25
- data/lib/rcs/types/message_with_reaction.rb +197 -0
- data/lib/rcs/types/message_with_reaction_direction.rb +11 -0
- data/lib/rcs/types/{error_response.rb → not_found_error_body.rb} +7 -7
- data/lib/rcs/types/phone_number_campaign_attach_phone_numbers_item_campaign.rb +7 -3
- data/lib/rcs/types/phone_number_campaign_detach_phone_numbers_item_campaign.rb +7 -3
- data/lib/rcs/types/pinnacle_file_upload_metadata.rb +18 -2
- data/lib/rcs/types/profile_status_enum.rb +4 -4
- data/lib/rcs/types/rcs_base_options.rb +12 -1
- data/lib/rcs/types/rcs_button_call.rb +11 -2
- data/lib/rcs/types/rcs_button_open_url.rb +11 -2
- data/lib/rcs/types/rcs_button_request_user_location.rb +15 -3
- data/lib/rcs/types/rcs_button_schedule_event.rb +9 -1
- data/lib/rcs/types/rcs_button_send_location.rb +11 -2
- data/lib/rcs/types/rcs_button_trigger.rb +8 -6
- data/lib/rcs/types/rcs_campaign.rb +3 -3
- data/lib/rcs/types/rcs_campaign_schema_extra_agent.rb +8 -8
- data/lib/rcs/types/rcs_campaign_status.rb +5 -3
- data/lib/rcs/types/reaction_result.rb +10 -6
- data/lib/rcs/types/refreshed_file.rb +67 -0
- data/lib/rcs/types/{rcs.rb → rich_message.rb} +3 -3
- data/lib/rcs/types/scheduled_messaage.rb +5 -3
- data/lib/rcs/types/sent_mms_details.rb +4 -2
- data/lib/rcs/types/sent_rcs_details.rb +12 -13
- data/lib/rcs/types/sent_sms_details.rb +5 -3
- data/lib/rcs/types/toll_free_campaign.rb +3 -3
- data/lib/rcs/types/toll_free_campaign_status.rb +5 -3
- data/lib/rcs/types/toll_free_campaign_with_extended_brand_and_status.rb +3 -5
- data/lib/rcs/types/updated_contact_id.rb +5 -3
- data/lib/rcs/types/user_event.rb +83 -0
- data/lib/rcs/types/user_event_conversation.rb +78 -0
- data/lib/rcs/types/v_card_data.rb +5 -3
- data/lib/rcs/types/validate_campaign_params.rb +15 -3
- data/lib/rcs/types/vcard.rb +5 -3
- data/lib/rcs/types/vcard_content.rb +5 -3
- data/lib/rcs/types/vcard_resource.rb +5 -3
- data/lib/rcs/types/webhook_event_enum.rb +1 -0
- data/lib/rcs/types/webhooks.rb +5 -3
- data/lib/requests.rb +2 -2
- data/lib/types_export.rb +29 -7
- metadata +33 -11
- data/lib/rcs/types/click_action.rb +0 -73
- data/lib/rcs/types/click_action_data_metadata.rb +0 -69
|
@@ -29,7 +29,7 @@ module Pinnacle
|
|
|
29
29
|
#
|
|
30
30
|
# @param request [Hash] Request of type Pinnacle::Types::AutofillCampaignParams, as a Hash
|
|
31
31
|
# * :additional_info (String)
|
|
32
|
-
# * :campaign_id (
|
|
32
|
+
# * :campaign_id (String)
|
|
33
33
|
# @param request_options [Pinnacle::RequestOptions]
|
|
34
34
|
# @return [Pinnacle::Campaigns::TollFree::Types::TollFreeAutofillResponse]
|
|
35
35
|
# @example
|
|
@@ -38,7 +38,7 @@ module Pinnacle
|
|
|
38
38
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
39
39
|
# api_key: "YOUR_API_KEY"
|
|
40
40
|
# )
|
|
41
|
-
# api.campaigns.toll_free.autofill(request: { additional_info: "Please autofill missing
|
|
41
|
+
# api.campaigns.toll_free.autofill(request: { additional_info: "Please autofill missing campaign fields using my brand profile", campaign_id: "dlc_1234567890" })
|
|
42
42
|
def autofill(request:, request_options: nil)
|
|
43
43
|
response = @request_client.conn.post do |req|
|
|
44
44
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -59,7 +59,7 @@ module Pinnacle
|
|
|
59
59
|
|
|
60
60
|
# Retrieve Toll-Free campaign.
|
|
61
61
|
#
|
|
62
|
-
# @param campaign_id [
|
|
62
|
+
# @param campaign_id [String] Unique identifier of toll-free campaign. Must begin with the prefix `tf_`.
|
|
63
63
|
# @param request_options [Pinnacle::RequestOptions]
|
|
64
64
|
# @return [Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus]
|
|
65
65
|
# @example
|
|
@@ -68,7 +68,7 @@ module Pinnacle
|
|
|
68
68
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
69
69
|
# api_key: "YOUR_API_KEY"
|
|
70
70
|
# )
|
|
71
|
-
# api.campaigns.toll_free.get(campaign_id:
|
|
71
|
+
# api.campaigns.toll_free.get(campaign_id: "tf_1234567890")
|
|
72
72
|
def get(campaign_id:, request_options: nil)
|
|
73
73
|
response = @request_client.conn.get do |req|
|
|
74
74
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -91,7 +91,8 @@ module Pinnacle
|
|
|
91
91
|
|
|
92
92
|
# Submit your toll-free campaign for approval and activation with carriers.
|
|
93
93
|
#
|
|
94
|
-
# @param campaign_id [
|
|
94
|
+
# @param campaign_id [String] Unique identifier of the toll-free campaign to submit. Must begin with the
|
|
95
|
+
# prefix `tf_`.
|
|
95
96
|
# @param request_options [Pinnacle::RequestOptions]
|
|
96
97
|
# @return [Pinnacle::Types::CampaignSubmissionResult]
|
|
97
98
|
# @example
|
|
@@ -100,7 +101,7 @@ module Pinnacle
|
|
|
100
101
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
101
102
|
# api_key: "YOUR_API_KEY"
|
|
102
103
|
# )
|
|
103
|
-
# api.campaigns.toll_free.submit(campaign_id:
|
|
104
|
+
# api.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
|
|
104
105
|
def submit(campaign_id:, request_options: nil)
|
|
105
106
|
response = @request_client.conn.post do |req|
|
|
106
107
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -124,8 +125,10 @@ module Pinnacle
|
|
|
124
125
|
# Create a new toll-free campaign or updates an existing one.<br>
|
|
125
126
|
# Omit campaignId to create a campaign.
|
|
126
127
|
#
|
|
127
|
-
# @param brand [
|
|
128
|
-
#
|
|
128
|
+
# @param brand [String] Brand id. This identifier is a string that always begins with the prefix `b_`,
|
|
129
|
+
# for example: `b_1234567890`.
|
|
130
|
+
# @param campaign_id [String] Unique identifier for the campaign. This identifier is a string that always
|
|
131
|
+
# begins with the prefix `tf_`, for example: `tf_1234567890`.
|
|
129
132
|
# @param monthly_volume [Pinnacle::Types::MessageVolumeEnum]
|
|
130
133
|
# @param name [String] Display name of the campaign.
|
|
131
134
|
# @param opt_in [Hash] Opt-in keyword settings.Request of type Pinnacle::Campaigns::TollFree::Types::UpsertTollFreeSchemaOptIn, as a Hash
|
|
@@ -145,12 +148,12 @@ module Pinnacle
|
|
|
145
148
|
# api_key: "YOUR_API_KEY"
|
|
146
149
|
# )
|
|
147
150
|
# api.campaigns.toll_free.upsert(
|
|
148
|
-
# brand:
|
|
149
|
-
# campaign_id:
|
|
151
|
+
# brand: "b_1234567890",
|
|
152
|
+
# campaign_id: "tf_1234567890",
|
|
150
153
|
# monthly_volume: ONE_000,
|
|
151
154
|
# name: "Pinnacle",
|
|
152
155
|
# opt_in: { method_: DIGITAL, url: "https://www.pinnacle.sh/", workflow_description: "Visit https://www.pinnacle.sh/" },
|
|
153
|
-
# production_message_content: "Join Pinnacle
|
|
156
|
+
# production_message_content: "Join the Pinnacle workshop tomorrow and send your first RCS!",
|
|
154
157
|
# use_case: { summary: "Alerts clients about any Pinnacle hosted workshops.", value: WORKSHOP_ALERTS }
|
|
155
158
|
# )
|
|
156
159
|
def upsert(brand: nil, campaign_id: nil, monthly_volume: nil, name: nil, opt_in: nil,
|
|
@@ -186,7 +189,7 @@ module Pinnacle
|
|
|
186
189
|
#
|
|
187
190
|
# @param request [Hash] Request of type Pinnacle::Types::ValidateCampaignParams, as a Hash
|
|
188
191
|
# * :additional_info (String)
|
|
189
|
-
# * :campaign_id (
|
|
192
|
+
# * :campaign_id (String)
|
|
190
193
|
# @param request_options [Pinnacle::RequestOptions]
|
|
191
194
|
# @return [Pinnacle::Types::CampaignValidationResult]
|
|
192
195
|
# @example
|
|
@@ -195,7 +198,7 @@ module Pinnacle
|
|
|
195
198
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
196
199
|
# api_key: "YOUR_API_KEY"
|
|
197
200
|
# )
|
|
198
|
-
# api.campaigns.toll_free.validate(request: { additional_info: "Please validate this DLC campaign for 10DLC compliance", campaign_id:
|
|
201
|
+
# api.campaigns.toll_free.validate(request: { additional_info: "Please validate this DLC campaign for 10DLC compliance", campaign_id: "dlc_1234567890" })
|
|
199
202
|
def validate(request:, request_options: nil)
|
|
200
203
|
response = @request_client.conn.post do |req|
|
|
201
204
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -230,7 +233,7 @@ module Pinnacle
|
|
|
230
233
|
#
|
|
231
234
|
# @param request [Hash] Request of type Pinnacle::Types::AutofillCampaignParams, as a Hash
|
|
232
235
|
# * :additional_info (String)
|
|
233
|
-
# * :campaign_id (
|
|
236
|
+
# * :campaign_id (String)
|
|
234
237
|
# @param request_options [Pinnacle::RequestOptions]
|
|
235
238
|
# @return [Pinnacle::Campaigns::TollFree::Types::TollFreeAutofillResponse]
|
|
236
239
|
# @example
|
|
@@ -239,7 +242,7 @@ module Pinnacle
|
|
|
239
242
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
240
243
|
# api_key: "YOUR_API_KEY"
|
|
241
244
|
# )
|
|
242
|
-
# api.campaigns.toll_free.autofill(request: { additional_info: "Please autofill missing
|
|
245
|
+
# api.campaigns.toll_free.autofill(request: { additional_info: "Please autofill missing campaign fields using my brand profile", campaign_id: "dlc_1234567890" })
|
|
243
246
|
def autofill(request:, request_options: nil)
|
|
244
247
|
Async do
|
|
245
248
|
response = @request_client.conn.post do |req|
|
|
@@ -262,7 +265,7 @@ module Pinnacle
|
|
|
262
265
|
|
|
263
266
|
# Retrieve Toll-Free campaign.
|
|
264
267
|
#
|
|
265
|
-
# @param campaign_id [
|
|
268
|
+
# @param campaign_id [String] Unique identifier of toll-free campaign. Must begin with the prefix `tf_`.
|
|
266
269
|
# @param request_options [Pinnacle::RequestOptions]
|
|
267
270
|
# @return [Pinnacle::Types::TollFreeCampaignWithExtendedBrandAndStatus]
|
|
268
271
|
# @example
|
|
@@ -271,7 +274,7 @@ module Pinnacle
|
|
|
271
274
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
272
275
|
# api_key: "YOUR_API_KEY"
|
|
273
276
|
# )
|
|
274
|
-
# api.campaigns.toll_free.get(campaign_id:
|
|
277
|
+
# api.campaigns.toll_free.get(campaign_id: "tf_1234567890")
|
|
275
278
|
def get(campaign_id:, request_options: nil)
|
|
276
279
|
Async do
|
|
277
280
|
response = @request_client.conn.get do |req|
|
|
@@ -296,7 +299,8 @@ module Pinnacle
|
|
|
296
299
|
|
|
297
300
|
# Submit your toll-free campaign for approval and activation with carriers.
|
|
298
301
|
#
|
|
299
|
-
# @param campaign_id [
|
|
302
|
+
# @param campaign_id [String] Unique identifier of the toll-free campaign to submit. Must begin with the
|
|
303
|
+
# prefix `tf_`.
|
|
300
304
|
# @param request_options [Pinnacle::RequestOptions]
|
|
301
305
|
# @return [Pinnacle::Types::CampaignSubmissionResult]
|
|
302
306
|
# @example
|
|
@@ -305,7 +309,7 @@ module Pinnacle
|
|
|
305
309
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
306
310
|
# api_key: "YOUR_API_KEY"
|
|
307
311
|
# )
|
|
308
|
-
# api.campaigns.toll_free.submit(campaign_id:
|
|
312
|
+
# api.campaigns.toll_free.submit(campaign_id: "tf_1234567890")
|
|
309
313
|
def submit(campaign_id:, request_options: nil)
|
|
310
314
|
Async do
|
|
311
315
|
response = @request_client.conn.post do |req|
|
|
@@ -331,8 +335,10 @@ module Pinnacle
|
|
|
331
335
|
# Create a new toll-free campaign or updates an existing one.<br>
|
|
332
336
|
# Omit campaignId to create a campaign.
|
|
333
337
|
#
|
|
334
|
-
# @param brand [
|
|
335
|
-
#
|
|
338
|
+
# @param brand [String] Brand id. This identifier is a string that always begins with the prefix `b_`,
|
|
339
|
+
# for example: `b_1234567890`.
|
|
340
|
+
# @param campaign_id [String] Unique identifier for the campaign. This identifier is a string that always
|
|
341
|
+
# begins with the prefix `tf_`, for example: `tf_1234567890`.
|
|
336
342
|
# @param monthly_volume [Pinnacle::Types::MessageVolumeEnum]
|
|
337
343
|
# @param name [String] Display name of the campaign.
|
|
338
344
|
# @param opt_in [Hash] Opt-in keyword settings.Request of type Pinnacle::Campaigns::TollFree::Types::UpsertTollFreeSchemaOptIn, as a Hash
|
|
@@ -352,12 +358,12 @@ module Pinnacle
|
|
|
352
358
|
# api_key: "YOUR_API_KEY"
|
|
353
359
|
# )
|
|
354
360
|
# api.campaigns.toll_free.upsert(
|
|
355
|
-
# brand:
|
|
356
|
-
# campaign_id:
|
|
361
|
+
# brand: "b_1234567890",
|
|
362
|
+
# campaign_id: "tf_1234567890",
|
|
357
363
|
# monthly_volume: ONE_000,
|
|
358
364
|
# name: "Pinnacle",
|
|
359
365
|
# opt_in: { method_: DIGITAL, url: "https://www.pinnacle.sh/", workflow_description: "Visit https://www.pinnacle.sh/" },
|
|
360
|
-
# production_message_content: "Join Pinnacle
|
|
366
|
+
# production_message_content: "Join the Pinnacle workshop tomorrow and send your first RCS!",
|
|
361
367
|
# use_case: { summary: "Alerts clients about any Pinnacle hosted workshops.", value: WORKSHOP_ALERTS }
|
|
362
368
|
# )
|
|
363
369
|
def upsert(brand: nil, campaign_id: nil, monthly_volume: nil, name: nil, opt_in: nil,
|
|
@@ -395,7 +401,7 @@ module Pinnacle
|
|
|
395
401
|
#
|
|
396
402
|
# @param request [Hash] Request of type Pinnacle::Types::ValidateCampaignParams, as a Hash
|
|
397
403
|
# * :additional_info (String)
|
|
398
|
-
# * :campaign_id (
|
|
404
|
+
# * :campaign_id (String)
|
|
399
405
|
# @param request_options [Pinnacle::RequestOptions]
|
|
400
406
|
# @return [Pinnacle::Types::CampaignValidationResult]
|
|
401
407
|
# @example
|
|
@@ -404,7 +410,7 @@ module Pinnacle
|
|
|
404
410
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
405
411
|
# api_key: "YOUR_API_KEY"
|
|
406
412
|
# )
|
|
407
|
-
# api.campaigns.toll_free.validate(request: { additional_info: "Please validate this DLC campaign for 10DLC compliance", campaign_id:
|
|
413
|
+
# api.campaigns.toll_free.validate(request: { additional_info: "Please validate this DLC campaign for 10DLC compliance", campaign_id: "dlc_1234567890" })
|
|
408
414
|
def validate(request:, request_options: nil)
|
|
409
415
|
Async do
|
|
410
416
|
response = @request_client.conn.post do |req|
|
|
@@ -11,9 +11,9 @@ module Pinnacle
|
|
|
11
11
|
module TollFree
|
|
12
12
|
module Types
|
|
13
13
|
class TollFreeAutofillResponse
|
|
14
|
-
# @return [
|
|
14
|
+
# @return [String]
|
|
15
15
|
attr_reader :brand
|
|
16
|
-
# @return [
|
|
16
|
+
# @return [String] Unique identifier for the campaign. Must begin with the prefix `tf_`.
|
|
17
17
|
attr_reader :campaign_id
|
|
18
18
|
# @return [Pinnacle::Types::MessageVolumeEnum]
|
|
19
19
|
attr_reader :monthly_volume
|
|
@@ -33,8 +33,8 @@ module Pinnacle
|
|
|
33
33
|
|
|
34
34
|
OMIT = Object.new
|
|
35
35
|
|
|
36
|
-
# @param brand [
|
|
37
|
-
# @param campaign_id [
|
|
36
|
+
# @param brand [String]
|
|
37
|
+
# @param campaign_id [String] Unique identifier for the campaign. Must begin with the prefix `tf_`.
|
|
38
38
|
# @param monthly_volume [Pinnacle::Types::MessageVolumeEnum]
|
|
39
39
|
# @param name [String] Display name of the campaign.
|
|
40
40
|
# @param opt_in [Pinnacle::Types::UpsertTollFreeCampaignOptIn] Opt-in keyword settings.
|
|
@@ -115,8 +115,8 @@ module Pinnacle
|
|
|
115
115
|
# @param obj [Object]
|
|
116
116
|
# @return [Void]
|
|
117
117
|
def self.validate_raw(obj:)
|
|
118
|
-
obj.brand&.is_a?(
|
|
119
|
-
obj.campaign_id&.is_a?(
|
|
118
|
+
obj.brand&.is_a?(String) != false || raise("Passed value for field obj.brand is not the expected type, validation failed.")
|
|
119
|
+
obj.campaign_id&.is_a?(String) != false || raise("Passed value for field obj.campaign_id is not the expected type, validation failed.")
|
|
120
120
|
obj.monthly_volume&.is_a?(Pinnacle::Types::MessageVolumeEnum) != false || raise("Passed value for field obj.monthly_volume is not the expected type, validation failed.")
|
|
121
121
|
obj.name&.is_a?(String) != false || raise("Passed value for field obj.name is not the expected type, validation failed.")
|
|
122
122
|
obj.opt_in.nil? || Pinnacle::Types::UpsertTollFreeCampaignOptIn.validate_raw(obj: obj.opt_in)
|
data/lib/rcs/contacts/client.rb
CHANGED
|
@@ -19,7 +19,7 @@ module Pinnacle
|
|
|
19
19
|
|
|
20
20
|
# Retrieve contact information for a given number.
|
|
21
21
|
#
|
|
22
|
-
# @param id [
|
|
22
|
+
# @param id [String] Unique identifier of a specific contact you want to retrieve. <br>
|
|
23
23
|
# Either this parameter or `phoneNumber` must be provided, but not both.
|
|
24
24
|
# @param phone_number [String] Phone number you want to look up contact information for, provided in
|
|
25
25
|
# URL-encoded E.164 format with %2B prefix instead of +.
|
|
@@ -31,7 +31,7 @@ module Pinnacle
|
|
|
31
31
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
32
32
|
# api_key: "YOUR_API_KEY"
|
|
33
33
|
# )
|
|
34
|
-
# api.contacts.get
|
|
34
|
+
# api.contacts.get(id: "co_1234567890")
|
|
35
35
|
def get(id: nil, phone_number: nil, request_options: nil)
|
|
36
36
|
response = @request_client.conn.get do |req|
|
|
37
37
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -101,7 +101,8 @@ module Pinnacle
|
|
|
101
101
|
# @param email [String] New email address for your contact.
|
|
102
102
|
# @param name [String] New name for your contact.
|
|
103
103
|
# @param tags [Array<String>] New tags for your contact.
|
|
104
|
-
# @param id [
|
|
104
|
+
# @param id [String] ID of the contact you want to update. This identifier is a string that always
|
|
105
|
+
# begins with the prefix `co_`, for example: `co_1234567890`.
|
|
105
106
|
# @param request_options [Pinnacle::RequestOptions]
|
|
106
107
|
# @return [Pinnacle::Types::UpdatedContactId]
|
|
107
108
|
# @example
|
|
@@ -110,7 +111,7 @@ module Pinnacle
|
|
|
110
111
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
111
112
|
# api_key: "YOUR_API_KEY"
|
|
112
113
|
# )
|
|
113
|
-
# api.contacts.update(id:
|
|
114
|
+
# api.contacts.update(id: "co_1234567890")
|
|
114
115
|
def update(id:, description: nil, email: nil, name: nil, tags: nil, request_options: nil)
|
|
115
116
|
response = @request_client.conn.put do |req|
|
|
116
117
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -149,7 +150,7 @@ module Pinnacle
|
|
|
149
150
|
|
|
150
151
|
# Retrieve contact information for a given number.
|
|
151
152
|
#
|
|
152
|
-
# @param id [
|
|
153
|
+
# @param id [String] Unique identifier of a specific contact you want to retrieve. <br>
|
|
153
154
|
# Either this parameter or `phoneNumber` must be provided, but not both.
|
|
154
155
|
# @param phone_number [String] Phone number you want to look up contact information for, provided in
|
|
155
156
|
# URL-encoded E.164 format with %2B prefix instead of +.
|
|
@@ -161,7 +162,7 @@ module Pinnacle
|
|
|
161
162
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
162
163
|
# api_key: "YOUR_API_KEY"
|
|
163
164
|
# )
|
|
164
|
-
# api.contacts.get
|
|
165
|
+
# api.contacts.get(id: "co_1234567890")
|
|
165
166
|
def get(id: nil, phone_number: nil, request_options: nil)
|
|
166
167
|
Async do
|
|
167
168
|
response = @request_client.conn.get do |req|
|
|
@@ -235,7 +236,8 @@ module Pinnacle
|
|
|
235
236
|
# @param email [String] New email address for your contact.
|
|
236
237
|
# @param name [String] New name for your contact.
|
|
237
238
|
# @param tags [Array<String>] New tags for your contact.
|
|
238
|
-
# @param id [
|
|
239
|
+
# @param id [String] ID of the contact you want to update. This identifier is a string that always
|
|
240
|
+
# begins with the prefix `co_`, for example: `co_1234567890`.
|
|
239
241
|
# @param request_options [Pinnacle::RequestOptions]
|
|
240
242
|
# @return [Pinnacle::Types::UpdatedContactId]
|
|
241
243
|
# @example
|
|
@@ -244,7 +246,7 @@ module Pinnacle
|
|
|
244
246
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
245
247
|
# api_key: "YOUR_API_KEY"
|
|
246
248
|
# )
|
|
247
|
-
# api.contacts.update(id:
|
|
249
|
+
# api.contacts.update(id: "co_1234567890")
|
|
248
250
|
def update(id:, description: nil, email: nil, name: nil, tags: nil, request_options: nil)
|
|
249
251
|
Async do
|
|
250
252
|
response = @request_client.conn.put do |req|
|
|
@@ -6,6 +6,12 @@ require_relative "../types/conversation"
|
|
|
6
6
|
require_relative "../types/campaign_enum"
|
|
7
7
|
require_relative "../types/conversation_list"
|
|
8
8
|
require_relative "../types/successful_conversation_update"
|
|
9
|
+
require_relative "types/conversations_list_messages_request_sort_order"
|
|
10
|
+
require_relative "types/conversations_list_messages_request_direction"
|
|
11
|
+
require_relative "types/conversations_list_messages_request_status"
|
|
12
|
+
require_relative "types/conversations_list_messages_request_type"
|
|
13
|
+
require "date"
|
|
14
|
+
require_relative "../types/message_list"
|
|
9
15
|
require "async"
|
|
10
16
|
|
|
11
17
|
module Pinnacle
|
|
@@ -31,7 +37,7 @@ module Pinnacle
|
|
|
31
37
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
32
38
|
# api_key: "YOUR_API_KEY"
|
|
33
39
|
# )
|
|
34
|
-
# api.conversations.get(request: { id:
|
|
40
|
+
# api.conversations.get(request: { id: "conv_1234567890" })
|
|
35
41
|
def get(request:, request_options: nil)
|
|
36
42
|
response = @request_client.conn.post do |req|
|
|
37
43
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -53,15 +59,20 @@ module Pinnacle
|
|
|
53
59
|
# Retrieves conversations by page with optional filtering based off provided
|
|
54
60
|
# parameters.
|
|
55
61
|
#
|
|
56
|
-
# @param brand_id [
|
|
57
|
-
#
|
|
62
|
+
# @param brand_id [String] The unique identifier of the brand to filter conversations. This identifier is a
|
|
63
|
+
# string that always begins with the prefix `b_`, for example: `b_1234567890`.
|
|
64
|
+
# @param campaign_id [String] The unique identifier of the campaign to filter conversations. This identifier
|
|
65
|
+
# is a string that begins with the prefix:
|
|
66
|
+
# - TOLL_FREE: `tf_` (e.g., `tf_1234567890`)
|
|
67
|
+
# - 10DLC: `dlc_` (e.g., `dlc_1234567890`)
|
|
68
|
+
# - RCS: `rcs_` (e.g., `rcs_1234567890`)
|
|
58
69
|
# @param campaign_type [Pinnacle::Types::CampaignEnum]
|
|
59
70
|
# @param page_index [Integer] Zero-based index for pagination.
|
|
60
71
|
# @param page_size [Integer] Number of conversations to return per page.
|
|
61
72
|
# @param receiver [String] Receiver's phone number in E.164 format.
|
|
62
73
|
# @param sender [String]
|
|
63
74
|
# @param request_options [Pinnacle::RequestOptions]
|
|
64
|
-
# @return [Pinnacle::Types::
|
|
75
|
+
# @return [Pinnacle::Types::ConversationList]
|
|
65
76
|
# @example
|
|
66
77
|
# api = Pinnacle::Client.new(
|
|
67
78
|
# base_url: "https://api.example.com",
|
|
@@ -69,8 +80,8 @@ module Pinnacle
|
|
|
69
80
|
# api_key: "YOUR_API_KEY"
|
|
70
81
|
# )
|
|
71
82
|
# api.conversations.list(
|
|
72
|
-
# brand_id:
|
|
73
|
-
# campaign_id:
|
|
83
|
+
# brand_id: "b_1234567890",
|
|
84
|
+
# campaign_id: "tf_1234567890",
|
|
74
85
|
# campaign_type: TOLL_FREE,
|
|
75
86
|
# page_index: 0,
|
|
76
87
|
# page_size: 20,
|
|
@@ -107,7 +118,8 @@ module Pinnacle
|
|
|
107
118
|
|
|
108
119
|
# Update the notes associated with a specific conversation.
|
|
109
120
|
#
|
|
110
|
-
# @param id [
|
|
121
|
+
# @param id [String] The unique identifier of the conversation to update. This identifier is a string
|
|
122
|
+
# that always begins with the prefix `conv_`, for example: `conv_1234567890`.
|
|
111
123
|
# @param notes [String] New notes or comments for the conversation.
|
|
112
124
|
# @param request_options [Pinnacle::RequestOptions]
|
|
113
125
|
# @return [Pinnacle::Types::SuccessfulConversationUpdate]
|
|
@@ -117,7 +129,7 @@ module Pinnacle
|
|
|
117
129
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
118
130
|
# api_key: "YOUR_API_KEY"
|
|
119
131
|
# )
|
|
120
|
-
# api.conversations.update(id:
|
|
132
|
+
# api.conversations.update(id: "conv_1234567890", notes: "Follow-up completed. Customer satisfied with resolution.")
|
|
121
133
|
def update(id:, notes:, request_options: nil)
|
|
122
134
|
response = @request_client.conn.post do |req|
|
|
123
135
|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
@@ -135,6 +147,60 @@ module Pinnacle
|
|
|
135
147
|
end
|
|
136
148
|
Pinnacle::Types::SuccessfulConversationUpdate.from_json(json_object: response.body)
|
|
137
149
|
end
|
|
150
|
+
|
|
151
|
+
# Retrieve a paginated and filtered list of messages for a specific conversation.
|
|
152
|
+
#
|
|
153
|
+
# @param id [String] Unique identifier of the conversation. This identifier is a string that always
|
|
154
|
+
# begins with the prefix `conv_`, for example: `conv_1234567890`.
|
|
155
|
+
# @param page_index [Integer] Zero-based index for pagination.
|
|
156
|
+
# @param page_size [Integer] Number of messages to return per page.
|
|
157
|
+
# @param sort_order [Pinnacle::Conversations::Types::ConversationsListMessagesRequestSortOrder] Sort order for messages. <br>
|
|
158
|
+
# - `asc`: Oldest messages first
|
|
159
|
+
# - `desc`: Newest messages first (default)
|
|
160
|
+
# @param direction [Pinnacle::Conversations::Types::ConversationsListMessagesRequestDirection] Filter messages by direction. <br>
|
|
161
|
+
# - `INBOUND`: Messages received from contacts
|
|
162
|
+
# - `OUTBOUND`: Messages sent to contacts
|
|
163
|
+
# @param status [Pinnacle::Conversations::Types::ConversationsListMessagesRequestStatus] Filter messages by delivery status.
|
|
164
|
+
# @param type [Pinnacle::Conversations::Types::ConversationsListMessagesRequestType] Filter messages by protocol type.
|
|
165
|
+
# @param date_from [DateTime] Filter messages sent on or after this date (ISO 8601 format).
|
|
166
|
+
# @param date_to [DateTime] Filter messages sent on or before this date (ISO 8601 format).
|
|
167
|
+
# @param request_options [Pinnacle::RequestOptions]
|
|
168
|
+
# @return [Pinnacle::Types::MessageList]
|
|
169
|
+
# @example
|
|
170
|
+
# api = Pinnacle::Client.new(
|
|
171
|
+
# base_url: "https://api.example.com",
|
|
172
|
+
# environment: Pinnacle::Environment::DEFAULT,
|
|
173
|
+
# api_key: "YOUR_API_KEY"
|
|
174
|
+
# )
|
|
175
|
+
# api.conversations.list_messages(id: "id")
|
|
176
|
+
def list_messages(id:, page_index: nil, page_size: nil, sort_order: nil, direction: nil, status: nil, type: nil,
|
|
177
|
+
date_from: nil, date_to: nil, request_options: nil)
|
|
178
|
+
response = @request_client.conn.post do |req|
|
|
179
|
+
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
180
|
+
req.headers["PINNACLE-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
|
|
181
|
+
req.headers = {
|
|
182
|
+
**(req.headers || {}),
|
|
183
|
+
**@request_client.get_headers,
|
|
184
|
+
**(request_options&.additional_headers || {})
|
|
185
|
+
}.compact
|
|
186
|
+
req.params = {
|
|
187
|
+
**(request_options&.additional_query_parameters || {}),
|
|
188
|
+
"pageIndex": page_index,
|
|
189
|
+
"pageSize": page_size,
|
|
190
|
+
"sortOrder": sort_order,
|
|
191
|
+
"direction": direction,
|
|
192
|
+
"status": status,
|
|
193
|
+
"type": type,
|
|
194
|
+
"dateFrom": date_from,
|
|
195
|
+
"dateTo": date_to
|
|
196
|
+
}.compact
|
|
197
|
+
unless request_options.nil? || request_options&.additional_body_parameters.nil?
|
|
198
|
+
req.body = { **(request_options&.additional_body_parameters || {}) }.compact
|
|
199
|
+
end
|
|
200
|
+
req.url "#{@request_client.get_url(request_options: request_options)}/conversations/#{id}/messages"
|
|
201
|
+
end
|
|
202
|
+
Pinnacle::Types::MessageList.from_json(json_object: response.body)
|
|
203
|
+
end
|
|
138
204
|
end
|
|
139
205
|
|
|
140
206
|
class AsyncConversationsClient
|
|
@@ -159,7 +225,7 @@ module Pinnacle
|
|
|
159
225
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
160
226
|
# api_key: "YOUR_API_KEY"
|
|
161
227
|
# )
|
|
162
|
-
# api.conversations.get(request: { id:
|
|
228
|
+
# api.conversations.get(request: { id: "conv_1234567890" })
|
|
163
229
|
def get(request:, request_options: nil)
|
|
164
230
|
Async do
|
|
165
231
|
response = @request_client.conn.post do |req|
|
|
@@ -183,15 +249,20 @@ module Pinnacle
|
|
|
183
249
|
# Retrieves conversations by page with optional filtering based off provided
|
|
184
250
|
# parameters.
|
|
185
251
|
#
|
|
186
|
-
# @param brand_id [
|
|
187
|
-
#
|
|
252
|
+
# @param brand_id [String] The unique identifier of the brand to filter conversations. This identifier is a
|
|
253
|
+
# string that always begins with the prefix `b_`, for example: `b_1234567890`.
|
|
254
|
+
# @param campaign_id [String] The unique identifier of the campaign to filter conversations. This identifier
|
|
255
|
+
# is a string that begins with the prefix:
|
|
256
|
+
# - TOLL_FREE: `tf_` (e.g., `tf_1234567890`)
|
|
257
|
+
# - 10DLC: `dlc_` (e.g., `dlc_1234567890`)
|
|
258
|
+
# - RCS: `rcs_` (e.g., `rcs_1234567890`)
|
|
188
259
|
# @param campaign_type [Pinnacle::Types::CampaignEnum]
|
|
189
260
|
# @param page_index [Integer] Zero-based index for pagination.
|
|
190
261
|
# @param page_size [Integer] Number of conversations to return per page.
|
|
191
262
|
# @param receiver [String] Receiver's phone number in E.164 format.
|
|
192
263
|
# @param sender [String]
|
|
193
264
|
# @param request_options [Pinnacle::RequestOptions]
|
|
194
|
-
# @return [Pinnacle::Types::
|
|
265
|
+
# @return [Pinnacle::Types::ConversationList]
|
|
195
266
|
# @example
|
|
196
267
|
# api = Pinnacle::Client.new(
|
|
197
268
|
# base_url: "https://api.example.com",
|
|
@@ -199,8 +270,8 @@ module Pinnacle
|
|
|
199
270
|
# api_key: "YOUR_API_KEY"
|
|
200
271
|
# )
|
|
201
272
|
# api.conversations.list(
|
|
202
|
-
# brand_id:
|
|
203
|
-
# campaign_id:
|
|
273
|
+
# brand_id: "b_1234567890",
|
|
274
|
+
# campaign_id: "tf_1234567890",
|
|
204
275
|
# campaign_type: TOLL_FREE,
|
|
205
276
|
# page_index: 0,
|
|
206
277
|
# page_size: 20,
|
|
@@ -239,7 +310,8 @@ module Pinnacle
|
|
|
239
310
|
|
|
240
311
|
# Update the notes associated with a specific conversation.
|
|
241
312
|
#
|
|
242
|
-
# @param id [
|
|
313
|
+
# @param id [String] The unique identifier of the conversation to update. This identifier is a string
|
|
314
|
+
# that always begins with the prefix `conv_`, for example: `conv_1234567890`.
|
|
243
315
|
# @param notes [String] New notes or comments for the conversation.
|
|
244
316
|
# @param request_options [Pinnacle::RequestOptions]
|
|
245
317
|
# @return [Pinnacle::Types::SuccessfulConversationUpdate]
|
|
@@ -249,7 +321,7 @@ module Pinnacle
|
|
|
249
321
|
# environment: Pinnacle::Environment::DEFAULT,
|
|
250
322
|
# api_key: "YOUR_API_KEY"
|
|
251
323
|
# )
|
|
252
|
-
# api.conversations.update(id:
|
|
324
|
+
# api.conversations.update(id: "conv_1234567890", notes: "Follow-up completed. Customer satisfied with resolution.")
|
|
253
325
|
def update(id:, notes:, request_options: nil)
|
|
254
326
|
Async do
|
|
255
327
|
response = @request_client.conn.post do |req|
|
|
@@ -269,5 +341,61 @@ module Pinnacle
|
|
|
269
341
|
Pinnacle::Types::SuccessfulConversationUpdate.from_json(json_object: response.body)
|
|
270
342
|
end
|
|
271
343
|
end
|
|
344
|
+
|
|
345
|
+
# Retrieve a paginated and filtered list of messages for a specific conversation.
|
|
346
|
+
#
|
|
347
|
+
# @param id [String] Unique identifier of the conversation. This identifier is a string that always
|
|
348
|
+
# begins with the prefix `conv_`, for example: `conv_1234567890`.
|
|
349
|
+
# @param page_index [Integer] Zero-based index for pagination.
|
|
350
|
+
# @param page_size [Integer] Number of messages to return per page.
|
|
351
|
+
# @param sort_order [Pinnacle::Conversations::Types::ConversationsListMessagesRequestSortOrder] Sort order for messages. <br>
|
|
352
|
+
# - `asc`: Oldest messages first
|
|
353
|
+
# - `desc`: Newest messages first (default)
|
|
354
|
+
# @param direction [Pinnacle::Conversations::Types::ConversationsListMessagesRequestDirection] Filter messages by direction. <br>
|
|
355
|
+
# - `INBOUND`: Messages received from contacts
|
|
356
|
+
# - `OUTBOUND`: Messages sent to contacts
|
|
357
|
+
# @param status [Pinnacle::Conversations::Types::ConversationsListMessagesRequestStatus] Filter messages by delivery status.
|
|
358
|
+
# @param type [Pinnacle::Conversations::Types::ConversationsListMessagesRequestType] Filter messages by protocol type.
|
|
359
|
+
# @param date_from [DateTime] Filter messages sent on or after this date (ISO 8601 format).
|
|
360
|
+
# @param date_to [DateTime] Filter messages sent on or before this date (ISO 8601 format).
|
|
361
|
+
# @param request_options [Pinnacle::RequestOptions]
|
|
362
|
+
# @return [Pinnacle::Types::MessageList]
|
|
363
|
+
# @example
|
|
364
|
+
# api = Pinnacle::Client.new(
|
|
365
|
+
# base_url: "https://api.example.com",
|
|
366
|
+
# environment: Pinnacle::Environment::DEFAULT,
|
|
367
|
+
# api_key: "YOUR_API_KEY"
|
|
368
|
+
# )
|
|
369
|
+
# api.conversations.list_messages(id: "id")
|
|
370
|
+
def list_messages(id:, page_index: nil, page_size: nil, sort_order: nil, direction: nil, status: nil, type: nil,
|
|
371
|
+
date_from: nil, date_to: nil, request_options: nil)
|
|
372
|
+
Async do
|
|
373
|
+
response = @request_client.conn.post do |req|
|
|
374
|
+
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
|
|
375
|
+
req.headers["PINNACLE-API-KEY"] = request_options.api_key unless request_options&.api_key.nil?
|
|
376
|
+
req.headers = {
|
|
377
|
+
**(req.headers || {}),
|
|
378
|
+
**@request_client.get_headers,
|
|
379
|
+
**(request_options&.additional_headers || {})
|
|
380
|
+
}.compact
|
|
381
|
+
req.params = {
|
|
382
|
+
**(request_options&.additional_query_parameters || {}),
|
|
383
|
+
"pageIndex": page_index,
|
|
384
|
+
"pageSize": page_size,
|
|
385
|
+
"sortOrder": sort_order,
|
|
386
|
+
"direction": direction,
|
|
387
|
+
"status": status,
|
|
388
|
+
"type": type,
|
|
389
|
+
"dateFrom": date_from,
|
|
390
|
+
"dateTo": date_to
|
|
391
|
+
}.compact
|
|
392
|
+
unless request_options.nil? || request_options&.additional_body_parameters.nil?
|
|
393
|
+
req.body = { **(request_options&.additional_body_parameters || {}) }.compact
|
|
394
|
+
end
|
|
395
|
+
req.url "#{@request_client.get_url(request_options: request_options)}/conversations/#{id}/messages"
|
|
396
|
+
end
|
|
397
|
+
Pinnacle::Types::MessageList.from_json(json_object: response.body)
|
|
398
|
+
end
|
|
399
|
+
end
|
|
272
400
|
end
|
|
273
401
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pinnacle
|
|
4
|
+
module Conversations
|
|
5
|
+
module Types
|
|
6
|
+
class ConversationsListMessagesRequestStatus
|
|
7
|
+
PENDING = "PENDING"
|
|
8
|
+
SENT = "SENT"
|
|
9
|
+
SEND_FAILED = "SEND_FAILED"
|
|
10
|
+
DELIVERED = "DELIVERED"
|
|
11
|
+
DELIVERY_FAILED = "DELIVERY_FAILED"
|
|
12
|
+
RECEIVED = "RECEIVED"
|
|
13
|
+
READ = "READ"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|