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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/README.md +1 -1
- data/lib/telnyx/client.rb +10 -5
- data/lib/telnyx/errors.rb +0 -10
- data/lib/telnyx/lib/webhook_verification.rb +172 -0
- data/lib/telnyx/models/ai/assistants/{tag_delete_params.rb → tag_add_params.rb} +2 -2
- data/lib/telnyx/models/ai/assistants/{tag_delete_response.rb → tag_add_response.rb} +2 -2
- data/lib/telnyx/models/ai/assistants/{tag_create_params.rb → tag_remove_params.rb} +2 -2
- data/lib/telnyx/models/ai/assistants/{tag_create_response.rb → tag_remove_response.rb} +2 -2
- data/lib/telnyx/models/call_cost_webhook_event.rb +242 -0
- data/lib/telnyx/models/text_to_speech_generate_params.rb +3 -3
- data/lib/telnyx/models/unsafe_unwrap_webhook_event.rb +3 -1
- data/lib/telnyx/models/unwrap_webhook_event.rb +3 -1
- data/lib/telnyx/models/voice_clone_create_from_design_params.rb +27 -6
- data/lib/telnyx/models/voice_clone_create_from_upload_params.rb +23 -2
- data/lib/telnyx/models/voice_clone_create_params.rb +79 -0
- data/lib/telnyx/models/voice_clone_create_response.rb +19 -0
- data/lib/telnyx/models/voice_clone_data.rb +41 -1
- data/lib/telnyx/models/voice_clone_list_params.rb +22 -1
- data/lib/telnyx/models/voice_design_create_params.rb +24 -1
- data/lib/telnyx/models/voice_design_data.rb +45 -1
- data/lib/telnyx/models/voice_design_list_response.rb +32 -1
- data/lib/telnyx/models/{voice_design_update_params.rb → voice_design_rename_params.rb} +2 -2
- data/lib/telnyx/models/{voice_design_update_response.rb → voice_design_rename_response.rb} +42 -11
- data/lib/telnyx/models/whatsapp/business_accounts/{phone_number_create_verification_params.rb → phone_number_initialize_verification_params.rb} +5 -5
- data/lib/telnyx/models/whatsapp/{message_template_create_params.rb → template_create_params.rb} +5 -5
- data/lib/telnyx/models/whatsapp/{message_template_create_response.rb → template_create_response.rb} +2 -2
- data/lib/telnyx/models/whatsapp/{message_template_list_params.rb → template_list_params.rb} +5 -5
- data/lib/telnyx/models/whatsapp_message_template_delete_params.rb +20 -0
- data/lib/telnyx/models/whatsapp_message_template_retrieve_params.rb +20 -0
- data/lib/telnyx/models/whatsapp_message_template_retrieve_response.rb +16 -0
- data/lib/telnyx/models/whatsapp_message_template_update_params.rb +44 -0
- data/lib/telnyx/models/whatsapp_message_template_update_response.rb +16 -0
- data/lib/telnyx/models/x402/{credit_account_create_payment_quote_params.rb → credit_account_create_quote_params.rb} +2 -2
- data/lib/telnyx/models/x402/{credit_account_create_payment_quote_response.rb → credit_account_create_quote_response.rb} +31 -32
- data/lib/telnyx/models/x402/{credit_account_settle_payment_params.rb → credit_account_settle_params.rb} +3 -3
- data/lib/telnyx/models/x402/{credit_account_settle_payment_response.rb → credit_account_settle_response.rb} +14 -15
- data/lib/telnyx/models.rb +12 -4
- data/lib/telnyx/resources/ai/assistants/tags.rb +28 -28
- data/lib/telnyx/resources/voice_clones.rb +38 -31
- data/lib/telnyx/resources/voice_designs.rb +27 -25
- data/lib/telnyx/resources/webhooks.rb +10 -183
- data/lib/telnyx/resources/whatsapp/business_accounts/phone_numbers.rb +5 -5
- data/lib/telnyx/resources/whatsapp/phone_numbers/profile.rb +0 -4
- data/lib/telnyx/resources/whatsapp/templates.rb +83 -0
- data/lib/telnyx/resources/whatsapp.rb +3 -3
- data/lib/telnyx/resources/whatsapp_message_templates.rb +81 -0
- data/lib/telnyx/resources/x402/credit_account.rb +13 -13
- data/lib/telnyx/version.rb +1 -1
- data/lib/telnyx.rb +25 -24
- data/rbi/telnyx/client.rbi +8 -4
- data/rbi/telnyx/models/ai/assistants/{tag_create_params.rbi → tag_add_params.rbi} +2 -2
- data/rbi/telnyx/models/ai/assistants/{tag_delete_response.rbi → tag_add_response.rbi} +2 -2
- data/rbi/telnyx/models/ai/assistants/{tag_delete_params.rbi → tag_remove_params.rbi} +2 -2
- data/rbi/telnyx/models/ai/assistants/{tag_create_response.rbi → tag_remove_response.rbi} +2 -2
- data/rbi/telnyx/models/call_cost_webhook_event.rbi +485 -0
- data/rbi/telnyx/models/text_to_speech_generate_params.rbi +2 -1
- data/rbi/telnyx/models/unsafe_unwrap_webhook_event.rbi +1 -0
- data/rbi/telnyx/models/unwrap_webhook_event.rbi +1 -0
- data/rbi/telnyx/models/voice_clone_create_from_design_params.rbi +51 -0
- data/rbi/telnyx/models/voice_clone_create_from_upload_params.rbi +67 -2
- data/rbi/telnyx/models/voice_clone_create_params.rbi +142 -0
- data/rbi/telnyx/models/voice_clone_create_response.rbi +36 -0
- data/rbi/telnyx/models/voice_clone_data.rbi +57 -0
- data/rbi/telnyx/models/voice_clone_list_params.rbi +62 -0
- data/rbi/telnyx/models/voice_design_create_params.rbi +60 -0
- data/rbi/telnyx/models/voice_design_data.rbi +59 -0
- data/rbi/telnyx/models/voice_design_list_response.rbi +73 -0
- data/rbi/telnyx/models/{voice_design_update_params.rbi → voice_design_rename_params.rbi} +2 -2
- data/rbi/telnyx/models/{voice_design_update_response.rbi → voice_design_rename_response.rbi} +90 -14
- data/rbi/telnyx/models/whatsapp/business_accounts/{phone_number_create_verification_params.rbi → phone_number_initialize_verification_params.rbi} +10 -10
- data/rbi/telnyx/models/whatsapp/{message_template_create_params.rbi → template_create_params.rbi} +10 -15
- data/rbi/telnyx/models/whatsapp/{message_template_create_response.rbi → template_create_response.rbi} +2 -2
- data/rbi/telnyx/models/whatsapp/{message_template_list_params.rbi → template_list_params.rbi} +11 -11
- data/rbi/telnyx/models/whatsapp_message_template_delete_params.rbi +38 -0
- data/rbi/telnyx/models/whatsapp_message_template_retrieve_params.rbi +38 -0
- data/rbi/telnyx/models/whatsapp_message_template_retrieve_response.rbi +33 -0
- data/rbi/telnyx/models/whatsapp_message_template_update_params.rbi +106 -0
- data/rbi/telnyx/models/whatsapp_message_template_update_response.rbi +33 -0
- data/rbi/telnyx/models/x402/{credit_account_create_payment_quote_params.rbi → credit_account_create_quote_params.rbi} +2 -2
- data/rbi/telnyx/models/x402/{credit_account_create_payment_quote_response.rbi → credit_account_create_quote_response.rbi} +41 -42
- data/rbi/telnyx/models/x402/{credit_account_settle_payment_params.rbi → credit_account_settle_params.rbi} +2 -2
- data/rbi/telnyx/models/x402/{credit_account_settle_payment_response.rbi → credit_account_settle_response.rbi} +21 -26
- data/rbi/telnyx/models.rbi +29 -3
- data/rbi/telnyx/resources/ai/assistants/tags.rbi +13 -13
- data/rbi/telnyx/resources/voice_clones.rbi +36 -25
- data/rbi/telnyx/resources/voice_designs.rbi +21 -17
- data/rbi/telnyx/resources/webhooks.rbi +12 -2
- data/rbi/telnyx/resources/whatsapp/business_accounts/phone_numbers.rbi +2 -2
- data/rbi/telnyx/resources/whatsapp/phone_numbers/profile.rbi +0 -5
- data/rbi/telnyx/resources/whatsapp/{message_templates.rbi → templates.rbi} +4 -51
- data/rbi/telnyx/resources/whatsapp.rbi +2 -2
- data/rbi/telnyx/resources/whatsapp_message_templates.rbi +57 -0
- data/rbi/telnyx/resources/x402/credit_account.rbi +4 -6
- data/sig/telnyx/client.rbs +4 -2
- data/sig/telnyx/models/ai/assistants/{tag_delete_params.rbs → tag_add_params.rbs} +2 -2
- data/sig/telnyx/models/ai/assistants/{tag_delete_response.rbs → tag_add_response.rbs} +2 -2
- data/sig/telnyx/models/ai/assistants/{tag_create_params.rbs → tag_remove_params.rbs} +2 -2
- data/sig/telnyx/models/ai/assistants/{tag_create_response.rbs → tag_remove_response.rbs} +2 -2
- data/sig/telnyx/models/call_cost_webhook_event.rbs +235 -0
- data/sig/telnyx/models/unsafe_unwrap_webhook_event.rbs +1 -0
- data/sig/telnyx/models/unwrap_webhook_event.rbs +1 -0
- data/sig/telnyx/models/voice_clone_create_from_design_params.rbs +23 -1
- data/sig/telnyx/models/voice_clone_create_from_upload_params.rbs +22 -0
- data/sig/telnyx/models/voice_clone_create_params.rbs +75 -0
- data/sig/telnyx/models/voice_clone_create_response.rbs +15 -0
- data/sig/telnyx/models/voice_clone_data.rbs +34 -0
- data/sig/telnyx/models/voice_clone_list_params.rbs +22 -0
- data/sig/telnyx/models/voice_design_create_params.rbs +22 -0
- data/sig/telnyx/models/voice_design_data.rbs +30 -0
- data/sig/telnyx/models/voice_design_list_response.rbs +25 -0
- data/sig/telnyx/models/{voice_design_update_params.rbs → voice_design_rename_params.rbs} +2 -2
- data/sig/telnyx/models/voice_design_rename_response.rbs +104 -0
- data/sig/telnyx/models/whatsapp/business_accounts/{phone_number_create_verification_params.rbs → phone_number_initialize_verification_params.rbs} +9 -9
- data/sig/telnyx/models/whatsapp/{message_template_create_params.rbs → template_create_params.rbs} +7 -7
- data/sig/telnyx/models/whatsapp/{message_template_update_response.rbs → template_create_response.rbs} +2 -3
- data/sig/telnyx/models/whatsapp/{message_template_list_params.rbs → template_list_params.rbs} +9 -9
- data/sig/telnyx/models/whatsapp_message_template_delete_params.rbs +20 -0
- data/sig/telnyx/models/whatsapp_message_template_retrieve_params.rbs +20 -0
- data/sig/telnyx/models/whatsapp_message_template_retrieve_response.rbs +16 -0
- data/sig/telnyx/models/whatsapp_message_template_update_params.rbs +56 -0
- data/sig/telnyx/models/whatsapp_message_template_update_response.rbs +16 -0
- data/sig/telnyx/models/x402/{credit_account_create_payment_quote_params.rbs → credit_account_create_quote_params.rbs} +2 -2
- data/sig/telnyx/models/x402/{credit_account_create_payment_quote_response.rbs → credit_account_create_quote_response.rbs} +46 -48
- data/sig/telnyx/models/x402/{credit_account_settle_payment_params.rbs → credit_account_settle_params.rbs} +2 -2
- data/sig/telnyx/models/x402/{credit_account_settle_payment_response.rbs → credit_account_settle_response.rbs} +22 -22
- data/sig/telnyx/models.rbs +12 -4
- data/sig/telnyx/resources/ai/assistants/tags.rbs +8 -8
- data/sig/telnyx/resources/voice_clones.rbs +11 -8
- data/sig/telnyx/resources/voice_designs.rbs +7 -6
- data/sig/telnyx/resources/webhooks.rbs +5 -1
- data/sig/telnyx/resources/whatsapp/business_accounts/phone_numbers.rbs +2 -2
- data/sig/telnyx/resources/whatsapp/phone_numbers/profile.rbs +0 -2
- data/sig/telnyx/resources/whatsapp/templates.rbs +28 -0
- data/sig/telnyx/resources/whatsapp.rbs +1 -1
- data/sig/telnyx/resources/whatsapp_message_templates.rbs +21 -0
- data/sig/telnyx/resources/x402/credit_account.rbs +4 -4
- metadata +74 -64
- data/lib/telnyx/models/whatsapp/message_template_delete_params.rb +0 -22
- data/lib/telnyx/models/whatsapp/message_template_retrieve_params.rb +0 -22
- data/lib/telnyx/models/whatsapp/message_template_retrieve_response.rb +0 -18
- data/lib/telnyx/models/whatsapp/message_template_update_params.rb +0 -46
- data/lib/telnyx/models/whatsapp/message_template_update_response.rb +0 -18
- data/lib/telnyx/resources/whatsapp/message_templates.rb +0 -149
- data/lib/telnyx/resources/whatsapp/phone_numbers/profile/models.rb +0 -20
- data/rbi/telnyx/models/whatsapp/message_template_delete_params.rbi +0 -40
- data/rbi/telnyx/models/whatsapp/message_template_retrieve_params.rbi +0 -40
- data/rbi/telnyx/models/whatsapp/message_template_retrieve_response.rbi +0 -35
- data/rbi/telnyx/models/whatsapp/message_template_update_params.rbi +0 -111
- data/rbi/telnyx/models/whatsapp/message_template_update_response.rbi +0 -35
- data/rbi/telnyx/resources/whatsapp/phone_numbers/profile/models.rbi +0 -18
- data/sig/telnyx/models/voice_design_update_response.rbs +0 -79
- data/sig/telnyx/models/whatsapp/message_template_create_response.rbs +0 -20
- data/sig/telnyx/models/whatsapp/message_template_delete_params.rbs +0 -22
- data/sig/telnyx/models/whatsapp/message_template_retrieve_params.rbs +0 -22
- data/sig/telnyx/models/whatsapp/message_template_retrieve_response.rbs +0 -20
- data/sig/telnyx/models/whatsapp/message_template_update_params.rbs +0 -58
- data/sig/telnyx/resources/whatsapp/message_templates.rbs +0 -42
- 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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 24b94b03b43786920db141b0de2225ff2b9512aa60a532e4fe6ca6427a973bdb
|
|
4
|
+
data.tar.gz: bd61180d457b28b94365b61d9abe1e2343db6c45b518f2833aa2592859c966d6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
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#
|
|
8
|
-
class
|
|
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#
|
|
8
|
-
class
|
|
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#
|
|
8
|
-
class
|
|
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#
|
|
8
|
-
class
|
|
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
|
|
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
|
|
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
|
|
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
|