rcs 2.0.8 → 2.0.13

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +3 -3
  3. data/.fernignore +1 -6
  4. data/.rubocop.yml +0 -3
  5. data/Rakefile +0 -8
  6. data/custom.gemspec.rb +6 -3
  7. data/lib/pinnacle/audiences/client.rb +2 -8
  8. data/lib/pinnacle/audiences/contacts/client.rb +2 -8
  9. data/lib/pinnacle/brands/client.rb +6 -13
  10. data/lib/pinnacle/campaigns/dlc/client.rb +1 -4
  11. data/lib/pinnacle/campaigns/rcs/client.rb +1 -4
  12. data/lib/pinnacle/campaigns/toll_free/client.rb +1 -4
  13. data/lib/pinnacle/client.rb +2 -2
  14. data/lib/pinnacle/contacts/client.rb +2 -8
  15. data/lib/pinnacle/conversations/client.rb +2 -8
  16. data/lib/pinnacle/conversations/types/conversations_list_messages_request_status.rb +1 -0
  17. data/lib/pinnacle/internal/http/base_request.rb +6 -0
  18. data/lib/pinnacle/internal/http/raw_client.rb +95 -15
  19. data/lib/pinnacle/internal/types/utils.rb +2 -2
  20. data/lib/pinnacle/messages/blast/client.rb +3 -12
  21. data/lib/pinnacle/messages/blast/types/blast_rcs.rb +1 -0
  22. data/lib/pinnacle/messages/client.rb +1 -4
  23. data/lib/pinnacle/messages/mms/client.rb +1 -4
  24. data/lib/pinnacle/messages/rcs/client.rb +1 -4
  25. data/lib/pinnacle/messages/sms/client.rb +1 -4
  26. data/lib/pinnacle/phone_numbers/campaign/client.rb +2 -8
  27. data/lib/pinnacle/phone_numbers/client.rb +3 -12
  28. data/lib/pinnacle/pinnacle_client.rb +2 -2
  29. data/lib/pinnacle/rcs/client.rb +3 -12
  30. data/lib/pinnacle/tools/contact_card/client.rb +2 -8
  31. data/lib/pinnacle/tools/file/client.rb +2 -8
  32. data/lib/pinnacle/tools/url/client.rb +5 -9
  33. data/lib/pinnacle/types/base_rich_message.rb +1 -0
  34. data/lib/pinnacle/types/fallback_message.rb +19 -0
  35. data/lib/pinnacle/types/message.rb +1 -0
  36. data/lib/pinnacle/types/message_event.rb +1 -0
  37. data/lib/pinnacle/types/message_event_content.rb +9 -7
  38. data/lib/pinnacle/types/message_event_fallback_message.rb +20 -0
  39. data/lib/pinnacle/types/message_event_fallback_message_type.rb +12 -0
  40. data/lib/pinnacle/types/message_event_mms_content.rb +0 -1
  41. data/lib/pinnacle/types/message_event_rcs_button_data.rb +2 -1
  42. data/lib/pinnacle/types/message_event_rcs_button_data_button.rb +14 -0
  43. data/lib/pinnacle/types/message_event_rcs_button_data_button_raw.rb +14 -0
  44. data/lib/pinnacle/types/message_event_rcs_button_data_button_type.rb +12 -0
  45. data/lib/pinnacle/types/message_event_rcs_cards_content.rb +0 -1
  46. data/lib/pinnacle/types/message_event_rcs_location_data.rb +2 -1
  47. data/lib/pinnacle/types/message_event_rcs_location_data_data.rb +13 -0
  48. data/lib/pinnacle/types/message_event_rcs_media_content.rb +0 -1
  49. data/lib/pinnacle/types/message_event_rcs_text_content.rb +0 -1
  50. data/lib/pinnacle/types/message_event_sms_content.rb +0 -1
  51. data/lib/pinnacle/types/message_status_enum.rb +1 -0
  52. data/lib/pinnacle/types/rich_cards_message.rb +1 -0
  53. data/lib/pinnacle/version.rb +1 -1
  54. data/lib/pinnacle/webhooks/client.rb +1 -4
  55. data/lib/pinnacle.rb +7 -4
  56. data/lib/rcs.rb +450 -0
  57. data/reference.md +12 -0
  58. metadata +12 -5
