rcs 2.0.16.pre.rc.1 → 2.0.16.pre.rc.3

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.fern/metadata.json +4 -3
  3. data/.rubocop.yml +1 -5
  4. data/lib/pinnacle/client.rb +1 -1
  5. data/lib/pinnacle/messages/client.rb +5 -0
  6. data/lib/pinnacle/messages/simulate/client.rb +50 -0
  7. data/lib/pinnacle/types/agent_summary_carrier_launches.rb +7 -1
  8. data/lib/pinnacle/types/campaign_status_event.rb +21 -0
  9. data/lib/pinnacle/types/campaign_status_event_agent.rb +11 -0
  10. data/lib/pinnacle/types/campaign_status_event_brand.rb +11 -0
  11. data/lib/pinnacle/types/campaign_status_event_campaign.rb +11 -0
  12. data/lib/pinnacle/types/campaign_status_event_campaign_type.rb +13 -0
  13. data/lib/pinnacle/types/campaign_status_event_carrier_launches.rb +13 -0
  14. data/lib/pinnacle/types/campaign_status_event_carrier_launches_carriers.rb +16 -0
  15. data/lib/pinnacle/types/campaign_status_event_carrier_launches_verification.rb +15 -0
  16. data/lib/pinnacle/types/carrier_launches.rb +5 -5
  17. data/lib/pinnacle/types/carrier_launches_carriers.rb +16 -0
  18. data/lib/pinnacle/types/carrier_launches_verification.rb +15 -0
  19. data/lib/pinnacle/types/simulate_message_input.rb +12 -0
  20. data/lib/pinnacle/types/simulate_user_button.rb +12 -0
  21. data/lib/pinnacle/types/simulate_user_message.rb +12 -0
  22. data/lib/pinnacle/types/simulate_user_params.rb +13 -0
  23. data/lib/pinnacle/types/simulate_user_response.rb +10 -0
  24. data/lib/pinnacle/types/user_button_press.rb +19 -0
  25. data/lib/pinnacle/types/user_button_press_call.rb +12 -0
  26. data/lib/pinnacle/types/user_button_press_open_url.rb +12 -0
  27. data/lib/pinnacle/types/user_button_press_request_user_location.rb +12 -0
  28. data/lib/pinnacle/types/user_button_press_request_user_location_location.rb +13 -0
  29. data/lib/pinnacle/types/user_button_press_schedule_event.rb +15 -0
  30. data/lib/pinnacle/types/user_button_press_send_location.rb +13 -0
  31. data/lib/pinnacle/types/user_button_press_send_location_lat_long.rb +11 -0
  32. data/lib/pinnacle/types/user_button_press_trigger.rb +12 -0
  33. data/lib/pinnacle/types/verification_status.rb +13 -0
  34. data/lib/pinnacle/types/webhook_event_enum.rb +1 -0
  35. data/lib/pinnacle/version.rb +1 -1
  36. data/lib/pinnacle/wrapper/messages/client.rb +7 -2
  37. data/lib/pinnacle.rb +27 -1
  38. data/reference.md +70 -1
  39. metadata +28 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2cac8fd3c68928a102bb892cd100493eb70f36a326b1c0eff8d80e9e09654a4
4
- data.tar.gz: 702ed3fc0bcafd3836774adcca8cf3f8feb54bcb6120b13c1c9523a5836d5550
3
+ metadata.gz: 3fd2da2e009d5d8ecd9a2232a8e7aa0b62505b6ab7cab02c16c3a0ad8b12e0f8
4
+ data.tar.gz: aed5b2fe008ef29a4dbe2bd925c92df56447fb9f5e9f0520eb17d9f3e324b185
5
5
  SHA512:
6
- metadata.gz: fbeabb07e1998a0f02d5cf7b02faf556e7d2595089daaf0e9f1c4be52a20eb20e130e7b631fb4ed2892fb3beddac5b07f84ddc8b11f782afbcbbd7f85adb0b80
7
- data.tar.gz: 1db2d564b8c37db520453732791d53875eff850db2bc8cf1dd5350805f696f3e482eb344d3724a434bc590903f1b49d32e937faa275d87b9239467d34071836b
6
+ metadata.gz: 498522f2c8408612371282cac32d1102f504d8914da3a8b973b085c7a60aff0f791eb4660b0928002de7fbf1df1f23a66d84c6398b3a8ad0ae811d5ba261d05e
7
+ data.tar.gz: 2525115821fc93acbcd78049df778f41eda272607d6d069f9190f71c51189296e6aabd9103bc29799c6035f765b9a3e3d75fc32ec273307ec17c3cf141042966
data/.fern/metadata.json CHANGED
@@ -5,8 +5,9 @@
5
5
  "generatorConfig": {
6
6
  "clientModuleName": "PinnacleBaseClient",
7
7
  "flattenModuleStructure": true,
8
- "useProvidedDefaults": true
8
+ "useProvidedDefaults": true,
9
+ "rubocopVariableNumberStyle": "snake_case"
9
10
  },
