telnyx 5.60.0 → 5.61.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.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/README.md +1 -1
  4. data/lib/telnyx/client.rb +10 -5
  5. data/lib/telnyx/errors.rb +0 -10
  6. data/lib/telnyx/lib/webhook_verification.rb +172 -0
  7. data/lib/telnyx/models/ai/assistants/{tag_delete_params.rb → tag_add_params.rb} +2 -2
  8. data/lib/telnyx/models/ai/assistants/{tag_delete_response.rb → tag_add_response.rb} +2 -2
  9. data/lib/telnyx/models/ai/assistants/{tag_create_params.rb → tag_remove_params.rb} +2 -2
  10. data/lib/telnyx/models/ai/assistants/{tag_create_response.rb → tag_remove_response.rb} +2 -2
  11. data/lib/telnyx/models/call_cost_webhook_event.rb +242 -0
  12. data/lib/telnyx/models/text_to_speech_generate_params.rb +3 -3
  13. data/lib/telnyx/models/unsafe_unwrap_webhook_event.rb +3 -1
  14. data/lib/telnyx/models/unwrap_webhook_event.rb +3 -1
  15. data/lib/telnyx/models/voice_clone_create_from_design_params.rb +27 -6
  16. data/lib/telnyx/models/voice_clone_create_from_upload_params.rb +23 -2
  17. data/lib/telnyx/models/voice_clone_create_params.rb +79 -0
  18. data/lib/telnyx/models/voice_clone_create_response.rb +19 -0
  19. data/lib/telnyx/models/voice_clone_data.rb +41 -1
  20. data/lib/telnyx/models/voice_clone_list_params.rb +22 -1
  21. data/lib/telnyx/models/voice_design_create_params.rb +24 -1
  22. data/lib/telnyx/models/voice_design_data.rb +45 -1
  23. data/lib/telnyx/models/voice_design_list_response.rb +32 -1
  24. data/lib/telnyx/models/{voice_design_update_params.rb → voice_design_rename_params.rb} +2 -2
  25. data/lib/telnyx/models/{voice_design_update_response.rb → voice_design_rename_response.rb} +42 -11
  26. data/lib/telnyx/models/whatsapp/business_accounts/{phone_number_create_verification_params.rb → phone_number_initialize_verification_params.rb} +5 -5
  27. data/lib/telnyx/models/whatsapp/{message_template_create_params.rb → template_create_params.rb} +5 -5
  28. data/lib/telnyx/models/whatsapp/{message_template_create_response.rb → template_create_response.rb} +2 -2
  29. data/lib/telnyx/models/whatsapp/{message_template_list_params.rb → template_list_params.rb} +5 -5
  30. data/lib/telnyx/models/whatsapp_message_template_delete_params.rb +20 -0
  31. data/lib/telnyx/models/whatsapp_message_template_retrieve_params.rb +20 -0
  32. data/lib/telnyx/models/whatsapp_message_template_retrieve_response.rb +16 -0
  33. data/lib/telnyx/models/whatsapp_message_template_update_params.rb +44 -0
  34. data/lib/telnyx/models/whatsapp_message_template_update_response.rb +16 -0
  35. data/lib/telnyx/models/x402/{credit_account_create_payment_quote_params.rb → credit_account_create_quote_params.rb} +2 -2
  36. data/lib/telnyx/models/x402/{credit_account_create_payment_quote_response.rb → credit_account_create_quote_response.rb} +31 -32
  37. data/lib/telnyx/models/x402/{credit_account_settle_payment_params.rb → credit_account_settle_params.rb} +3 -3
  38. data/lib/telnyx/models/x402/{credit_account_settle_payment_response.rb → credit_account_settle_response.rb} +14 -15
  39. data/lib/telnyx/models.rb +12 -4
  40. data/lib/telnyx/resources/ai/assistants/tags.rb +28 -28
  41. data/lib/telnyx/resources/voice_clones.rb +38 -31
  42. data/lib/telnyx/resources/voice_designs.rb +27 -25
  43. data/lib/telnyx/resources/webhooks.rb +10 -183
  44. data/lib/telnyx/resources/whatsapp/business_accounts/phone_numbers.rb +5 -5
  45. data/lib/telnyx/resources/whatsapp/phone_numbers/profile.rb +0 -4
  46. data/lib/telnyx/resources/whatsapp/templates.rb +83 -0
  47. data/lib/telnyx/resources/whatsapp.rb +3 -3
  48. data/lib/telnyx/resources/whatsapp_message_templates.rb +81 -0
  49. data/lib/telnyx/resources/x402/credit_account.rb +13 -13
  50. data/lib/telnyx/version.rb +1 -1
  51. data/lib/telnyx.rb +25 -24
  52. data/rbi/telnyx/client.rbi +8 -4
  53. data/rbi/telnyx/models/ai/assistants/{tag_create_params.rbi → tag_add_params.rbi} +2 -2
  54. data/rbi/telnyx/models/ai/assistants/{tag_delete_response.rbi → tag_add_response.rbi} +2 -2
  55. data/rbi/telnyx/models/ai/assistants/{tag_delete_params.rbi → tag_remove_params.rbi} +2 -2
  56. data/rbi/telnyx/models/ai/assistants/{tag_create_response.rbi → tag_remove_response.rbi} +2 -2
  57. data/rbi/telnyx/models/call_cost_webhook_event.rbi +485 -0
  58. data/rbi/telnyx/models/text_to_speech_generate_params.rbi +2 -1
  59. data/rbi/telnyx/models/unsafe_unwrap_webhook_event.rbi +1 -0
  60. data/rbi/telnyx/models/unwrap_webhook_event.rbi +1 -0
  61. data/rbi/telnyx/models/voice_clone_create_from_design_params.rbi +51 -0
  62. data/rbi/telnyx/models/voice_clone_create_from_upload_params.rbi +67 -2
  63. data/rbi/telnyx/models/voice_clone_create_params.rbi +142 -0
  64. data/rbi/telnyx/models/voice_clone_create_response.rbi +36 -0
  65. data/rbi/telnyx/models/voice_clone_data.rbi +57 -0
  66. data/rbi/telnyx/models/voice_clone_list_params.rbi +62 -0
  67. data/rbi/telnyx/models/voice_design_create_params.rbi +60 -0
  68. data/rbi/telnyx/models/voice_design_data.rbi +59 -0
  69. data/rbi/telnyx/models/voice_design_list_response.rbi +73 -0
  70. data/rbi/telnyx/models/{voice_design_update_params.rbi → voice_design_rename_params.rbi} +2 -2
  71. data/rbi/telnyx/models/{voice_design_update_response.rbi → voice_design_rename_response.rbi} +90 -14
  72. data/rbi/telnyx/models/whatsapp/business_accounts/{phone_number_create_verification_params.rbi → phone_number_initialize_verification_params.rbi} +10 -10
  73. data/rbi/telnyx/models/whatsapp/{message_template_create_params.rbi → template_create_params.rbi} +10 -15
  74. data/rbi/telnyx/models/whatsapp/{message_template_create_response.rbi → template_create_response.rbi} +2 -2
  75. data/rbi/telnyx/models/whatsapp/{message_template_list_params.rbi → template_list_params.rbi} +11 -11
  76. data/rbi/telnyx/models/whatsapp_message_template_delete_params.rbi +38 -0
  77. data/rbi/telnyx/models/whatsapp_message_template_retrieve_params.rbi +38 -0
  78. data/rbi/telnyx/models/whatsapp_message_template_retrieve_response.rbi +33 -0
  79. data/rbi/telnyx/models/whatsapp_message_template_update_params.rbi +106 -0
  80. data/rbi/telnyx/models/whatsapp_message_template_update_response.rbi +33 -0
  81. data/rbi/telnyx/models/x402/{credit_account_create_payment_quote_params.rbi → credit_account_create_quote_params.rbi} +2 -2
  82. data/rbi/telnyx/models/x402/{credit_account_create_payment_quote_response.rbi → credit_account_create_quote_response.rbi} +41 -42
  83. data/rbi/telnyx/models/x402/{credit_account_settle_payment_params.rbi → credit_account_settle_params.rbi} +2 -2
  84. data/rbi/telnyx/models/x402/{credit_account_settle_payment_response.rbi → credit_account_settle_response.rbi} +21 -26
  85. data/rbi/telnyx/models.rbi +29 -3
  86. data/rbi/telnyx/resources/ai/assistants/tags.rbi +13 -13
  87. data/rbi/telnyx/resources/voice_clones.rbi +36 -25
  88. data/rbi/telnyx/resources/voice_designs.rbi +21 -17
  89. data/rbi/telnyx/resources/webhooks.rbi +12 -2
  90. data/rbi/telnyx/resources/whatsapp/business_accounts/phone_numbers.rbi +2 -2
  91. data/rbi/telnyx/resources/whatsapp/phone_numbers/profile.rbi +0 -5
  92. data/rbi/telnyx/resources/whatsapp/{message_templates.rbi → templates.rbi} +4 -51
  93. data/rbi/telnyx/resources/whatsapp.rbi +2 -2
  94. data/rbi/telnyx/resources/whatsapp_message_templates.rbi +57 -0
  95. data/rbi/telnyx/resources/x402/credit_account.rbi +4 -6
  96. data/sig/telnyx/client.rbs +4 -2
  97. data/sig/telnyx/models/ai/assistants/{tag_delete_params.rbs → tag_add_params.rbs} +2 -2
  98. data/sig/telnyx/models/ai/assistants/{tag_delete_response.rbs → tag_add_response.rbs} +2 -2
  99. data/sig/telnyx/models/ai/assistants/{tag_create_params.rbs → tag_remove_params.rbs} +2 -2
  100. data/sig/telnyx/models/ai/assistants/{tag_create_response.rbs → tag_remove_response.rbs} +2 -2
  101. data/sig/telnyx/models/call_cost_webhook_event.rbs +235 -0
  102. data/sig/telnyx/models/unsafe_unwrap_webhook_event.rbs +1 -0
  103. data/sig/telnyx/models/unwrap_webhook_event.rbs +1 -0
  104. data/sig/telnyx/models/voice_clone_create_from_design_params.rbs +23 -1
  105. data/sig/telnyx/models/voice_clone_create_from_upload_params.rbs +22 -0
  106. data/sig/telnyx/models/voice_clone_create_params.rbs +75 -0
  107. data/sig/telnyx/models/voice_clone_create_response.rbs +15 -0
  108. data/sig/telnyx/models/voice_clone_data.rbs +34 -0
  109. data/sig/telnyx/models/voice_clone_list_params.rbs +22 -0
  110. data/sig/telnyx/models/voice_design_create_params.rbs +22 -0
  111. data/sig/telnyx/models/voice_design_data.rbs +30 -0
  112. data/sig/telnyx/models/voice_design_list_response.rbs +25 -0
  113. data/sig/telnyx/models/{voice_design_update_params.rbs → voice_design_rename_params.rbs} +2 -2
  114. data/sig/telnyx/models/voice_design_rename_response.rbs +104 -0
  115. data/sig/telnyx/models/whatsapp/business_accounts/{phone_number_create_verification_params.rbs → phone_number_initialize_verification_params.rbs} +9 -9
  116. data/sig/telnyx/models/whatsapp/{message_template_create_params.rbs → template_create_params.rbs} +7 -7
  117. data/sig/telnyx/models/whatsapp/{message_template_update_response.rbs → template_create_response.rbs} +2 -3
  118. data/sig/telnyx/models/whatsapp/{message_template_list_params.rbs → template_list_params.rbs} +9 -9
  119. data/sig/telnyx/models/whatsapp_message_template_delete_params.rbs +20 -0
  120. data/sig/telnyx/models/whatsapp_message_template_retrieve_params.rbs +20 -0
  121. data/sig/telnyx/models/whatsapp_message_template_retrieve_response.rbs +16 -0
  122. data/sig/telnyx/models/whatsapp_message_template_update_params.rbs +56 -0
  123. data/sig/telnyx/models/whatsapp_message_template_update_response.rbs +16 -0
  124. data/sig/telnyx/models/x402/{credit_account_create_payment_quote_params.rbs → credit_account_create_quote_params.rbs} +2 -2
  125. data/sig/telnyx/models/x402/{credit_account_create_payment_quote_response.rbs → credit_account_create_quote_response.rbs} +46 -48
  126. data/sig/telnyx/models/x402/{credit_account_settle_payment_params.rbs → credit_account_settle_params.rbs} +2 -2
  127. data/sig/telnyx/models/x402/{credit_account_settle_payment_response.rbs → credit_account_settle_response.rbs} +22 -22
  128. data/sig/telnyx/models.rbs +12 -4
  129. data/sig/telnyx/resources/ai/assistants/tags.rbs +8 -8
  130. data/sig/telnyx/resources/voice_clones.rbs +11 -8
  131. data/sig/telnyx/resources/voice_designs.rbs +7 -6
  132. data/sig/telnyx/resources/webhooks.rbs +5 -1
  133. data/sig/telnyx/resources/whatsapp/business_accounts/phone_numbers.rbs +2 -2
  134. data/sig/telnyx/resources/whatsapp/phone_numbers/profile.rbs +0 -2
  135. data/sig/telnyx/resources/whatsapp/templates.rbs +28 -0
  136. data/sig/telnyx/resources/whatsapp.rbs +1 -1
  137. data/sig/telnyx/resources/whatsapp_message_templates.rbs +21 -0
  138. data/sig/telnyx/resources/x402/credit_account.rbs +4 -4
  139. metadata +74 -64
  140. data/lib/telnyx/models/whatsapp/message_template_delete_params.rb +0 -22
  141. data/lib/telnyx/models/whatsapp/message_template_retrieve_params.rb +0 -22
  142. data/lib/telnyx/models/whatsapp/message_template_retrieve_response.rb +0 -18
  143. data/lib/telnyx/models/whatsapp/message_template_update_params.rb +0 -46
  144. data/lib/telnyx/models/whatsapp/message_template_update_response.rb +0 -18
  145. data/lib/telnyx/resources/whatsapp/message_templates.rb +0 -149
  146. data/lib/telnyx/resources/whatsapp/phone_numbers/profile/models.rb +0 -20
  147. data/rbi/telnyx/models/whatsapp/message_template_delete_params.rbi +0 -40
  148. data/rbi/telnyx/models/whatsapp/message_template_retrieve_params.rbi +0 -40
  149. data/rbi/telnyx/models/whatsapp/message_template_retrieve_response.rbi +0 -35
  150. data/rbi/telnyx/models/whatsapp/message_template_update_params.rbi +0 -111
  151. data/rbi/telnyx/models/whatsapp/message_template_update_response.rbi +0 -35
  152. data/rbi/telnyx/resources/whatsapp/phone_numbers/profile/models.rbi +0 -18
  153. data/sig/telnyx/models/voice_design_update_response.rbs +0 -79
  154. data/sig/telnyx/models/whatsapp/message_template_create_response.rbs +0 -20
  155. data/sig/telnyx/models/whatsapp/message_template_delete_params.rbs +0 -22
  156. data/sig/telnyx/models/whatsapp/message_template_retrieve_params.rbs +0 -22
  157. data/sig/telnyx/models/whatsapp/message_template_retrieve_response.rbs +0 -20
  158. data/sig/telnyx/models/whatsapp/message_template_update_params.rbs +0 -58
  159. data/sig/telnyx/resources/whatsapp/message_templates.rbs +0 -42
  160. data/sig/telnyx/resources/whatsapp/phone_numbers/profile/models.rbs +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cc8ec3afb639cdd0d6f194a42803314ec513af449a648d86e41613a89b16740