@@ -24,14 +24,11 @@ module Pinnacle
24
24
  # @return [Pinnacle::Types::AttachedPhoneNumberResult]
25
25
  def attach(request_options: {}, **params)
26
26
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
27
- body_prop_names = %i[phones campaign_type campaign_id]
28
- body_bag = params.slice(*body_prop_names)
29
-
30
27
  request = Pinnacle::Internal::JSON::Request.new(
31
28
  base_url: request_options[:base_url],
32
29
  method: "POST",
33
30
  path: "phone-numbers/attach-campaign",
34
- body: Pinnacle::PhoneNumbers::Campaign::Types::AttachCampaignParams.new(body_bag).to_h,
31
+ body: Pinnacle::PhoneNumbers::Campaign::Types::AttachCampaignParams.new(params).to_h,
35
32
  request_options: request_options
36
33
  )
37
34
  begin
@@ -61,14 +58,11 @@ module Pinnacle
61
58
  # @return [Pinnacle::Types::DetachedPhoneNumberResult]
62
59
  def detach(request_options: {}, **params)
63
60
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
64
- body_prop_names = %i[phones]
65
- body_bag = params.slice(*body_prop_names)
66
-
67
61
  request = Pinnacle::Internal::JSON::Request.new(
68
62
  base_url: request_options[:base_url],
69
63
  method: "DELETE",
70
64
  path: "phone-numbers/detach-campaign",
71
- body: Pinnacle::PhoneNumbers::Campaign::Types::DetachCampaignParams.new(body_bag).to_h,
65
+ body: Pinnacle::PhoneNumbers::Campaign::Types::DetachCampaignParams.new(params).to_h,
72
66
  request_options: request_options
73
67
  )
74
68
  begin
@@ -23,14 +23,11 @@ module Pinnacle
23
23
  # @return [Array[Pinnacle::Types::PhoneNumberDetails]]
24
24
  def search(request_options: {}, **params)
25
25
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
26
- body_prop_names = %i[features location number options type]
27
- body_bag = params.slice(*body_prop_names)
28
-
29
26
  request = Pinnacle::Internal::JSON::Request.new(
30
27
  base_url: request_options[:base_url],
31
28
  method: "POST",
32
29
  path: "phone-numbers/search",
33
- body: Pinnacle::PhoneNumbers::Types::SearchPhoneNumberParams.new(body_bag).to_h,
30
+ body: Pinnacle::PhoneNumbers::Types::SearchPhoneNumberParams.new(params).to_h,
34
31
  request_options: request_options
35
32
  )
36
33
  begin
@@ -60,14 +57,11 @@ module Pinnacle
60
57
  # @return [Array[Pinnacle::Types::PurchasedNumber]]
61
58
  def buy(request_options: {}, **params)
62
59
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
63
- body_prop_names = %i[numbers]
64
- body_bag = params.slice(*body_prop_names)
65
-
66
60
  request = Pinnacle::Internal::JSON::Request.new(
67
61
  base_url: request_options[:base_url],
68
62
  method: "POST",
69
63
  path: "phone-numbers/buy",
70
- body: Pinnacle::PhoneNumbers::Types::BuyPhoneNumberParams.new(body_bag).to_h,
64
+ body: Pinnacle::PhoneNumbers::Types::BuyPhoneNumberParams.new(params).to_h,
71
65
  request_options: request_options
72
66
  )
73
67
  begin
@@ -95,14 +89,11 @@ module Pinnacle
95
89
  # @return [Pinnacle::PhoneNumbers::Types::PhoneNumbersGetResponse]
96
90
  def get(request_options: {}, **params)