10
- "originGitCommit": "fb028ee5e2c6395c9680eb66d1173e55015384c0",
11
- "sdkVersion": "2.0.16.pre.rc.1"
11
+ "originGitCommit": "c9cb7751b3bf27100ed65b2122d4bc8b326d34ee",
12
+ "sdkVersion": "2.0.16.pre.rc.3"
12
13
  }
data/.rubocop.yml CHANGED
@@ -45,11 +45,7 @@ Layout/LineLength:
45
45
  Enabled: false
46
46
 
47
47
  Naming/VariableNumber:
48
- # Fern's ruby-sdk generator emits symbols like :gsm_7 / :utf_16 / :code_3
49
- # (snake_case) in generated type classes while shipping a template that
50
- # enforces `normalcase`. The two are inconsistent, so disable the cop
51
- # until the generator resolves it upstream.
52
- Enabled: false
48
+ EnforcedStyle: snake_case
53
49
 
54
50
  Style/Documentation:
55
51
  Enabled: false
@@ -10,7 +10,7 @@ module Pinnacle
10
10
  @raw_client = Pinnacle::Internal::Http::RawClient.new(
11
11
  base_url: base_url || Pinnacle::Environment::DEFAULT,
12
12
  headers: {
13
- "User-Agent" => "rcs/2.0.16.pre.rc.1",
13
+ "User-Agent" => "rcs/2.0.16.pre.rc.3",
14
14
  "X-Fern-Language" => "Ruby",
15
15
  "PINNACLE-API-KEY" => api_key.to_s
16
16
  }
@@ -146,6 +146,11 @@ module Pinnacle
146
146
  def blasts
147
147
  @blasts ||= Pinnacle::Messages::Blasts::Client.new(client: @client)
148
148
  end
149
+
150
+ # @return [Pinnacle::Simulate::Client]
151
+ def simulate
152
+ @simulate ||= Pinnacle::Messages::Simulate::Client.new(client: @client)
153
+ end
149
154
  end
150
155
  end
151
156
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Messages
5
+ module Simulate
6
+ class Client
7
+ # @param client [Pinnacle::Internal::Http::RawClient]
8
+ #
9
+ # @return [void]
10
+ def initialize(client:)
11
+ @client = client
12
+ end
13
+
14
+ # Simulate inbound messages and button presses from a user.
15
+ #
16
+ # @param request_options [Hash]
17
+ # @param params [Pinnacle::Types::SimulateUserParams]
18
+ # @option request_options [String] :base_url
19
+ # @option request_options [Hash{String => Object}] :additional_headers
20
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
21
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
22
+ # @option request_options [Integer] :timeout_in_seconds
23
+ #
24
+ # @return [Pinnacle::Types::SimulateUserResponse]
25
+ def user(request_options: {}, **params)
26
+ params = Pinnacle::Internal::Types::Utils.normalize_keys(params)
27
+ request = Pinnacle::Internal::JSON::Request.new(
28
+ base_url: request_options[:base_url],
29
+ method: "POST",
30
+ path: "messages/simulate/user",
31
+ body: Pinnacle::Types::SimulateUserParams.new(params).to_h,
32
+ request_options: request_options
33
+ )
34
+ begin
35
+ response = @client.send(request)
36
+ rescue Net::HTTPRequestTimeout
37
+ raise Pinnacle::Errors::TimeoutError
38
+ end
39
+ code = response.code.to_i
40
+ if code.between?(200, 299)
41
+ Pinnacle::Types::SimulateUserResponse.load(response.body)
42
+ else
43
+ error_class = Pinnacle::Errors::ResponseError.subclass_for_code(code)
44
+ raise error_class.new(response.body, code: code)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -2,12 +2,18 @@
2
2
 
3
3
  module Pinnacle
4
4
  module Types
5
- # Per-carrier launch status for the agent.
5
+ # Raw per-carrier launch + verification state for the agent. Each
6
+ # value is tri-state — `null` means "no launch requested" or "not
7
+ # sent yet"; `false` means "pending" / "sent"; `true` means
8
+ # "launched" / "verified". Use the [GET /rcs/{agentId}](/api-reference/rcs-agents/get)
9
+ # endpoint for the resolved enum representation.
6
10
  class AgentSummaryCarrierLaunches < Internal::Types::Model
7
11
  field :att, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "ATT"
8
12
  field :others, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "OTHERS"
9
13
  field :tmobile, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "TMOBILE"
10
14
  field :verizon, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "VERIZON"
15
+ field :aegis, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "AEGIS"
16
+ field :google, -> { Internal::Types::Boolean }, optional: true, nullable: false, api_name: "GOOGLE"
11
17
  end
12
18
  end
13
19
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Webhook body delivered to subscribers of `CAMPAIGN.STATUS` whenever
6
+ # an RCS campaign's per-carrier launch status or verification status
7
+ # (AEGIS / Google) changes. `CAMPAIGN.STATUS` is only supported for
8
+ # RCS agent senders — the attach call rejects phone-number senders
9
+ # with `400 Bad Request`. Verify the `PINNACLE-SIGNING-SECRET` header
10
+ # matches the signing secret of the webhook this event was delivered
11
+ # to before trusting the payload.
12
+ class CampaignStatusEvent < Internal::Types::Model
13
+ field :type, -> { String }, optional: false, nullable: false
14
+ field :agent, -> { Pinnacle::Types::CampaignStatusEventAgent }, optional: false, nullable: false
15
+ field :campaign, -> { Pinnacle::Types::CampaignStatusEventCampaign }, optional: false, nullable: false
16
+ field :brand, -> { Pinnacle::Types::CampaignStatusEventBrand }, optional: false, nullable: false
17
+ field :carrier_launches, -> { Pinnacle::Types::CampaignStatusEventCarrierLaunches }, optional: false, nullable: false, api_name: "carrierLaunches"
18
+ field :updated_at, -> { String }, optional: false, nullable: false, api_name: "updatedAt"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # The RCS agent the campaign-status update is for.
6
+ class CampaignStatusEventAgent < Internal::Types::Model
7
+ field :id, -> { String }, optional: false, nullable: false
8
+ field :name, -> { String }, optional: false, nullable: true
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Reference to the brand owning the agent's connected campaign.
6
+ class CampaignStatusEventBrand < Internal::Types::Model
7
+ field :public_id, -> { String }, optional: false, nullable: true, api_name: "publicId"
8
+ field :name, -> { String }, optional: false, nullable: true
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Reference to the connected campaign.
6
+ class CampaignStatusEventCampaign < Internal::Types::Model
7
+ field :public_id, -> { String }, optional: false, nullable: true, api_name: "publicId"
8
+ field :type, -> { Pinnacle::Types::CampaignStatusEventCampaignType }, optional: false, nullable: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module CampaignStatusEventCampaignType
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ RCS = "RCS"
9
+ TOLL_FREE = "TOLL_FREE"
10
+ TEN_DLC = "10DLC"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Resolved per-key launch status for the campaign's agent. Carrier
6
+ # statuses live under `carriers` and verifier statuses under
7
+ # `verification`.
8
+ class CampaignStatusEventCarrierLaunches < Internal::Types::Model
9
+ field :carriers, -> { Pinnacle::Types::CampaignStatusEventCarrierLaunchesCarriers }, optional: false, nullable: false
10
+ field :verification, -> { Pinnacle::Types::CampaignStatusEventCarrierLaunchesVerification }, optional: false, nullable: false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Per-carrier launch status. Each carrier moves through
6
+ # `NOT_LAUNCHED` → `PENDING` → `LAUNCHED` as Pinnacle submits the
7
+ # agent for review and the carrier accepts it. The agent is only
8
+ # deliverable on a carrier once that carrier reports `LAUNCHED`.
9
+ class CampaignStatusEventCarrierLaunchesCarriers < Internal::Types::Model
10
+ field :att, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "ATT"
11
+ field :tmobile, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "TMOBILE"
12
+ field :verizon, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "VERIZON"
13
+ field :others, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "OTHERS"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # External verifier status. AEGIS (the U.S. carrier vetting
6
+ # authority used by AT&T, T-Mobile, and Verizon) and Google each
7
+ # send a verification email to the brand's contact address. Each
8
+ # verifier moves through `NOT_SENT` → `SENT` → `VERIFIED` once
9
+ # the brand replies and the verifier confirms ownership.
10
+ class CampaignStatusEventCarrierLaunchesVerification < Internal::Types::Model
11
+ field :aegis, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "AEGIS"
12
+ field :google, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "GOOGLE"
13
+ end
14
+ end
15
+ end
@@ -2,12 +2,12 @@
2
2
 
3
3
  module Pinnacle
4
4
  module Types
5
- # Per-carrier launch status.
5
+ # Per-carrier launch status grouped by category. `carriers` covers
6
+ # AT&T / T-Mobile / Verizon / other carriers; `verification` covers
7
+ # the AEGIS and Google verification flows.
6
8
  class CarrierLaunches < Internal::Types::Model
7
- field :att, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "ATT"
8
- field :tmobile, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "TMOBILE"
9
- field :verizon, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "VERIZON"
10
- field :others, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "OTHERS"
9
+ field :carriers, -> { Pinnacle::Types::CarrierLaunchesCarriers }, optional: false, nullable: false
10
+ field :verification, -> { Pinnacle::Types::CarrierLaunchesVerification }, optional: false, nullable: false
11
11
  end
12
12
  end
13
13
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Per-carrier launch status. Each carrier moves through
6
+ # `NOT_LAUNCHED` → `PENDING` → `LAUNCHED` as Pinnacle submits the
7
+ # agent for review and the carrier accepts it. The agent is only
8
+ # deliverable on a carrier once that carrier reports `LAUNCHED`.
9
+ class CarrierLaunchesCarriers < Internal::Types::Model
10
+ field :att, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "ATT"
11
+ field :tmobile, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "TMOBILE"
12
+ field :verizon, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "VERIZON"
13
+ field :others, -> { Pinnacle::Types::CarrierLaunchStatus }, optional: false, nullable: false, api_name: "OTHERS"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # External verifier status. AEGIS (the U.S. carrier vetting
6
+ # authority used by AT&T, T-Mobile, and Verizon) and Google each
7
+ # send a verification email to the brand's contact address. Each
8
+ # verifier moves through `NOT_SENT` → `SENT` → `VERIFIED` once
9
+ # the brand replies and the verifier confirms ownership.
10
+ class CarrierLaunchesVerification < Internal::Types::Model
11
+ field :aegis, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "AEGIS"
12
+ field :google, -> { Pinnacle::Types::VerificationStatus }, optional: false, nullable: false, api_name: "GOOGLE"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # User message payload. At least one of `text` or `mediaUrls` must be non-empty.
6
+ # Send only `text` to simulate an inbound SMS; include `mediaUrls` to simulate an inbound MMS.
7
+ class SimulateMessageInput < Internal::Types::Model
8
+ field :text, -> { String }, optional: true, nullable: false
9
+ field :media_urls, -> { Internal::Types::Array[String] }, optional: true, nullable: false, api_name: "mediaUrls"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulate a button press from a user.
6
+ class SimulateUserButton < Internal::Types::Model
7
+ field :from, -> { String }, optional: false, nullable: false
8
+ field :to, -> { String }, optional: false, nullable: false
9
+ field :button, -> { Pinnacle::Types::UserButtonPress }, optional: false, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulate an inbound message from a user.
6
+ class SimulateUserMessage < Internal::Types::Model
7
+ field :from, -> { String }, optional: false, nullable: false
8
+ field :to, -> { String }, optional: false, nullable: false
9
+ field :message, -> { Pinnacle::Types::SimulateMessageInput }, optional: false, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Request body for simulating an inbound event from a user.
6
+ class SimulateUserParams < Internal::Types::Model
7
+ extend Pinnacle::Internal::Types::Union
8
+
9
+ member -> { Pinnacle::Types::SimulateUserMessage }
10
+ member -> { Pinnacle::Types::SimulateUserButton }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Result of the simulation.
6
+ class SimulateUserResponse < Internal::Types::Model
7
+ field :success, -> { Internal::Types::Boolean }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Discriminated union of button presses that can be simulated for a user.
6
+ class UserButtonPress < Internal::Types::Model
7
+ extend Pinnacle::Internal::Types::Union
8
+
9
+ discriminant :type
10
+
11
+ member -> { Pinnacle::Types::UserButtonPressTrigger }, key: "TRIGGER"
12
+ member -> { Pinnacle::Types::UserButtonPressOpenUrl }, key: "OPEN_URL"
13
+ member -> { Pinnacle::Types::UserButtonPressCall }, key: "CALL"
14
+ member -> { Pinnacle::Types::UserButtonPressScheduleEvent }, key: "SCHEDULE_EVENT"
15
+ member -> { Pinnacle::Types::UserButtonPressSendLocation }, key: "SEND_LOCATION"
16
+ member -> { Pinnacle::Types::UserButtonPressRequestUserLocation }, key: "REQUEST_USER_LOCATION"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses a `call` button.
6
+ class UserButtonPressCall < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :payload, -> { String }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses an `openUrl` button.
6
+ class UserButtonPressOpenUrl < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :payload, -> { String }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses a `requestUserLocation` button.
6
+ class UserButtonPressRequestUserLocation < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :location, -> { Pinnacle::Types::UserButtonPressRequestUserLocationLocation }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Location the simulated user responded with.
6
+ class UserButtonPressRequestUserLocationLocation < Internal::Types::Model
7
+ field :text, -> { String }, optional: true, nullable: false
8
+ field :latitude, -> { Integer }, optional: true, nullable: false
9
+ field :longitude, -> { Integer }, optional: true, nullable: false
10
+ field :address, -> { String }, optional: true, nullable: false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses a `scheduleEvent` button.
6
+ class UserButtonPressScheduleEvent < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :event_start_time, -> { String }, optional: true, nullable: false, api_name: "eventStartTime"
10
+ field :event_end_time, -> { String }, optional: true, nullable: false, api_name: "eventEndTime"
11
+ field :event_title, -> { String }, optional: true, nullable: false, api_name: "eventTitle"
12
+ field :event_description, -> { String }, optional: true, nullable: false, api_name: "eventDescription"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses a `sendLocation` button.
6
+ class UserButtonPressSendLocation < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :name, -> { String }, optional: true, nullable: false
10
+ field :lat_long, -> { Pinnacle::Types::UserButtonPressSendLocationLatLong }, optional: true, nullable: false, api_name: "latLong"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Shared coordinates.
6
+ class UserButtonPressSendLocationLatLong < Internal::Types::Model
7
+ field :lat, -> { Integer }, optional: true, nullable: false
8
+ field :lng, -> { Integer }, optional: true, nullable: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ # Simulates when a user presses a `trigger` button.
6
+ class UserButtonPressTrigger < Internal::Types::Model
7
+ field :title, -> { String }, optional: false, nullable: false
8
+ field :metadata, -> { String }, optional: true, nullable: false
9
+ field :payload, -> { String }, optional: true, nullable: false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pinnacle
4
+ module Types
5
+ module VerificationStatus
6
+ extend Pinnacle::Internal::Types::Enum
7
+
8
+ NOT_SENT = "NOT_SENT"
9
+ SENT = "SENT"
10
+ VERIFIED = "VERIFIED"
11
+ end
12
+ end
13
+ end
@@ -9,6 +9,7 @@ module Pinnacle
9
9
  MESSAGE_RECEIVED = "MESSAGE.RECEIVED"
10
10
  USER_TYPING = "USER.TYPING"
11
11
  FORM_SUBMISSION = "FORM.SUBMISSION"
12
+ CAMPAIGN_STATUS = "CAMPAIGN.STATUS"
12
13
  end
13
14
  end
14
15
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pinnacle
4
- VERSION = "2.0.16.pre.rc.1"
4
+ VERSION = "2.0.16.pre.rc.3"
5
5
  end
@@ -19,7 +19,7 @@ module Pinnacle
19
19
  # @param request [Hash] Request with :headers and :body keys
20
20
  # @param secret [String, nil] Webhook secret (falls back to PINNACLE_SIGNING_SECRET env var)
21
21
  #
22
- # @return [Pinnacle::Types::MessageEvent, Pinnacle::Types::UserEvent]
22
+ # @return [Pinnacle::Types::MessageEvent, Pinnacle::Types::UserEvent, Pinnacle::Types::FormSubmissionEvent, Pinnacle::Types::CampaignStatusEvent]
23
23
  # @raise [Pinnacle::Errors::UnauthorizedError] If webhook signature is invalid or missing
24
24
  # @raise [Pinnacle::Errors::ClientError] If request body cannot be parsed
25
25
  def process(request, secret: nil)
@@ -55,8 +55,13 @@ module Pinnacle
55
55
 
56
56
  parsed = body.is_a?(String) ? JSON.parse(body) : body
57
57
 
58
- if parsed["type"] == "USER.TYPING"
58
+ case parsed["type"]
59
+ when "USER.TYPING"
59
60
  Pinnacle::Types::UserEvent.coerce(parsed)
61
+ when "FORM.SUBMISSION"
62
+ Pinnacle::Types::FormSubmissionEvent.coerce(parsed)
63
+ when "CAMPAIGN.STATUS"
64
+ Pinnacle::Types::CampaignStatusEvent.coerce(parsed)
60
65
  else
61
66
  Pinnacle::Types::MessageEvent.coerce(parsed)
62
67
  end
data/lib/pinnacle.rb CHANGED
@@ -375,6 +375,20 @@ require_relative "pinnacle/types/list_scheduled_messages_response"
375
375
  require_relative "pinnacle/types/blast_summary_type"
376
376
  require_relative "pinnacle/types/blast_summary"
377
377
  require_relative "pinnacle/types/list_blasts_response"
378
+ require_relative "pinnacle/types/simulate_message_input"
379
+ require_relative "pinnacle/types/simulate_user_message"
380
+ require_relative "pinnacle/types/user_button_press_trigger"
381
+ require_relative "pinnacle/types/user_button_press_open_url"
382
+ require_relative "pinnacle/types/user_button_press_call"
383
+ require_relative "pinnacle/types/user_button_press_schedule_event"
384
+ require_relative "pinnacle/types/user_button_press_send_location_lat_long"
385
+ require_relative "pinnacle/types/user_button_press_send_location"
386
+ require_relative "pinnacle/types/user_button_press_request_user_location_location"
387
+ require_relative "pinnacle/types/user_button_press_request_user_location"
388
+ require_relative "pinnacle/types/user_button_press"
389
+ require_relative "pinnacle/types/simulate_user_button"
390
+ require_relative "pinnacle/types/simulate_user_params"
391
+ require_relative "pinnacle/types/simulate_user_response"
378
392
  require_relative "pinnacle/types/phone_feature_enum"
379
393
  require_relative "pinnacle/types/phone_enum"
380
394
  require_relative "pinnacle/types/phone_number_cost"
@@ -394,6 +408,9 @@ require_relative "pinnacle/types/detached_phone_number_result"
394
408
  require_relative "pinnacle/types/owned_phone_number"
395
409
  require_relative "pinnacle/types/list_phone_numbers_response"
396
410
  require_relative "pinnacle/types/carrier_launch_status"
411
+ require_relative "pinnacle/types/verification_status"
412
+ require_relative "pinnacle/types/carrier_launches_carriers"
413
+ require_relative "pinnacle/types/carrier_launches_verification"
397
414
  require_relative "pinnacle/types/carrier_launches"
398
415
  require_relative "pinnacle/types/rcs_agent_details_phones_item"
399
416
  require_relative "pinnacle/types/rcs_agent_details_emails_item"
@@ -503,6 +520,14 @@ require_relative "pinnacle/types/message_event_fallback_message"
503
520
  require_relative "pinnacle/types/message_event"
504
521
  require_relative "pinnacle/types/user_event_conversation"
505
522
  require_relative "pinnacle/types/user_event"
523
+ require_relative "pinnacle/types/campaign_status_event_agent"
524
+ require_relative "pinnacle/types/campaign_status_event_campaign_type"
525
+ require_relative "pinnacle/types/campaign_status_event_campaign"
526
+ require_relative "pinnacle/types/campaign_status_event_brand"
527
+ require_relative "pinnacle/types/campaign_status_event_carrier_launches_carriers"
528
+ require_relative "pinnacle/types/campaign_status_event_carrier_launches_verification"
529
+ require_relative "pinnacle/types/campaign_status_event_carrier_launches"
530
+ require_relative "pinnacle/types/campaign_status_event"
506
531
  require_relative "pinnacle/types/form_submission_event_conversation"
507
532
  require_relative "pinnacle/types/form_submission_event_form"
508
533
  require_relative "pinnacle/types/form_submission_answer"
@@ -550,10 +575,10 @@ require_relative "pinnacle/webhooks/types/detach_webhook_params"
550
575
  require_relative "pinnacle/forms/client"
551
576
  require_relative "pinnacle/forms/types/update_form_params"
552
577
  require_relative "pinnacle/forms/types/list_forms_params"
578
+ require_relative "pinnacle/campaigns/client"
553
579
  require_relative "pinnacle/audiences/contacts/client"
554
580
  require_relative "pinnacle/audiences/contacts/types/remove_contacts_params"
555
581
  require_relative "pinnacle/audiences/contacts/types/add_contacts_params"
556
- require_relative "pinnacle/campaigns/client"
557
582
  require_relative "pinnacle/campaigns/dlc/client"
558
583
  require_relative "pinnacle/campaigns/dlc/types/upsert_dlc_campaign_params"
559
584
  require_relative "pinnacle/campaigns/dlc/types/list_dlc_campaigns_params"
@@ -580,6 +605,7 @@ require_relative "pinnacle/messages/schedules/client"
580
605
  require_relative "pinnacle/messages/schedules/types/list_scheduled_messages_params"
581
606
  require_relative "pinnacle/messages/blasts/client"
582
607
  require_relative "pinnacle/messages/blasts/types/list_blasts_params"
608
+ require_relative "pinnacle/messages/simulate/client"
583
609
  require_relative "pinnacle/phone_numbers/campaign/client"
584
610
  require_relative "pinnacle/phone_numbers/campaign/types/attach_campaign_params"
585
611
  require_relative "pinnacle/phone_numbers/campaign/types/detach_campaign_params"
data/reference.md CHANGED
@@ -2855,7 +2855,7 @@ Supplying `headers` alongside `webhookId` **overwrites** the stored headers on t
2855
2855
 
2856
2856
  Event type filter for the subscription. Set to `null` to receive all events. <br>
2857
2857
 
2858
- `USER.TYPING` is only supported for RCS agent senders, not phone numbers.
2858
+ `USER.TYPING` and `CAMPAIGN.STATUS` are only supported for RCS agent senders, not phone numbers — attempting to attach either of these events to a phone number returns `400 Bad Request`.
2859
2859
 
2860
2860
  </dd>
2861
2861
  </dl>
@@ -6421,6 +6421,75 @@ client.messages.blasts.list
6421
6421
  </dl>
6422
6422
 
6423
6423
 
6424
+ </dd>
6425
+ </dl>
6426
+ </details>
6427
+
6428
+ ## Messages Simulate
6429
+ <details><summary><code>client.messages.simulate.<a href="/lib/pinnacle/messages/simulate/client.rb">user</a>(request) -> Pinnacle::Types::SimulateUserResponse</code></summary>
6430
+ <dl>
6431
+ <dd>
6432
+
6433
+ #### 📝 Description
6434
+
6435
+ <dl>
6436
+ <dd>
6437
+
6438
+ <dl>
6439
+ <dd>
6440
+
6441
+ Simulate inbound messages and button presses from a user.
6442
+ </dd>
6443
+ </dl>
6444
+ </dd>
6445
+ </dl>
6446
+
6447
+ #### 🔌 Usage
6448
+
6449
+ <dl>
6450
+ <dd>
6451
+
6452
+ <dl>
6453
+ <dd>
6454
+
6455
+ ```ruby
6456
+ client.messages.simulate.user(
6457
+ from: "+14155551234",
6458
+ to: "+14155555678",
6459
+ message: {
6460
+ text: "Hello from the test user!"
6461
+ }
6462
+ )
6463
+ ```
6464
+ </dd>
6465
+ </dl>
6466
+ </dd>
6467
+ </dl>
6468
+
6469
+ #### ⚙️ Parameters
6470
+
6471
+ <dl>
6472
+ <dd>
6473
+
6474
+ <dl>
6475
+ <dd>
6476
+
6477
+ **request:** `Pinnacle::Types::SimulateUserParams`
6478
+
6479
+ </dd>
6480
+ </dl>
6481
+
6482
+ <dl>
6483
+ <dd>
6484
+
6485
+ **request_options:** `Pinnacle::Messages::Simulate::RequestOptions`
6486
+
6487
+ </dd>
6488
+ </dl>
6489
+ </dd>
6490
+ </dl>
6491
+
6492
+
6424
6493
  </dd>
6425
6494
  </dl>
6426
6495
  </details>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rcs
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.16.pre.rc.1
4
+ version: 2.0.16.pre.rc.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pinnacle
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-04-24 00:00:00.000000000 Z
11
+ date: 2026-05-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The Pinnacle Ruby library provides convenient access to the Pinnacle
14
14
  API from Ruby.
@@ -165,6 +165,7 @@ files:
165
165
  - lib/pinnacle/messages/schedules/types/list_scheduled_messages_params.rb
166
166
  - lib/pinnacle/messages/schedules/types/list_scheduled_messages_request_schedule_type.rb
167
167
  - lib/pinnacle/messages/schedules/types/list_scheduled_messages_request_status.rb
168
+ - lib/pinnacle/messages/simulate/client.rb
168
169
  - lib/pinnacle/messages/sms/client.rb
169
170
  - lib/pinnacle/messages/sms/types/send_sms_options.rb
170
171
  - lib/pinnacle/messages/sms/types/sms.rb
@@ -278,11 +279,21 @@ files:
278
279
  - lib/pinnacle/types/buy_response_capabilities.rb
279
280
  - lib/pinnacle/types/campaign_enum.rb
280
281
  - lib/pinnacle/types/campaign_query.rb
282
+ - lib/pinnacle/types/campaign_status_event.rb
283
+ - lib/pinnacle/types/campaign_status_event_agent.rb
284
+ - lib/pinnacle/types/campaign_status_event_brand.rb
285
+ - lib/pinnacle/types/campaign_status_event_campaign.rb
286
+ - lib/pinnacle/types/campaign_status_event_campaign_type.rb
287
+ - lib/pinnacle/types/campaign_status_event_carrier_launches.rb
288
+ - lib/pinnacle/types/campaign_status_event_carrier_launches_carriers.rb
289
+ - lib/pinnacle/types/campaign_status_event_carrier_launches_verification.rb
281
290
  - lib/pinnacle/types/campaign_submission_result.rb
282
291
  - lib/pinnacle/types/campaign_validation_response_errors_item.rb
283
292
  - lib/pinnacle/types/campaign_validation_result.rb
284
293
  - lib/pinnacle/types/carrier_launch_status.rb
285
294
  - lib/pinnacle/types/carrier_launches.rb
295
+ - lib/pinnacle/types/carrier_launches_carriers.rb
296
+ - lib/pinnacle/types/carrier_launches_verification.rb
286
297
  - lib/pinnacle/types/checkbox_field.rb
287
298
  - lib/pinnacle/types/color_field.rb
288
299
  - lib/pinnacle/types/company_entity_type_enum.rb
@@ -550,6 +561,11 @@ files:
550
561
  - lib/pinnacle/types/sent_sms_details.rb
551
562
  - lib/pinnacle/types/shortened_url.rb
552
563
  - lib/pinnacle/types/shortened_url_with_click_data.rb
564
+ - lib/pinnacle/types/simulate_message_input.rb
565
+ - lib/pinnacle/types/simulate_user_button.rb
566
+ - lib/pinnacle/types/simulate_user_message.rb
567
+ - lib/pinnacle/types/simulate_user_params.rb
568
+ - lib/pinnacle/types/simulate_user_response.rb
553
569
  - lib/pinnacle/types/sms_content.rb
554
570
  - lib/pinnacle/types/sms_validation_response_segments.rb
555
571
  - lib/pinnacle/types/sms_validation_response_segments_gsm_7.rb
@@ -589,6 +605,15 @@ files:
589
605
  - lib/pinnacle/types/updated_contact_id.rb
590
606
  - lib/pinnacle/types/upload_results.rb
591
607
  - lib/pinnacle/types/url_field.rb
608
+ - lib/pinnacle/types/user_button_press.rb
609
+ - lib/pinnacle/types/user_button_press_call.rb
610
+ - lib/pinnacle/types/user_button_press_open_url.rb
611
+ - lib/pinnacle/types/user_button_press_request_user_location.rb
612
+ - lib/pinnacle/types/user_button_press_request_user_location_location.rb
613
+ - lib/pinnacle/types/user_button_press_schedule_event.rb
614
+ - lib/pinnacle/types/user_button_press_send_location.rb
615
+ - lib/pinnacle/types/user_button_press_send_location_lat_long.rb
616
+ - lib/pinnacle/types/user_button_press_trigger.rb
592
617
  - lib/pinnacle/types/user_event.rb
593
618
  - lib/pinnacle/types/user_event_conversation.rb
594
619
  - lib/pinnacle/types/v_card_address_schema_type_item.rb
@@ -609,6 +634,7 @@ files:
609
634
  - lib/pinnacle/types/vcard_email.rb
610
635
  - lib/pinnacle/types/vcard_phone.rb
611
636
  - lib/pinnacle/types/vcard_resource.rb
637
+ - lib/pinnacle/types/verification_status.rb
612
638
  - lib/pinnacle/types/vetting_feedback.rb
613
639
  - lib/pinnacle/types/vetting_history.rb
614
640
  - lib/pinnacle/types/vetting_history_vetting_status.rb