4
- data.tar.gz: 51fbe245b539719cc8940981fa18d1248662c4b1dda908a9c03697cc493e7547
3
+ metadata.gz: 24b94b03b43786920db141b0de2225ff2b9512aa60a532e4fe6ca6427a973bdb
4
+ data.tar.gz: bd61180d457b28b94365b61d9abe1e2343db6c45b518f2833aa2592859c966d6
5
5
  SHA512:
6
- metadata.gz: 31a58bbbc11dc812323d36498c1e9f05b857583af031917f4bc9728fbb5f1dd4f4f5735a40a7ce15ce6f36dd7ecce1206d27133a4300cfcf982784bc23f12150
7
- data.tar.gz: 2a6138c3e6ed88b972db374114d3790913720896d12947302e42a2f536528854baf70f1fca36154b6e5464b30dc3359dc6b268283ec96963a80c464b215928ee
6
+ metadata.gz: 2011ecd958dacbd58e274973849204f693d00baca1832690a9c46d47974f8ddff30994d22886f3b3a13bf569ee4a6897c04179778c745697325a39a39566a07a
7
+ data.tar.gz: 0e63277727e3d7a59a9f117be177c491c800f62a756449e4c45eb864cc70e45415316f7a4b66b1ee72df609afdd2aba1e3f23f08072ff6fdf0810ac90e5e768b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.61.0 (2026-03-20)
4
+
5
+ Full Changelog: [v5.60.0...v5.61.0](https://github.com/team-telnyx/telnyx-ruby/compare/v5.60.0...v5.61.0)
6
+
7
+ ### Features
8
+
9
+ * Add Minimax provider support to Voice Designs and Voice Clones API spec ([3a2097f](https://github.com/team-telnyx/telnyx-ruby/commit/3a2097fe94eccb0272cd8583d8d7671240bcd62c))
10
+ * **api:** manual updates ([aa786f5](https://github.com/team-telnyx/telnyx-ruby/commit/aa786f59305152f954f4f3e8c58520af06d4d67d))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * add missing VoiceClone constant definitions in models.rbi ([2467121](https://github.com/team-telnyx/telnyx-ruby/commit/246712128f0966723dd43cff7ced6037af5cb48a))
16
+
17
+
18
+ ### Refactors
19
+
20
+ * move webhook verification to separate module to avoid merge conflicts ([9d9bd3c](https://github.com/team-telnyx/telnyx-ruby/commit/9d9bd3ca8b0cea43176a9fc0556ffe15dc5258f9))
21
+
3
22
  ## 5.60.0 (2026-03-20)
4
23
 
5
24
  Full Changelog: [v5.59.0...v5.60.0](https://github.com/team-telnyx/telnyx-ruby/compare/v5.59.0...v5.60.0)
data/README.md CHANGED
@@ -24,7 +24,7 @@ To use this gem, install via Bundler by adding the following to your application
24
24
  <!-- x-release-please-start-version -->
25
25
 
26
26
  ```ruby
27
- gem "telnyx", "~> 5.60.0"
27
+ gem "telnyx", "~> 5.61.0"
28
28
  ```
29
29
 
30
30
  <!-- x-release-please-end -->
data/lib/telnyx/client.rb CHANGED
@@ -620,13 +620,13 @@ module Telnyx
620
620
  # @return [Telnyx::Resources::SessionAnalysis]
621
621
  attr_reader :session_analysis
622
622
 
623
- # Traffic Policy Profiles operations
624
- # @return [Telnyx::Resources::TrafficPolicyProfiles]
625
- attr_reader :traffic_policy_profiles
626
-
627
623
  # @return [Telnyx::Resources::Whatsapp]
628
624
  attr_reader :whatsapp
629
625
 
626
+ # Manage Whatsapp message templates
627
+ # @return [Telnyx::Resources::WhatsappMessageTemplates]
628
+ attr_reader :whatsapp_message_templates
629
+
630
630
  # @return [Telnyx::Resources::X402]
631
631
  attr_reader :x402
632
632
 
@@ -639,6 +639,10 @@ module Telnyx
639
639
  # @return [Telnyx::Resources::VoiceDesigns]
640
640
  attr_reader :voice_designs
641
641
 
642
+ # Traffic Policy Profiles operations
643
+ # @return [Telnyx::Resources::TrafficPolicyProfiles]
644
+ attr_reader :traffic_policy_profiles
645
+
642
646
  # @api private
643
647
  #
644
648
  # @return [Hash{String=>String}]
@@ -887,11 +891,12 @@ module Telnyx
887
891
  @alphanumeric_sender_ids = Telnyx::Resources::AlphanumericSenderIDs.new(client: self)
888
892
  @messaging_profile_metrics = Telnyx::Resources::MessagingProfileMetrics.new(client: self)
889
893
  @session_analysis = Telnyx::Resources::SessionAnalysis.new(client: self)
890
- @traffic_policy_profiles = Telnyx::Resources::TrafficPolicyProfiles.new(client: self)
891
894
  @whatsapp = Telnyx::Resources::Whatsapp.new(client: self)
895
+ @whatsapp_message_templates = Telnyx::Resources::WhatsappMessageTemplates.new(client: self)
892
896
  @x402 = Telnyx::Resources::X402.new(client: self)
893
897
  @voice_clones = Telnyx::Resources::VoiceClones.new(client: self)
894
898
  @voice_designs = Telnyx::Resources::VoiceDesigns.new(client: self)
899
+ @traffic_policy_profiles = Telnyx::Resources::TrafficPolicyProfiles.new(client: self)
895
900
  end
896
901
  end
897
902
  end
data/lib/telnyx/errors.rb CHANGED
@@ -224,15 +224,5 @@ module Telnyx
224
224
  class InternalServerError < Telnyx::Errors::APIStatusError
225
225
  HTTP_STATUS = (500..)
226
226
  end
227
-
228
- # Raised when webhook signature verification fails.
229
- class WebhookVerificationError < Telnyx::Errors::Error
230
- # @api private
231
- #
232
- # @param message [String]
233
- def initialize(message:)
234
- super(message)
235
- end
236
- end
237
227
  end
238
228
  end
@@ -0,0 +1,172 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "base64"
4
+ require "openssl"
5
+
6
+ module Telnyx
7
+ module Lib
8
+ # Telnyx webhook verification using ED25519 signatures.
9
+ #
10
+ # This module provides ED25519 signature verification for Telnyx webhooks,
11
+ # matching the implementation pattern used in the Python and Node SDKs.
12
+ #
13
+ # The module is kept separate from generated code to avoid merge conflicts
14
+ # when Stainless updates webhook event types.
15
+ #
16
+ # Example usage:
17
+ #
18
+ # client = Telnyx::Client.new(
19
+ # api_key: ENV["TELNYX_API_KEY"],
20
+ # public_key: ENV["TELNYX_PUBLIC_KEY"] # Base64 from Mission Control
21
+ # )
22
+ #
23
+ # # Verify signature only
24
+ # client.webhooks.verify!(payload, headers)
25
+ #
26
+ # # Verify and parse
27
+ # event = client.webhooks.unwrap(payload, headers)
28
+ #
29
+ module WebhookVerification
30
+ # Telnyx webhook signature headers (case-insensitive per HTTP spec)
31
+ SIGNATURE_HEADER = "telnyx-signature-ed25519"
32
+ TIMESTAMP_HEADER = "telnyx-timestamp"
33
+
34
+ # Tolerance for timestamp validation (5 minutes)
35
+ TIMESTAMP_TOLERANCE_SECONDS = 300
36
+
37
+ # Verify webhook signature without parsing the payload.
38
+ #
39
+ # @param payload [String] The raw webhook payload
40
+ # @param headers [Hash] The webhook headers
41
+ # @param key [String, nil] Optional public key override (base64-encoded)
42
+ #
43
+ # @return [void]
44
+ #
45
+ # @raise [Telnyx::Errors::WebhookVerificationError] If verification fails
46
+ def verify!(payload, headers, key: nil)
47
+ public_key = key || @client.public_key
48
+
49
+ unless public_key && !public_key.empty?
50
+ raise Telnyx::Errors::WebhookVerificationError.new(
51
+ message: "No public key configured. Provide key parameter or configure client with public_key."
52
+ )
53
+ end
54
+
55
+ do_verify_signature(payload, headers, public_key)
56
+ end
57
+
58
+ private
59
+
60
+ # Get header value case-insensitively
61
+ #
62
+ # @param headers [Hash] The headers hash
63
+ # @param key [String] The header key to find
64
+ #
65
+ # @return [String, nil]
66
+ def get_header(headers, key)
67
+ key_lower = key.downcase
68
+ headers.each do |header_key, header_value|
69
+ return header_value if header_key.to_s.downcase == key_lower
70
+ end
71
+ nil
72
+ end
73
+
74
+ # Verify the webhook signature using ED25519 cryptography
75
+ #
76
+ # @param payload [String] The raw webhook payload
77
+ # @param headers [Hash] The webhook headers
78
+ # @param public_key [String] The ED25519 public key (base64-encoded)
79
+ #
80
+ # @raise [Telnyx::Errors::WebhookVerificationError] If verification fails
81
+ def do_verify_signature(payload, headers, public_key)
82
+ # Extract required headers (case-insensitive)
83
+ signature_header = get_header(headers, SIGNATURE_HEADER)
84
+ timestamp_header = get_header(headers, TIMESTAMP_HEADER)
85
+
86
+ unless signature_header
87
+ raise Telnyx::Errors::WebhookVerificationError.new(
88
+ message: "Missing required header: #{SIGNATURE_HEADER}"
89
+ )
90
+ end
91
+
92
+ unless timestamp_header
93
+ raise Telnyx::Errors::WebhookVerificationError.new(
94
+ message: "Missing required header: #{TIMESTAMP_HEADER}"
95
+ )
96
+ end
97
+
98
+ # Validate timestamp to prevent replay attacks (5 minute tolerance)
99
+ begin
100
+ webhook_time = Integer(timestamp_header)
101
+ current_time = Time.now.to_i
102
+ time_diff = (current_time - webhook_time).abs
103
+
104
+ if time_diff > TIMESTAMP_TOLERANCE_SECONDS
105
+ raise Telnyx::Errors::WebhookVerificationError.new(
106
+ message: "Webhook timestamp is too old or too new (#{time_diff}s difference)"
107
+ )
108
+ end
109
+ rescue ArgumentError
110
+ raise Telnyx::Errors::WebhookVerificationError.new(
111
+ message: "Invalid timestamp format: #{timestamp_header}"
112
+ )
113
+ end
114
+
115
+ # Decode public key from base64
116
+ begin
117
+ public_key_bytes = Base64.strict_decode64(public_key)
118
+
119
+ if public_key_bytes.bytesize != 32
120
+ raise Telnyx::Errors::WebhookVerificationError.new(
121
+ message: "Invalid public key: expected 32 bytes, got #{public_key_bytes.bytesize} bytes"
122
+ )
123
+ end
124
+ rescue ArgumentError => e
125
+ raise Telnyx::Errors::WebhookVerificationError.new(
126
+ message: "Invalid public key format: #{e.message}"
127
+ )
128
+ end
129
+
130
+ # Decode signature from base64
131
+ begin
132
+ signature_bytes = Base64.strict_decode64(signature_header)
133
+
134
+ if signature_bytes.bytesize != 64
135
+ raise Telnyx::Errors::WebhookVerificationError.new(
136
+ message: "Invalid signature length: expected 64 bytes, got #{signature_bytes.bytesize} bytes"
137
+ )
138
+ end
139
+ rescue ArgumentError => e
140
+ raise Telnyx::Errors::WebhookVerificationError.new(
141
+ message: "Invalid signature format: #{e.message}"
142
+ )
143
+ end
144
+
145
+ # Create the signed payload: timestamp|payload
146
+ signed_payload = "#{timestamp_header}|#{payload}"
147
+
148
+ # Build ED25519 public key for verification
149
+ # The raw 32-byte key needs to be wrapped in X.509 SubjectPublicKeyInfo format
150
+ # ED25519 OID: 1.3.101.112 = 06 03 2b 65 70
151
+ # X.509 SPKI header for ED25519: 30 2a 30 05 06 03 2b 65 70 03 21 00
152
+ ed25519_spki_header = [0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00].pack("C*")
153
+ der_key = ed25519_spki_header + public_key_bytes
154
+
155
+ begin
156
+ pkey = OpenSSL::PKey.read(der_key)
157
+ valid = pkey.verify(nil, signature_bytes, signed_payload)
158
+
159
+ unless valid
160
+ raise Telnyx::Errors::WebhookVerificationError.new(
161
+ message: "Signature verification failed: signature does not match payload"
162
+ )
163
+ end
164
+ rescue OpenSSL::PKey::PKeyError => e
165
+ raise Telnyx::Errors::WebhookVerificationError.new(
166
+ message: "Signature verification failed: #{e.message}"
167
+ )
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
@@ -4,8 +4,8 @@ module Telnyx
4
4
  module Models
5
5
  module AI
6
6
  module Assistants
7
- # @see Telnyx::Resources::AI::Assistants::Tags#delete
8
- class TagDeleteParams < Telnyx::Internal::Type::BaseModel
7
+ # @see Telnyx::Resources::AI::Assistants::Tags#add
8
+ class TagAddParams < Telnyx::Internal::Type::BaseModel
9
9
  extend Telnyx::Internal::Type::RequestParameters::Converter
10
10
  include Telnyx::Internal::Type::RequestParameters
11
11
 
@@ -4,8 +4,8 @@ module Telnyx
4
4
  module Models
5
5
  module AI
6
6
  module Assistants
7
- # @see Telnyx::Resources::AI::Assistants::Tags#delete
8
- class TagDeleteResponse < Telnyx::Internal::Type::BaseModel
7
+ # @see Telnyx::Resources::AI::Assistants::Tags#add
8
+ class TagAddResponse < Telnyx::Internal::Type::BaseModel
9
9
  # @!attribute tags
10
10
  #
11
11
  # @return [Array<String>]
@@ -4,8 +4,8 @@ module Telnyx
4
4
  module Models
5
5
  module AI
6
6
  module Assistants
7
- # @see Telnyx::Resources::AI::Assistants::Tags#create
8
- class TagCreateParams < Telnyx::Internal::Type::BaseModel
7
+ # @see Telnyx::Resources::AI::Assistants::Tags#remove
8
+ class TagRemoveParams < Telnyx::Internal::Type::BaseModel
9
9
  extend Telnyx::Internal::Type::RequestParameters::Converter
10
10
  include Telnyx::Internal::Type::RequestParameters
11
11
 
@@ -4,8 +4,8 @@ module Telnyx
4
4
  module Models
5
5
  module AI
6
6
  module Assistants
7
- # @see Telnyx::Resources::AI::Assistants::Tags#create
8
- class TagCreateResponse < Telnyx::Internal::Type::BaseModel
7
+ # @see Telnyx::Resources::AI::Assistants::Tags#remove
8
+ class TagRemoveResponse < Telnyx::Internal::Type::BaseModel
9
9
  # @!attribute tags
10
10
  #
11
11
  # @return [Array<String>]
@@ -0,0 +1,242 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Telnyx
4
+ module Models
5
+ class CallCostWebhookEvent < Telnyx::Internal::Type::BaseModel
6
+ # @!attribute data
7
+ #
8
+ # @return [Telnyx::Models::CallCostWebhookEvent::Data, nil]
9
+ optional :data, -> { Telnyx::CallCostWebhookEvent::Data }
10
+
11
+ # @!method initialize(data: nil)
12
+ # @param data [Telnyx::Models::CallCostWebhookEvent::Data]
13
+
14
+ # @see Telnyx::Models::CallCostWebhookEvent#data
15
+ class Data < Telnyx::Internal::Type::BaseModel
16
+ # @!attribute id
17
+ # Unique identifier of the event.
18
+ #
19
+ # @return [String, nil]
20
+ optional :id, String
21
+
22
+ # @!attribute event_type
23
+ # The type of event being delivered.
24
+ #
25
+ # @return [Symbol, Telnyx::Models::CallCostWebhookEvent::Data::EventType, nil]
26
+ optional :event_type, enum: -> { Telnyx::CallCostWebhookEvent::Data::EventType }
27
+
28
+ # @!attribute occurred_at
29
+ # ISO 8601 datetime of when the event occurred.
30
+ #
31
+ # @return [Time, nil]
32
+ optional :occurred_at, Time
33
+
34
+ # @!attribute payload
35
+ #
36
+ # @return [Telnyx::Models::CallCostWebhookEvent::Data::Payload, nil]
37
+ optional :payload, -> { Telnyx::CallCostWebhookEvent::Data::Payload }
38
+
39
+ # @!attribute record_type
40
+ # Identifies the type of the resource.
41
+ #
42
+ # @return [Symbol, Telnyx::Models::CallCostWebhookEvent::Data::RecordType, nil]
43
+ optional :record_type, enum: -> { Telnyx::CallCostWebhookEvent::Data::RecordType }
44
+
45
+ # @!method initialize(id: nil, event_type: nil, occurred_at: nil, payload: nil, record_type: nil)
46
+ # @param id [String] Unique identifier of the event.
47
+ #
48
+ # @param event_type [Symbol, Telnyx::Models::CallCostWebhookEvent::Data::EventType] The type of event being delivered.
49
+ #
50
+ # @param occurred_at [Time] ISO 8601 datetime of when the event occurred.
51
+ #
52
+ # @param payload [Telnyx::Models::CallCostWebhookEvent::Data::Payload]
53
+ #
54
+ # @param record_type [Symbol, Telnyx::Models::CallCostWebhookEvent::Data::RecordType] Identifies the type of the resource.
55
+
56
+ # The type of event being delivered.
57
+ #
58
+ # @see Telnyx::Models::CallCostWebhookEvent::Data#event_type
59
+ module EventType
60
+ extend Telnyx::Internal::Type::Enum
61
+
62
+ CALL_COST = :"call.cost"
63
+
64
+ # @!method self.values
65
+ # @return [Array<Symbol>]
66
+ end
67
+
68
+ # @see Telnyx::Models::CallCostWebhookEvent::Data#payload
69
+ class Payload < Telnyx::Internal::Type::BaseModel
70
+ # @!attribute billed_duration_secs
71
+ # The longest billed duration across all cost parts, in seconds.
72
+ #
73
+ # @return [Integer, nil]
74
+ optional :billed_duration_secs, Integer, nil?: true
75
+
76
+ # @!attribute billing_group_id
77
+ # Identifies the billing group associated with the call.
78
+ #
79
+ # @return [String, nil]
80
+ optional :billing_group_id, String, nil?: true
81
+
82
+ # @!attribute call_control_id
83
+ # Call ID used to issue commands via Call Control API.
84
+ #
85
+ # @return [String, nil]
86
+ optional :call_control_id, String
87
+
88
+ # @!attribute call_leg_id
89
+ # ID that is unique to the call and can be used to correlate webhook events.
90
+ #
91
+ # @return [String, nil]
92
+ optional :call_leg_id, String
93
+
94
+ # @!attribute call_session_id
95
+ # ID that is unique to the call session and can be used to correlate webhook
96
+ # events. Call session is a group of related call legs that logically belong to
97
+ # the same phone call, e.g. an inbound and outbound leg of a transferred call.
98
+ #
99
+ # @return [String, nil]
100
+ optional :call_session_id, String
101
+
102
+ # @!attribute client_state
103
+ # State received from a command. Base64-encoded.
104
+ #
105
+ # @return [String, nil]
106
+ optional :client_state, String
107
+
108
+ # @!attribute connection_id
109
+ # Call Control App ID (formerly Telnyx connection ID) used in the call.
110
+ #
111
+ # @return [String, nil]
112
+ optional :connection_id, String
113
+
114
+ # @!attribute cost_parts
115
+ # Breakdown of costs by call part.
116
+ #
117
+ # @return [Array<Telnyx::Models::CallCostWebhookEvent::Data::Payload::CostPart>, nil]
118
+ optional :cost_parts,
119
+ -> { Telnyx::Internal::Type::ArrayOf[Telnyx::CallCostWebhookEvent::Data::Payload::CostPart] }
120
+
121
+ # @!attribute occurred_at
122
+ # ISO 8601 datetime of when the event occurred.
123
+ #
124
+ # @return [Time, nil]
125
+ optional :occurred_at, Time
126
+
127
+ # @!attribute status
128
+ # The status of the cost calculation (`success` or `error`).
129
+ #
130
+ # @return [Symbol, Telnyx::Models::CallCostWebhookEvent::Data::Payload::Status, nil]
131
+ optional :status, enum: -> { Telnyx::CallCostWebhookEvent::Data::Payload::Status }
132
+
133
+ # @!attribute total_cost
134
+ # The total cost of the call.
135
+ #
136
+ # @return [String, nil]
137
+ optional :total_cost, String, nil?: true
138
+
139
+ # @!method initialize(billed_duration_secs: nil, billing_group_id: nil, call_control_id: nil, call_leg_id: nil, call_session_id: nil, client_state: nil, connection_id: nil, cost_parts: nil, occurred_at: nil, status: nil, total_cost: nil)
140
+ # Some parameter documentations has been truncated, see
141
+ # {Telnyx::Models::CallCostWebhookEvent::Data::Payload} for more details.
142
+ #
143
+ # @param billed_duration_secs [Integer, nil] The longest billed duration across all cost parts, in seconds.
144
+ #
145
+ # @param billing_group_id [String, nil] Identifies the billing group associated with the call.
146
+ #
147
+ # @param call_control_id [String] Call ID used to issue commands via Call Control API.
148
+ #
149
+ # @param call_leg_id [String] ID that is unique to the call and can be used to correlate webhook events.
150
+ #
151
+ # @param call_session_id [String] ID that is unique to the call session and can be used to correlate webhook event
152
+ #
153
+ # @param client_state [String] State received from a command. Base64-encoded.
154
+ #
155
+ # @param connection_id [String] Call Control App ID (formerly Telnyx connection ID) used in the call.
156
+ #
157
+ # @param cost_parts [Array<Telnyx::Models::CallCostWebhookEvent::Data::Payload::CostPart>] Breakdown of costs by call part.
158
+ #
159
+ # @param occurred_at [Time] ISO 8601 datetime of when the event occurred.
160
+ #
161
+ # @param status [Symbol, Telnyx::Models::CallCostWebhookEvent::Data::Payload::Status] The status of the cost calculation (`success` or `error`).
162
+ #
163
+ # @param total_cost [String, nil] The total cost of the call.
164
+
165
+ class CostPart < Telnyx::Internal::Type::BaseModel
166
+ # @!attribute billed_duration_secs
167
+ # The billed duration in seconds for this part of the call.
168
+ #
169
+ # @return [Integer, nil]
170
+ optional :billed_duration_secs, Integer
171
+
172
+ # @!attribute call_part
173
+ # The product component this cost applies to. Values are determined by the billing
174
+ # system (e.g. sip-trunking, call-control, call-recording). Not a fixed set — new
175
+ # values may appear as products evolve.
176
+ #
177
+ # @return [String, nil]
178
+ optional :call_part, String
179
+
180
+ # @!attribute cost
181
+ # The cost for this part of the call.
182
+ #
183
+ # @return [String, nil]
184
+ optional :cost, String
185
+
186
+ # @!attribute currency
187
+ # The currency of the cost.
188
+ #
189
+ # @return [String, nil]
190
+ optional :currency, String
191
+
192
+ # @!attribute rate
193
+ # The per-minute rate applied.
194
+ #
195
+ # @return [String, nil]
196
+ optional :rate, String
197
+
198
+ # @!method initialize(billed_duration_secs: nil, call_part: nil, cost: nil, currency: nil, rate: nil)
199
+ # Some parameter documentations has been truncated, see
200
+ # {Telnyx::Models::CallCostWebhookEvent::Data::Payload::CostPart} for more
201
+ # details.
202
+ #
203
+ # @param billed_duration_secs [Integer] The billed duration in seconds for this part of the call.
204
+ #
205
+ # @param call_part [String] The product component this cost applies to. Values are determined by the billing
206
+ #
207
+ # @param cost [String] The cost for this part of the call.
208
+ #
209
+ # @param currency [String] The currency of the cost.
210
+ #
211
+ # @param rate [String] The per-minute rate applied.
212
+ end
213
+
214
+ # The status of the cost calculation (`success` or `error`).
215
+ #
216
+ # @see Telnyx::Models::CallCostWebhookEvent::Data::Payload#status
217
+ module Status
218
+ extend Telnyx::Internal::Type::Enum
219
+
220
+ SUCCESS = :success
221
+ ERROR = :error
222
+
223
+ # @!method self.values
224
+ # @return [Array<Symbol>]
225
+ end
226
+ end
227
+
228
+ # Identifies the type of the resource.
229
+ #
230
+ # @see Telnyx::Models::CallCostWebhookEvent::Data#record_type
231
+ module RecordType
232
+ extend Telnyx::Internal::Type::Enum
233
+
234
+ EVENT = :event
235
+
236
+ # @!method self.values
237
+ # @return [Array<Symbol>]
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Telnyx
4
4
  module Models
5
- # @see ::Telnyx::Resources::TextToSpeech#generate
5
+ # @see Telnyx::Resources::TextToSpeech#generate
6
6
  class TextToSpeechGenerateParams < ::Telnyx::Internal::Type::BaseModel
7
7
  extend ::Telnyx::Internal::Type::RequestParameters::Converter
8
8
  include ::Telnyx::Internal::Type::RequestParameters
@@ -188,7 +188,7 @@ module Telnyx
188
188
 
189
189
  # Input text type.
190
190
  #
191
- # @see ::Telnyx::Models::TextToSpeechGenerateParams::Aws#text_type
191
+ # @see Telnyx::Models::TextToSpeechGenerateParams::Aws#text_type
192
192
  module TextType
193
193
  extend ::Telnyx::Internal::Type::Enum
194
194
 
@@ -270,7 +270,7 @@ module Telnyx
270
270
 
271
271
  # Input text type. Use `ssml` for SSML-formatted input.
272
272
  #
273
- # @see ::Telnyx::Models::TextToSpeechGenerateParams::Azure#text_type
273
+ # @see Telnyx::Models::TextToSpeechGenerateParams::Azure#text_type
274
274
  module TextType
275
275
  extend ::Telnyx::Internal::Type::Enum
276
276
 
@@ -19,6 +19,8 @@ module Telnyx
19
19
 
20
20
  variant -> { Telnyx::CallConversationInsightsGeneratedWebhookEvent }
21
21
 
22
+ variant -> { Telnyx::CallCostWebhookEvent }
23
+
22
24
  variant -> { Telnyx::CallDtmfReceivedWebhookEvent }
23
25
 
24
26
  variant -> { Telnyx::CallEnqueuedWebhookEvent }
@@ -126,7 +128,7 @@ module Telnyx
126
128
  variant -> { Telnyx::TranscriptionWebhookEvent }
127
129
 
128
130
  # @!method self.variants
129
- # @return [Array(Telnyx::Models::CallAIGatherEndedWebhookEvent, Telnyx::Models::CallAIGatherMessageHistoryUpdatedWebhookEvent, Telnyx::Models::CallAIGatherPartialResultsWebhookEvent, Telnyx::Models::CallAnsweredWebhookEvent, Telnyx::Models::CallBridgedWebhookEvent, Telnyx::Models::CallConversationEndedWebhookEvent, Telnyx::Models::CallConversationInsightsGeneratedWebhookEvent, Telnyx::Models::CallDtmfReceivedWebhookEvent, Telnyx::Models::CallEnqueuedWebhookEvent, Telnyx::Models::CallForkStartedWebhookEvent, Telnyx::Models::CallForkStoppedWebhookEvent, Telnyx::Models::CallGatherEndedWebhookEvent, Telnyx::Models::CallHangupWebhookEvent, Telnyx::Models::CallInitiatedWebhookEvent, Telnyx::Models::CallLeftQueueWebhookEvent, Telnyx::Models::CallMachineDetectionEndedWebhookEvent, Telnyx::Models::CallMachineGreetingEndedWebhookEvent, Telnyx::Models::CallMachinePremiumDetectionEndedWebhookEvent, Telnyx::Models::CallMachinePremiumGreetingEndedWebhookEvent, Telnyx::Models::CallPlaybackEndedWebhookEvent, Telnyx::Models::CallPlaybackStartedWebhookEvent, Telnyx::Models::CallRecordingErrorWebhookEvent, Telnyx::Models::CallRecordingSavedWebhookEvent, Telnyx::Models::CallRecordingTranscriptionSavedWebhookEvent, Telnyx::Models::CallReferCompletedWebhookEvent, Telnyx::Models::CallReferFailedWebhookEvent, Telnyx::Models::CallReferStartedWebhookEvent, Telnyx::Models::CallSiprecFailedWebhookEvent, Telnyx::Models::CallSiprecStartedWebhookEvent, Telnyx::Models::CallSiprecStoppedWebhookEvent, Telnyx::Models::CallSpeakEndedWebhookEvent, Telnyx::Models::CallSpeakStartedWebhookEvent, Telnyx::Models::CallStreamingFailedWebhookEvent, Telnyx::Models::CallStreamingStartedWebhookEvent, Telnyx::Models::CallStreamingStoppedWebhookEvent, Telnyx::Models::CampaignStatusUpdate, Telnyx::Models::ConferenceCreatedWebhookEvent, Telnyx::Models::ConferenceEndedWebhookEvent, Telnyx::Models::ConferenceFloorChanged, Telnyx::Models::ConferenceParticipantJoinedWebhookEvent, Telnyx::Models::ConferenceParticipantLeftWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackEndedWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackStartedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakEndedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakStartedWebhookEvent, Telnyx::Models::ConferencePlaybackEndedWebhookEvent, Telnyx::Models::ConferencePlaybackStartedWebhookEvent, Telnyx::Models::ConferenceRecordingSavedWebhookEvent, Telnyx::Models::ConferenceSpeakEndedWebhookEvent, Telnyx::Models::ConferenceSpeakStartedWebhookEvent, Telnyx::Models::DeliveryUpdateWebhookEvent, Telnyx::Models::FaxDelivered, Telnyx::Models::FaxFailed, Telnyx::Models::FaxMediaProcessed, Telnyx::Models::FaxQueued, Telnyx::Models::FaxSendingStarted, Telnyx::Models::InboundMessageWebhookEvent, Telnyx::Models::NumberOrderStatusUpdate, Telnyx::Models::ReplacedLinkClickWebhookEvent, Telnyx::Models::TranscriptionWebhookEvent)]
131
+ # @return [Array(Telnyx::Models::CallAIGatherEndedWebhookEvent, Telnyx::Models::CallAIGatherMessageHistoryUpdatedWebhookEvent, Telnyx::Models::CallAIGatherPartialResultsWebhookEvent, Telnyx::Models::CallAnsweredWebhookEvent, Telnyx::Models::CallBridgedWebhookEvent, Telnyx::Models::CallConversationEndedWebhookEvent, Telnyx::Models::CallConversationInsightsGeneratedWebhookEvent, Telnyx::Models::CallCostWebhookEvent, Telnyx::Models::CallDtmfReceivedWebhookEvent, Telnyx::Models::CallEnqueuedWebhookEvent, Telnyx::Models::CallForkStartedWebhookEvent, Telnyx::Models::CallForkStoppedWebhookEvent, Telnyx::Models::CallGatherEndedWebhookEvent, Telnyx::Models::CallHangupWebhookEvent, Telnyx::Models::CallInitiatedWebhookEvent, Telnyx::Models::CallLeftQueueWebhookEvent, Telnyx::Models::CallMachineDetectionEndedWebhookEvent, Telnyx::Models::CallMachineGreetingEndedWebhookEvent, Telnyx::Models::CallMachinePremiumDetectionEndedWebhookEvent, Telnyx::Models::CallMachinePremiumGreetingEndedWebhookEvent, Telnyx::Models::CallPlaybackEndedWebhookEvent, Telnyx::Models::CallPlaybackStartedWebhookEvent, Telnyx::Models::CallRecordingErrorWebhookEvent, Telnyx::Models::CallRecordingSavedWebhookEvent, Telnyx::Models::CallRecordingTranscriptionSavedWebhookEvent, Telnyx::Models::CallReferCompletedWebhookEvent, Telnyx::Models::CallReferFailedWebhookEvent, Telnyx::Models::CallReferStartedWebhookEvent, Telnyx::Models::CallSiprecFailedWebhookEvent, Telnyx::Models::CallSiprecStartedWebhookEvent, Telnyx::Models::CallSiprecStoppedWebhookEvent, Telnyx::Models::CallSpeakEndedWebhookEvent, Telnyx::Models::CallSpeakStartedWebhookEvent, Telnyx::Models::CallStreamingFailedWebhookEvent, Telnyx::Models::CallStreamingStartedWebhookEvent, Telnyx::Models::CallStreamingStoppedWebhookEvent, Telnyx::Models::CampaignStatusUpdate, Telnyx::Models::ConferenceCreatedWebhookEvent, Telnyx::Models::ConferenceEndedWebhookEvent, Telnyx::Models::ConferenceFloorChanged, Telnyx::Models::ConferenceParticipantJoinedWebhookEvent, Telnyx::Models::ConferenceParticipantLeftWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackEndedWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackStartedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakEndedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakStartedWebhookEvent, Telnyx::Models::ConferencePlaybackEndedWebhookEvent, Telnyx::Models::ConferencePlaybackStartedWebhookEvent, Telnyx::Models::ConferenceRecordingSavedWebhookEvent, Telnyx::Models::ConferenceSpeakEndedWebhookEvent, Telnyx::Models::ConferenceSpeakStartedWebhookEvent, Telnyx::Models::DeliveryUpdateWebhookEvent, Telnyx::Models::FaxDelivered, Telnyx::Models::FaxFailed, Telnyx::Models::FaxMediaProcessed, Telnyx::Models::FaxQueued, Telnyx::Models::FaxSendingStarted, Telnyx::Models::InboundMessageWebhookEvent, Telnyx::Models::NumberOrderStatusUpdate, Telnyx::Models::ReplacedLinkClickWebhookEvent, Telnyx::Models::TranscriptionWebhookEvent)]
130
132
  end
131
133
  end
132
134
  end
@@ -19,6 +19,8 @@ module Telnyx
19
19
 
20
20
  variant -> { Telnyx::CallConversationInsightsGeneratedWebhookEvent }
21
21
 
22
+ variant -> { Telnyx::CallCostWebhookEvent }
23
+
22
24
  variant -> { Telnyx::CallDtmfReceivedWebhookEvent }
23
25
 
24
26
  variant -> { Telnyx::CallEnqueuedWebhookEvent }
@@ -126,7 +128,7 @@ module Telnyx
126
128
  variant -> { Telnyx::TranscriptionWebhookEvent }
127
129
 
128
130
  # @!method self.variants
129
- # @return [Array(Telnyx::Models::CallAIGatherEndedWebhookEvent, Telnyx::Models::CallAIGatherMessageHistoryUpdatedWebhookEvent, Telnyx::Models::CallAIGatherPartialResultsWebhookEvent, Telnyx::Models::CallAnsweredWebhookEvent, Telnyx::Models::CallBridgedWebhookEvent, Telnyx::Models::CallConversationEndedWebhookEvent, Telnyx::Models::CallConversationInsightsGeneratedWebhookEvent, Telnyx::Models::CallDtmfReceivedWebhookEvent, Telnyx::Models::CallEnqueuedWebhookEvent, Telnyx::Models::CallForkStartedWebhookEvent, Telnyx::Models::CallForkStoppedWebhookEvent, Telnyx::Models::CallGatherEndedWebhookEvent, Telnyx::Models::CallHangupWebhookEvent, Telnyx::Models::CallInitiatedWebhookEvent, Telnyx::Models::CallLeftQueueWebhookEvent, Telnyx::Models::CallMachineDetectionEndedWebhookEvent, Telnyx::Models::CallMachineGreetingEndedWebhookEvent, Telnyx::Models::CallMachinePremiumDetectionEndedWebhookEvent, Telnyx::Models::CallMachinePremiumGreetingEndedWebhookEvent, Telnyx::Models::CallPlaybackEndedWebhookEvent, Telnyx::Models::CallPlaybackStartedWebhookEvent, Telnyx::Models::CallRecordingErrorWebhookEvent, Telnyx::Models::CallRecordingSavedWebhookEvent, Telnyx::Models::CallRecordingTranscriptionSavedWebhookEvent, Telnyx::Models::CallReferCompletedWebhookEvent, Telnyx::Models::CallReferFailedWebhookEvent, Telnyx::Models::CallReferStartedWebhookEvent, Telnyx::Models::CallSiprecFailedWebhookEvent, Telnyx::Models::CallSiprecStartedWebhookEvent, Telnyx::Models::CallSiprecStoppedWebhookEvent, Telnyx::Models::CallSpeakEndedWebhookEvent, Telnyx::Models::CallSpeakStartedWebhookEvent, Telnyx::Models::CallStreamingFailedWebhookEvent, Telnyx::Models::CallStreamingStartedWebhookEvent, Telnyx::Models::CallStreamingStoppedWebhookEvent, Telnyx::Models::CampaignStatusUpdate, Telnyx::Models::ConferenceCreatedWebhookEvent, Telnyx::Models::ConferenceEndedWebhookEvent, Telnyx::Models::ConferenceFloorChanged, Telnyx::Models::ConferenceParticipantJoinedWebhookEvent, Telnyx::Models::ConferenceParticipantLeftWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackEndedWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackStartedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakEndedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakStartedWebhookEvent, Telnyx::Models::ConferencePlaybackEndedWebhookEvent, Telnyx::Models::ConferencePlaybackStartedWebhookEvent, Telnyx::Models::ConferenceRecordingSavedWebhookEvent, Telnyx::Models::ConferenceSpeakEndedWebhookEvent, Telnyx::Models::ConferenceSpeakStartedWebhookEvent, Telnyx::Models::DeliveryUpdateWebhookEvent, Telnyx::Models::FaxDelivered, Telnyx::Models::FaxFailed, Telnyx::Models::FaxMediaProcessed, Telnyx::Models::FaxQueued, Telnyx::Models::FaxSendingStarted, Telnyx::Models::InboundMessageWebhookEvent, Telnyx::Models::NumberOrderStatusUpdate, Telnyx::Models::ReplacedLinkClickWebhookEvent, Telnyx::Models::TranscriptionWebhookEvent)]
131
+ # @return [Array(Telnyx::Models::CallAIGatherEndedWebhookEvent, Telnyx::Models::CallAIGatherMessageHistoryUpdatedWebhookEvent, Telnyx::Models::CallAIGatherPartialResultsWebhookEvent, Telnyx::Models::CallAnsweredWebhookEvent, Telnyx::Models::CallBridgedWebhookEvent, Telnyx::Models::CallConversationEndedWebhookEvent, Telnyx::Models::CallConversationInsightsGeneratedWebhookEvent, Telnyx::Models::CallCostWebhookEvent, Telnyx::Models::CallDtmfReceivedWebhookEvent, Telnyx::Models::CallEnqueuedWebhookEvent, Telnyx::Models::CallForkStartedWebhookEvent, Telnyx::Models::CallForkStoppedWebhookEvent, Telnyx::Models::CallGatherEndedWebhookEvent, Telnyx::Models::CallHangupWebhookEvent, Telnyx::Models::CallInitiatedWebhookEvent, Telnyx::Models::CallLeftQueueWebhookEvent, Telnyx::Models::CallMachineDetectionEndedWebhookEvent, Telnyx::Models::CallMachineGreetingEndedWebhookEvent, Telnyx::Models::CallMachinePremiumDetectionEndedWebhookEvent, Telnyx::Models::CallMachinePremiumGreetingEndedWebhookEvent, Telnyx::Models::CallPlaybackEndedWebhookEvent, Telnyx::Models::CallPlaybackStartedWebhookEvent, Telnyx::Models::CallRecordingErrorWebhookEvent, Telnyx::Models::CallRecordingSavedWebhookEvent, Telnyx::Models::CallRecordingTranscriptionSavedWebhookEvent, Telnyx::Models::CallReferCompletedWebhookEvent, Telnyx::Models::CallReferFailedWebhookEvent, Telnyx::Models::CallReferStartedWebhookEvent, Telnyx::Models::CallSiprecFailedWebhookEvent, Telnyx::Models::CallSiprecStartedWebhookEvent, Telnyx::Models::CallSiprecStoppedWebhookEvent, Telnyx::Models::CallSpeakEndedWebhookEvent, Telnyx::Models::CallSpeakStartedWebhookEvent, Telnyx::Models::CallStreamingFailedWebhookEvent, Telnyx::Models::CallStreamingStartedWebhookEvent, Telnyx::Models::CallStreamingStoppedWebhookEvent, Telnyx::Models::CampaignStatusUpdate, Telnyx::Models::ConferenceCreatedWebhookEvent, Telnyx::Models::ConferenceEndedWebhookEvent, Telnyx::Models::ConferenceFloorChanged, Telnyx::Models::ConferenceParticipantJoinedWebhookEvent, Telnyx::Models::ConferenceParticipantLeftWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackEndedWebhookEvent, Telnyx::Models::ConferenceParticipantPlaybackStartedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakEndedWebhookEvent, Telnyx::Models::ConferenceParticipantSpeakStartedWebhookEvent, Telnyx::Models::ConferencePlaybackEndedWebhookEvent, Telnyx::Models::ConferencePlaybackStartedWebhookEvent, Telnyx::Models::ConferenceRecordingSavedWebhookEvent, Telnyx::Models::ConferenceSpeakEndedWebhookEvent, Telnyx::Models::ConferenceSpeakStartedWebhookEvent, Telnyx::Models::DeliveryUpdateWebhookEvent, Telnyx::Models::FaxDelivered, Telnyx::Models::FaxFailed, Telnyx::Models::FaxMediaProcessed, Telnyx::Models::FaxQueued, Telnyx::Models::FaxSendingStarted, Telnyx::Models::InboundMessageWebhookEvent, Telnyx::Models::NumberOrderStatusUpdate, Telnyx::Models::ReplacedLinkClickWebhookEvent, Telnyx::Models::TranscriptionWebhookEvent)]
130
132
  end
131
133
  end
132
134
  end