97
91
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
98
- body_prop_names = %i[phone level options]
99
- body_bag = params.slice(*body_prop_names)
100
-
101
92
  request = Pinnacle::Internal::JSON::Request.new(
102
93
  base_url: request_options[:base_url],
103
94
  method: "POST",
104
95
  path: "phone-numbers/details",
105
- body: Pinnacle::PhoneNumbers::Types::RetrievePhoneNumberDetailsParams.new(body_bag).to_h,
96
+ body: Pinnacle::PhoneNumbers::Types::RetrievePhoneNumberDetailsParams.new(params).to_h,
106
97
  request_options: request_options
107
98
  )
108
99
  begin
@@ -5,8 +5,8 @@ require_relative "wrapper/tools/file_uploader"
5
5
  require_relative "wrapper/tools/client"
6
6
 
7
7
  module Pinnacle
8
- # Reopen the Client class to add custom methods for webhook processing and file uploads.
9
- class Client
8
+ # Client class that extends PinnacleBaseClient with custom methods for webhook processing and file uploads.
9
+ class Client < PinnacleBaseClient
10
10
  # Returns an enhanced messages client with webhook processing support.
11
11
  #
12
12
  # @return [Pinnacle::Wrapper::Messages::Client]
@@ -26,14 +26,11 @@ module Pinnacle
26
26
  # @return [Hash[String, Pinnacle::Types::RcsCapability, nil]]
27
27
  def get_capabilities(request_options: {}, **params)
28
28
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
29
- body_prop_names = %i[phone_numbers]
30
- body_bag = params.slice(*body_prop_names)
31
-
32
29
  request = Pinnacle::Internal::JSON::Request.new(
33
30
  base_url: request_options[:base_url],
34
31
  method: "POST",
35
32
  path: "rcs/capabilities",
36
- body: Pinnacle::Rcs::Types::RcsCapabilitiesQuery.new(body_bag).to_h,
33
+ body: Pinnacle::Rcs::Types::RcsCapabilitiesQuery.new(params).to_h,
37
34
  request_options: request_options
38
35
  )
39
36
  begin
@@ -91,14 +88,11 @@ module Pinnacle
91
88
  # @return [Pinnacle::Types::RcsWhitelistResponse]
92
89
  def whitelist(request_options: {}, **params)
93
90
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
94
- body_prop_names = %i[agent_id phone_number]
95
- body_bag = params.slice(*body_prop_names)
96
-
97
91
  request = Pinnacle::Internal::JSON::Request.new(
98
92
  base_url: request_options[:base_url],
99
93
  method: "POST",
100
94
  path: "rcs/whitelist",
101
- body: Pinnacle::Rcs::Types::RcsWhitelistRequest.new(body_bag).to_h,
95
+ body: Pinnacle::Rcs::Types::RcsWhitelistRequest.new(params).to_h,
102
96
  request_options: request_options
103
97
  )
104
98
  begin
@@ -131,14 +125,11 @@ module Pinnacle
131
125
  # @return [Pinnacle::Types::RcsLinkResult]
132
126
  def get_link(request_options: {}, **params)
133
127
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
134
- body_prop_names = %i[agent_id test_mode phone_number body]
135
- body_bag = params.slice(*body_prop_names)
136
-
137
128
  request = Pinnacle::Internal::JSON::Request.new(
138
129
  base_url: request_options[:base_url],
139
130
  method: "POST",
140
131
  path: "rcs/link",
141
- body: Pinnacle::Rcs::Types::RcsLinkRequest.new(body_bag).to_h,
132
+ body: Pinnacle::Rcs::Types::RcsLinkRequest.new(params).to_h,
142
133
  request_options: request_options
143
134
  )
144
135
  begin
@@ -25,14 +25,11 @@ module Pinnacle
25
25
  # @return [Pinnacle::Types::VCardData]
26
26
  def get(request_options: {}, **params)
27
27
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
28
- body_prop_names = %i[id options]
29
- body_bag = params.slice(*body_prop_names)
30
-
31
28
  request = Pinnacle::Internal::JSON::Request.new(
32
29
  base_url: request_options[:base_url],
33
30
  method: "POST",
34
31
  path: "tools/contact-card",
35
- body: Pinnacle::Tools::ContactCard::Types::GetVcardParams.new(body_bag).to_h,
32
+ body: Pinnacle::Tools::ContactCard::Types::GetVcardParams.new(params).to_h,
36
33
  request_options: request_options
37
34
  )
38
35
  begin
@@ -63,14 +60,11 @@ module Pinnacle
63
60
  # @return [Pinnacle::Types::VcardResource]
64
61
  def upsert(request_options: {}, **params)
65
62
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
66
- body_prop_names = %i[photo id formatted_name name nickname birthday addresses url phones emails timezone geo title role organization categories note]
67
- body_bag = params.slice(*body_prop_names)
68
-
69
63
  request = Pinnacle::Internal::JSON::Request.new(
70
64
  base_url: request_options[:base_url],
71
65
  method: "POST",
72
66
  path: "tools/contact-card/upsert",
73
- body: Pinnacle::Tools::ContactCard::Types::UpsertVcardParams.new(body_bag).to_h,
67
+ body: Pinnacle::Tools::ContactCard::Types::UpsertVcardParams.new(params).to_h,
74
68
  request_options: request_options
75
69
  )
76
70
  begin
@@ -25,14 +25,11 @@ module Pinnacle
25
25
  # @return [Pinnacle::Types::UploadResults]
26
26
  def upload(request_options: {}, **params)
27
27
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
28
- body_prop_names = %i[content_type size name options]
29
- body_bag = params.slice(*body_prop_names)
30
-
31
28
  request = Pinnacle::Internal::JSON::Request.new(
32
29
  base_url: request_options[:base_url],
33
30
  method: "POST",
34
31
  path: "tools/files/upload",
35
- body: Pinnacle::Tools::File::Types::UploadFileParams.new(body_bag).to_h,
32
+ body: Pinnacle::Tools::File::Types::UploadFileParams.new(params).to_h,
36
33
  request_options: request_options
37
34
  )
38
35
  begin
@@ -67,14 +64,11 @@ module Pinnacle
67
64
  # @return [Array[Pinnacle::Types::RefreshedFile]]
68
65
  def refresh(request_options: {}, **params)
69
66
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
70
- body_prop_names = %i[urls]
71
- body_bag = params.slice(*body_prop_names)
72
-
73
67
  request = Pinnacle::Internal::JSON::Request.new(
74
68
  base_url: request_options[:base_url],
75
69
  method: "POST",
76
70
  path: "tools/files/refresh",
77
- body: Pinnacle::Tools::File::Types::RefreshFileParams.new(body_bag).to_h,
71
+ body: Pinnacle::Tools::File::Types::RefreshFileParams.new(params).to_h,
78
72
  request_options: request_options
79
73
  )
80
74
  begin
@@ -24,14 +24,11 @@ module Pinnacle
24
24
  # @return [Pinnacle::Types::ShortenedUrl]
25
25
  def create(request_options: {}, **params)
26
26
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
27
- body_prop_names = %i[url options]
28
- body_bag = params.slice(*body_prop_names)
29
-
30
27
  request = Pinnacle::Internal::JSON::Request.new(
31
28
  base_url: request_options[:base_url],
32
29
  method: "POST",
33
30
  path: "tools/url",
34
- body: Pinnacle::Tools::Url::Types::CreateUrlParams.new(body_bag).to_h,
31
+ body: Pinnacle::Tools::Url::Types::CreateUrlParams.new(params).to_h,
35
32
  request_options: request_options
36
33
  )
37
34
  begin
@@ -97,16 +94,15 @@ module Pinnacle
97
94
  # @return [Pinnacle::Types::ShortenedUrl]
98
95
  def update(request_options: {}, **params)
99
96
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
100
- path_param_names = %i[link_id]
101
- body_params = params.except(*path_param_names)
102
- body_prop_names = %i[url options]
103
- body_bag = body_params.slice(*body_prop_names)
97
+ request_data = Pinnacle::Tools::Url::Types::UpdateUrlParams.new(params).to_h
98
+ non_body_param_names = ["linkId"]
99
+ body = request_data.except(*non_body_param_names)
104
100
 
105
101
  request = Pinnacle::Internal::JSON::Request.new(
106
102
  base_url: request_options[:base_url],
107
103
  method: "PUT",
108
104
  path: "tools/url/#{params[:link_id]}",
109
- body: Pinnacle::Tools::Url::Types::UpdateUrlParams.new(body_bag).to_h,
105
+ body: body,
110
106
  request_options: request_options
111
107
  )
112
108
  begin
@@ -4,6 +4,7 @@ module Pinnacle
4
4
  module Types
5
5
  class BaseRichMessage < Internal::Types::Model
6
6
  field :from, -> { String }, optional: false, nullable: false
7
+ field :fallback, -> { Pinnacle::Types::FallbackMessage }, optional: true, nullable: false
7
8
  field :options, -> { Pinnacle::Types::SendRichMessageOptions }, optional: true, nullable: false
8
9
  field :to, -> { String }, optional: false, nullable: false
9
10
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # SMS/MMS fallback message to send if the RCS message fails to deliver.
6
+ #
7
+ # When a recipient's device doesn't support RCS or the RCS message cannot be delivered, this fallback message will
8
+ # be sent as SMS or MMS instead. The fallback is sent from the specified phone number.
9
+ #
10
+ # > **Note:** At least one of `text` or `mediaUrls` must be provided. Fallback messages require a verified `from`
11
+ # phone number with SMS/MMS sending capabilities.
12
+ # > **Note:** You will not be charged for the fallback message, only the original RCS message will be charged.
13
+ class FallbackMessage < Internal::Types::Model
14
+ field :from, -> { String }, optional: false, nullable: false
15
+ field :text, -> { String }, optional: true, nullable: false
16
+ field :media_urls, -> { Internal::Types::Array[String] }, optional: true, nullable: false, api_name: "mediaUrls"
17
+ end
18
+ end
19
+ end
@@ -7,6 +7,7 @@ module Pinnacle
7
7
  field :cost, -> { Integer }, optional: false, nullable: true
8
8
  field :delivered_at, -> { String }, optional: false, nullable: true, api_name: "deliveredAt"
9
9
  field :error, -> { String }, optional: false, nullable: true
10
+ field :fallback, -> { Pinnacle::Types::FallbackMessage }, optional: true, nullable: false
10
11
  field :id, -> { String }, optional: false, nullable: false
11
12
  field :method_, -> { Pinnacle::Types::MessageMethodEnum }, optional: false, nullable: false, api_name: "method"
12
13
  field :num_segments, -> { Integer }, optional: false, nullable: false, api_name: "numSegments"
@@ -12,6 +12,7 @@ module Pinnacle
12
12
  field :sent_at, -> { String }, optional: false, nullable: false, api_name: "sentAt"
13
13
  field :delivered_at, -> { String }, optional: true, nullable: false, api_name: "deliveredAt"
14
14
  field :message, -> { Pinnacle::Types::MessageEventContent }, optional: false, nullable: false
15
+ field :fallback_message, -> { Pinnacle::Types::MessageEventFallbackMessage }, optional: true, nullable: false, api_name: "fallbackMessage"
15
16
  end
16
17
  end
17
18
  end
@@ -6,13 +6,15 @@ module Pinnacle
6
6
  class MessageEventContent < Internal::Types::Model
7
7
  extend Pinnacle::Internal::Types::Union
8
8
 
9
- member -> { Pinnacle::Types::MessageEventSmsContent }
10
- member -> { Pinnacle::Types::MessageEventMmsContent }
11
- member -> { Pinnacle::Types::MessageEventRcsTextContent }
12
- member -> { Pinnacle::Types::MessageEventRcsMediaContent }
13
- member -> { Pinnacle::Types::MessageEventRcsCardsContent }
14
- member -> { Pinnacle::Types::MessageEventRcsButtonData }
15
- member -> { Pinnacle::Types::MessageEventRcsLocationData }
9
+ discriminant :type
10
+
11
+ member -> { Pinnacle::Types::MessageEventSmsContent }, key: "SMS"
12
+ member -> { Pinnacle::Types::MessageEventMmsContent }, key: "MMS"
13
+ member -> { Pinnacle::Types::MessageEventRcsTextContent }, key: "RCS_TEXT"
14
+ member -> { Pinnacle::Types::MessageEventRcsMediaContent }, key: "RCS_MEDIA"
15
+ member -> { Pinnacle::Types::MessageEventRcsCardsContent }, key: "RCS_CARDS"
16
+ member -> { Pinnacle::Types::MessageEventRcsButtonData }, key: "RCS_BUTTON_DATA"
17
+ member -> { Pinnacle::Types::MessageEventRcsLocationData }, key: "RCS_LOCATION_DATA"
16
18
  end
17
19
  end
18
20
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Details of the fallback SMS/MMS message that was sent instead of the original RCS message.
6
+ #
7
+ # This field is only present when the message `status` is `FALLBACK_SENT`, indicating the original RCS message could
8
+ # not be delivered and a fallback message was sent instead.
9
+ #
10
+ # Use this information to track which fallback messages were sent and their content.
11
+ class MessageEventFallbackMessage < Internal::Types::Model
12
+ field :id, -> { String }, optional: false, nullable: false
13
+ field :type, -> { Pinnacle::Types::MessageEventFallbackMessageType }, optional: false, nullable: false
14
+ field :from, -> { String }, optional: false, nullable: false
15
+ field :to, -> { String }, optional: false, nullable: false
16
+ field :text, -> { String }, optional: true, nullable: false
17
+ field :media_urls, -> { Internal::Types::Array[String] }, optional: true, nullable: false, api_name: "mediaUrls"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module MessageEventFallbackMessageType
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ SMS = "SMS"
9
+ MMS = "MMS"
10
+ end
11
+ end
12
+ end
@@ -4,7 +4,6 @@ module Pinnacle
4
4
  module Types
5
5
  # MMS message with text and/or media files from a phone number.
6
6
  class MessageEventMmsContent < Internal::Types::Model
7
- field :type, -> { String }, optional: false, nullable: false
8
7
  field :id, -> { String }, optional: false, nullable: false
9
8
  field :media_urls, -> { Internal::Types::Array[String] }, optional: false, nullable: false, api_name: "mediaUrls"
10
9
  field :text, -> { String }, optional: true, nullable: false
@@ -8,8 +8,9 @@ module Pinnacle
8
8
  # This event contains information about which button was clicked, how many times it's been clicked, and any payload
9
9
  # or metadata attached to the button. Use this data to handle user interactions with your RCS messages.
10
10
  class MessageEventRcsButtonData < Internal::Types::Model
11
- field :type, -> { String }, optional: false, nullable: false
12
11
  field :id, -> { String }, optional: false, nullable: false
12
+ field :button, -> { Pinnacle::Types::MessageEventRcsButtonDataButton }, optional: false, nullable: false
13
+ field :message_id, -> { String }, optional: false, nullable: true, api_name: "messageId"
13
14
  end
14
15
  end
15
16
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Information about the button that was clicked.
6
+ class MessageEventRcsButtonDataButton < Internal::Types::Model
7
+ field :type, -> { Pinnacle::Types::MessageEventRcsButtonDataButtonType }, optional: true, nullable: false
8
+ field :raw, -> { Pinnacle::Types::MessageEventRcsButtonDataButtonRaw }, optional: false, nullable: false
9
+ field :payload, -> { String }, optional: true, nullable: false
10
+ field :metadata, -> { String }, optional: true, nullable: false
11
+ field :clicks, -> { Integer }, optional: false, nullable: false
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Raw button data. Contains the entire button that was clicked by the user. In rare cases where we cannot determine
6
+ # the exact button, this will return only the button title.
7
+ class MessageEventRcsButtonDataButtonRaw < Internal::Types::Model
8
+ extend Pinnacle::Internal::Types::Union
9
+
10
+ member -> { Pinnacle::Types::RichButton }
11
+ member -> { String }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module MessageEventRcsButtonDataButtonType
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ CARD = "CARD"
9
+ QUICK_REPLY = "QUICK_REPLY"
10
+ end
11
+ end
12
+ end
@@ -7,7 +7,6 @@ module Pinnacle
7
7
  #
8
8
  # See [supported file types](https://app.pinnacle.sh/supported-file-types?type=RCS-CARD).
9
9
  class MessageEventRcsCardsContent < Internal::Types::Model
10
- field :type, -> { String }, optional: false, nullable: false
11
10
  field :id, -> { String }, optional: false, nullable: false
12
11
  field :cards, -> { Internal::Types::Array[Pinnacle::Types::MessageEventRcsCardsContentCardsItem] }, optional: false, nullable: false
13
12
  field :quick_replies, -> { Internal::Types::Array[Pinnacle::Types::RichButton] }, optional: false, nullable: false, api_name: "quickReplies"
@@ -8,8 +8,9 @@ module Pinnacle
8
8
  # This event contains the geographic coordinates (latitude/longitude) and human-readable address of the location the
9
9
  # user chose to share. Use this data to process location-based requests or provide location-specific services.
10
10
  class MessageEventRcsLocationData < Internal::Types::Model
11
- field :type, -> { String }, optional: false, nullable: false
12
11
  field :id, -> { String }, optional: false, nullable: false
12
+ field :data, -> { Pinnacle::Types::MessageEventRcsLocationDataData }, optional: false, nullable: false
13
+ field :message_id, -> { String }, optional: true, nullable: false, api_name: "messageId"
13
14
  end
14
15
  end
15
16
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Location data shared by the user.
6
+ class MessageEventRcsLocationDataData < Internal::Types::Model
7
+ field :address, -> { String }, optional: false, nullable: false
8
+ field :latitude, -> { Integer }, optional: false, nullable: false
9
+ field :longitude, -> { Integer }, optional: false, nullable: false
10
+ field :text, -> { String }, optional: true, nullable: false
11
+ end
12
+ end
13
+ end
@@ -6,7 +6,6 @@ module Pinnacle
6
6
  #
7
7
  # See [supported file types](https://app.pinnacle.sh/supported-file-types?type=RCS-MEDIA).
8
8
  class MessageEventRcsMediaContent < Internal::Types::Model
9
- field :type, -> { String }, optional: false, nullable: false
10
9
  field :id, -> { String }, optional: false, nullable: false
11
10
  field :media, -> { String }, optional: false, nullable: false
12
11
  field :quick_replies, -> { Internal::Types::Array[Pinnacle::Types::RichButton] }, optional: false, nullable: false, api_name: "quickReplies"
@@ -4,7 +4,6 @@ module Pinnacle
4
4
  module Types
5
5
  # RCS message containing longer text content with optional quick reply buttons.
6
6
  class MessageEventRcsTextContent < Internal::Types::Model
7
- field :type, -> { String }, optional: false, nullable: false
8
7
  field :id, -> { String }, optional: false, nullable: false
9
8
  field :quick_replies, -> { Internal::Types::Array[Pinnacle::Types::RichButton] }, optional: false, nullable: false, api_name: "quickReplies"
10
9
  field :text, -> { String }, optional: false, nullable: false
@@ -4,7 +4,6 @@ module Pinnacle
4
4
  module Types
5
5
  # SMS message containing plain text only.
6
6
  class MessageEventSmsContent < Internal::Types::Model
7
- field :type, -> { String }, optional: false, nullable: false
8
7
  field :id, -> { String }, optional: false, nullable: false
9
8
  field :text, -> { String }, optional: false, nullable: false
10
9
  end
@@ -13,6 +13,7 @@ module Pinnacle
13
13
  DELIVERY_FAILED = "DELIVERY_FAILED"
14
14
  RECEIVED = "RECEIVED"
15
15
  READ = "READ"
16
+ FALLBACK_SENT = "FALLBACK_SENT"
16
17
  end
17
18
  end
18
19
  end
@@ -5,6 +5,7 @@ module Pinnacle
5
5
  class RichCardsMessage < Internal::Types::Model
6
6
  field :options, -> { Pinnacle::Types::SendRichCardsOptions }, optional: true, nullable: false
7
7
  field :from, -> { String }, optional: false, nullable: false
8
+ field :fallback, -> { Pinnacle::Types::FallbackMessage }, optional: true, nullable: false
8
9
  field :to, -> { String }, optional: false, nullable: false
9
10
  end
10
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pinnacle
4
- VERSION = "2.0.8"
4
+ VERSION = "2.0.13"
5
5
  end
@@ -23,14 +23,11 @@ module Pinnacle
23
23
  # @return [Pinnacle::Types::WebhookResult]
24
24
  def get(request_options: {}, **params)
25
25
  params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
26
- body_prop_names = %i[identifiers]
27
- body_bag = params.slice(*body_prop_names)
28
-
29
26
  request = Pinnacle::Internal::JSON::Request.new(
30
27
  base_url: request_options[:base_url],
31
28
  method: "POST",
32
29
  path: "webhooks",
33
- body: Pinnacle::Webhooks::Types::GetWebhookParams.new(body_bag).to_h,
30
+ body: Pinnacle::Webhooks::Types::GetWebhookParams.new(params).to_h,
34
31
  request_options: request_options
35
32
  )
36
33
  begin
data/lib/pinnacle.rb CHANGED
@@ -4,7 +4,6 @@ require "json"
4
4
  require "net/http"
5
5
  require "securerandom"
6
6
 
7
- require_relative "pinnacle/version"
8
7
  require_relative "pinnacle/internal/json/serializable"
9
8
  require_relative "pinnacle/internal/types/type"
10
9
  require_relative "pinnacle/internal/types/utils"
@@ -265,6 +264,7 @@ require_relative "pinnacle/types/location_share_action_data"
265
264
  require_relative "pinnacle/types/location_share_action"
266
265
  require_relative "pinnacle/types/button_clicked"
267
266
  require_relative "pinnacle/types/message_content"
267
+ require_relative "pinnacle/types/fallback_message"
268
268
  require_relative "pinnacle/types/message_method_enum"
269
269
  require_relative "pinnacle/types/message_status_enum"
270
270
  require_relative "pinnacle/types/message_protocol_enum"
@@ -368,11 +368,17 @@ require_relative "pinnacle/types/message_event_rcs_text_content"
368
368
  require_relative "pinnacle/types/message_event_rcs_media_content"
369
369
  require_relative "pinnacle/types/message_event_rcs_cards_content_cards_item"
370
370
  require_relative "pinnacle/types/message_event_rcs_cards_content"
371
+ require_relative "pinnacle/types/message_event_rcs_button_data_button_type"
372
+ require_relative "pinnacle/types/message_event_rcs_button_data_button_raw"
373
+ require_relative "pinnacle/types/message_event_rcs_button_data_button"
371
374
  require_relative "pinnacle/types/message_event_rcs_button_data"
375
+ require_relative "pinnacle/types/message_event_rcs_location_data_data"
372
376
  require_relative "pinnacle/types/message_event_rcs_location_data"
373
377
  require_relative "pinnacle/types/message_event_content"
374
378
  require_relative "pinnacle/types/message_event_conversation"
375
379
  require_relative "pinnacle/types/message_event_direction"
380
+ require_relative "pinnacle/types/message_event_fallback_message_type"
381
+ require_relative "pinnacle/types/message_event_fallback_message"
376
382
  require_relative "pinnacle/types/message_event"
377
383
  require_relative "pinnacle/types/user_event_conversation"
378
384
  require_relative "pinnacle/types/user_event"
@@ -445,6 +451,3 @@ require_relative "pinnacle/tools/contact_card/client"
445
451
  require_relative "pinnacle/tools/contact_card/types/get_vcard_params"
446
452
  require_relative "pinnacle/tools/contact_card/types/upsert_vcard_params"
447
453
  require_relative "pinnacle/environment"
448
-
449
- # Custom client with enhanced methods (reopens Client class to add process and upload_from_path)
450
- require_relative "pinnacle/pinnacle_client"