telnyx 5.164.0 → 5.165.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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +1 -1
  4. data/lib/telnyx/client.rb +4 -5
  5. data/lib/telnyx/lib/webhook_verification.rb +54 -155
  6. data/lib/telnyx/lib.rb +3 -1
  7. data/lib/telnyx/models/ai/assistant_tool.rb +14 -1
  8. data/lib/telnyx/models/ai/transcription_settings.rb +20 -15
  9. data/lib/telnyx/models/ai/transcription_settings_config.rb +35 -10
  10. data/lib/telnyx/models/call_dial_params.rb +13 -1
  11. data/lib/telnyx/models/calls/action_transfer_params.rb +13 -1
  12. data/lib/telnyx/models/connection_rtcp_settings.rb +3 -3
  13. data/lib/telnyx/models/credential_connections/action_check_registration_status_response.rb +12 -12
  14. data/lib/telnyx/models/external_requirements/sub_number_order_retrieve_params.rb +28 -0
  15. data/lib/telnyx/models/external_requirements/sub_number_order_retrieve_response.rb +104 -0
  16. data/lib/telnyx/models/external_requirements/sub_number_order_update_params.rb +69 -0
  17. data/lib/telnyx/models/external_requirements/sub_number_order_update_response.rb +66 -0
  18. data/lib/telnyx/models/outbound_voice_profile.rb +14 -14
  19. data/lib/telnyx/models/outbound_voice_profile_create_params.rb +14 -14
  20. data/lib/telnyx/models/outbound_voice_profile_update_params.rb +14 -14
  21. data/lib/telnyx/models/uac_connections/action_check_registration_status_response.rb +12 -12
  22. data/lib/telnyx/models.rb +2 -2
  23. data/lib/telnyx/resources/calls/actions.rb +3 -1
  24. data/lib/telnyx/resources/calls.rb +3 -1
  25. data/lib/telnyx/resources/credential_connections/actions.rb +3 -3
  26. data/lib/telnyx/resources/external_requirements/sub_number_orders.rb +99 -0
  27. data/lib/telnyx/resources/external_requirements.rb +19 -0
  28. data/lib/telnyx/resources/outbound_voice_profiles.rb +2 -2
  29. data/lib/telnyx/resources/uac_connections/actions.rb +3 -3
  30. data/lib/telnyx/resources/webhooks.rb +1 -1
  31. data/lib/telnyx/version.rb +1 -1
  32. data/lib/telnyx.rb +6 -4
  33. data/rbi/telnyx/client.rbi +3 -4
  34. data/rbi/telnyx/models/ai/assistant_tool.rbi +21 -0
  35. data/rbi/telnyx/models/ai/transcription_settings.rbi +40 -28
  36. data/rbi/telnyx/models/ai/transcription_settings_config.rbi +52 -12
  37. data/rbi/telnyx/models/call_dial_params.rbi +19 -0
  38. data/rbi/telnyx/models/calls/action_transfer_params.rbi +19 -0
  39. data/rbi/telnyx/models/connection_rtcp_settings.rbi +4 -4
  40. data/rbi/telnyx/models/credential_connections/action_check_registration_status_response.rbi +18 -36
  41. data/rbi/telnyx/models/external_requirements/sub_number_order_retrieve_params.rbi +52 -0
  42. data/rbi/telnyx/models/external_requirements/sub_number_order_retrieve_response.rbi +248 -0
  43. data/rbi/telnyx/models/external_requirements/sub_number_order_update_params.rbi +119 -0
  44. data/rbi/telnyx/models/external_requirements/sub_number_order_update_response.rbi +159 -0
  45. data/rbi/telnyx/models/outbound_voice_profile.rbi +18 -18
  46. data/rbi/telnyx/models/outbound_voice_profile_create_params.rbi +18 -18
  47. data/rbi/telnyx/models/outbound_voice_profile_update_params.rbi +18 -18
  48. data/rbi/telnyx/models/uac_connections/action_check_registration_status_response.rbi +18 -36
  49. data/rbi/telnyx/models.rbi +2 -3
  50. data/rbi/telnyx/resources/calls/actions.rbi +7 -0
  51. data/rbi/telnyx/resources/calls.rbi +7 -0
  52. data/rbi/telnyx/resources/credential_connections/actions.rbi +3 -3
  53. data/rbi/telnyx/resources/external_requirements/sub_number_orders.rbi +71 -0
  54. data/rbi/telnyx/resources/external_requirements.rbi +16 -0
  55. data/rbi/telnyx/resources/outbound_voice_profiles.rbi +4 -4
  56. data/rbi/telnyx/resources/uac_connections/actions.rbi +3 -3
  57. data/sig/telnyx/client.rbs +2 -2
  58. data/sig/telnyx/models/ai/assistant_tool.rbs +7 -0
  59. data/sig/telnyx/models/ai/transcription_settings.rbs +2 -0
  60. data/sig/telnyx/models/ai/transcription_settings_config.rbs +14 -0
  61. data/sig/telnyx/models/call_dial_params.rbs +7 -0
  62. data/sig/telnyx/models/calls/action_transfer_params.rbs +7 -0
  63. data/sig/telnyx/models/credential_connections/action_check_registration_status_response.rbs +24 -36
  64. data/sig/telnyx/models/external_requirements/sub_number_order_retrieve_params.rbs +30 -0
  65. data/sig/telnyx/models/external_requirements/sub_number_order_retrieve_response.rbs +110 -0
  66. data/sig/telnyx/models/external_requirements/sub_number_order_update_params.rbs +50 -0
  67. data/sig/telnyx/models/external_requirements/sub_number_order_update_response.rbs +75 -0
  68. data/sig/telnyx/models/uac_connections/action_check_registration_status_response.rbs +24 -36
  69. data/sig/telnyx/models.rbs +2 -2
  70. data/sig/telnyx/resources/calls/actions.rbs +1 -0
  71. data/sig/telnyx/resources/calls.rbs +1 -0
  72. data/sig/telnyx/resources/external_requirements/sub_number_orders.rbs +22 -0
  73. data/sig/telnyx/resources/external_requirements.rbs +9 -0
  74. metadata +20 -12
  75. data/lib/telnyx/lib/webhooks_ed25519.rb +0 -63
  76. data/lib/telnyx/models/sip_registration_status_retrieve_params.rb +0 -59
  77. data/lib/telnyx/models/sip_registration_status_retrieve_response.rb +0 -214
  78. data/lib/telnyx/resources/sip_registration_status.rb +0 -59
  79. data/rbi/telnyx/models/sip_registration_status_retrieve_params.rbi +0 -124
  80. data/rbi/telnyx/models/sip_registration_status_retrieve_response.rbi +0 -416
  81. data/rbi/telnyx/resources/sip_registration_status.rbi +0 -52
  82. data/sig/telnyx/models/sip_registration_status_retrieve_params.rbs +0 -55
  83. data/sig/telnyx/models/sip_registration_status_retrieve_response.rbs +0 -195
  84. data/sig/telnyx/resources/sip_registration_status.rbs +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4274858db2139e7fb6f3cb67db626fa3aafce7935eb9034b0159758f8b02b07f
4
- data.tar.gz: 7d24d10dd76f0bd6db624031d45522d65cbd8323f1421488cbaedfb20be29a99
3
+ metadata.gz: '0599a5281ad206a21c41f29f139876ab91b6596c4403c2c1fd265a98b0b26c10'
4
+ data.tar.gz: 1d2a0cf55be8f93d2f638e8a1140316b3c052cdaf805740669efbf459e45da9e
5
5
  SHA512:
6
- metadata.gz: c91c57dee7c3523696baecef7b32add3fad9ad4a8dc934340a435eb788148af0f14504821c0648824208cf2711f0bad18f19fc5d756a3a68a8ef909aad4d8adb
7
- data.tar.gz: 70537fea219cc85e7fe50d5dd2ff711b2a54ace8b6d0caa1900ada6f81e0fbece5016a7e57a35b4840da4beacc41399eff74fe6f0f17285c66aa874ad9285a17
6
+ metadata.gz: 881615fb8ac4ba023d747d946aea0de2ad2f8aabe41bce223c6908fa2f389b961800bfdab0b4f8c3cb219cdbb1f90a99d65c10ef47b68cb8fd87a68fef870ee0
7
+ data.tar.gz: 6c943fc02c098ebfde7ac90194979745ba78c62ed6e901a2a1e57df06983dda31a51891aea5c87679b17fd21e89d9a27931ef86a00bd7612cfdd89b5b70e9733
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.165.0](https://github.com/team-telnyx/telnyx-ruby/compare/v5.164.0...v5.165.0) (2026-09-01)
4
+
5
+
6
+ ### Features
7
+
8
+ * promote from staging 9d1efe7 ([d16fd9d](https://github.com/team-telnyx/telnyx-ruby/commit/d16fd9d7cff7b0205653440a32023153b7710b1f))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **ci:** retry transient Steep API errors ([#355](https://github.com/team-telnyx/telnyx-ruby/issues/355)) ([25ec469](https://github.com/team-telnyx/telnyx-ruby/commit/25ec4693e5110cdc0bf7849c8cdcfab7ac1d46ce))
14
+ * **ci:** skip post-merge release readiness ([#352](https://github.com/team-telnyx/telnyx-ruby/issues/352)) ([bed03fd](https://github.com/team-telnyx/telnyx-ruby/commit/bed03fd1c162112e4a1f254687d0c5ca9d42cef8))
15
+
3
16
  ## [5.164.0](https://github.com/team-telnyx/telnyx-ruby/compare/v5.163.0...v5.164.0) (2026-08-31)
4
17
 
5
18
 
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.164.0"
27
+ gem "telnyx", "~> 5.165.0"
28
28
  ```
29
29
 
30
30
  <!-- x-release-please-end -->
data/lib/telnyx/client.rb CHANGED
@@ -672,10 +672,6 @@ module Telnyx
672
672
  # @return [Telnyx::Resources::VoiceSDKCallReports]
673
673
  attr_reader :voice_sdk_call_reports
674
674
 
675
- # UAC connection operations
676
- # @return [Telnyx::Resources::SipRegistrationStatus]
677
- attr_reader :sip_registration_status
678
-
679
675
  # Static reference values the API accepts: call reasons, document types, rejection
680
676
  # types.
681
677
  # @return [Telnyx::Resources::CallReasons]
@@ -736,6 +732,9 @@ module Telnyx
736
732
  # @return [Telnyx::Resources::MeetingSessions]
737
733
  attr_reader :meeting_sessions
738
734
 
735
+ # @return [Telnyx::Resources::ExternalRequirements]
736
+ attr_reader :external_requirements
737
+
739
738
  # @api private
740
739
  #
741
740
  # @return [Hash{String=>String}]
@@ -1011,7 +1010,6 @@ module Telnyx
1011
1010
  @pronunciation_dicts = Telnyx::Resources::PronunciationDicts.new(client: self)
1012
1011
  @uac_connections = Telnyx::Resources::UacConnections.new(client: self)
1013
1012
  @voice_sdk_call_reports = Telnyx::Resources::VoiceSDKCallReports.new(client: self)
1014
- @sip_registration_status = Telnyx::Resources::SipRegistrationStatus.new(client: self)
1015
1013
  @call_reasons = Telnyx::Resources::CallReasons.new(client: self)
1016
1014
  @dir = Telnyx::Resources::Dir.new(client: self)
1017
1015
  @infringement_claims = Telnyx::Resources::InfringementClaims.new(client: self)
@@ -1027,6 +1025,7 @@ module Telnyx
1027
1025
  @pricing = Telnyx::Resources::Pricing.new(client: self)
1028
1026
  @web_search = Telnyx::Resources::WebSearch.new(client: self)
1029
1027
  @meeting_sessions = Telnyx::Resources::MeetingSessions.new(client: self)
1028
+ @external_requirements = Telnyx::Resources::ExternalRequirements.new(client: self)
1030
1029
  end
1031
1030
  end
1032
1031
  end
@@ -2,183 +2,82 @@
2
2
 
3
3
  require "base64"
4
4
  require "openssl"
5
- require_relative "webhook_verification_error"
6
5
 
7
6
  module Telnyx
8
7
  module Lib
9
- # Telnyx webhook verification using ED25519 signatures.
10
- #
11
- # This module provides ED25519 signature verification for Telnyx webhooks,
12
- # matching the implementation pattern used in the Python and Node SDKs.
13
- #
14
- # The module is kept separate from generated code to avoid merge conflicts
15
- # when Stainless updates webhook event types.
16
- #
17
- # Example usage:
18
- #
19
- # client = Telnyx::Client.new(
20
- # api_key: ENV["TELNYX_API_KEY"],
21
- # public_key: ENV["TELNYX_PUBLIC_KEY"] # Base64 from Mission Control
22
- # )
23
- #
24
- # # Verify signature only
25
- # client.webhooks.verify!(payload, headers)
26
- #
27
- # # Verify and parse
28
- # event = client.webhooks.unwrap(payload, headers)
29
- #
8
+ # Telnyx Ed25519 webhook verification over the exact raw payload bytes.
30
9
  module WebhookVerification
31
- # Telnyx webhook signature headers (case-insensitive per HTTP spec)
32
10
  SIGNATURE_HEADER = "telnyx-signature-ed25519"
33
11
  TIMESTAMP_HEADER = "telnyx-timestamp"
12
+ DEFAULT_TOLERANCE = 300
13
+ ED25519_SPKI_PREFIX = ["302a300506032b6570032100"].pack("H*").freeze
14
+
15
+ class << self
16
+ # Verify a Telnyx webhook signature before the caller parses the payload.
17
+ #
18
+ # @param payload [String] exact raw request body
19
+ # @param headers [Hash] request headers (looked up case-insensitively)
20
+ # @param public_key [String] Base64-encoded raw 32-byte Ed25519 public key
21
+ # @return [true]
22
+ # @raise [Telnyx::Errors::WebhookVerificationError] if verification fails
23
+ def verify_signature!(payload, headers, public_key)
24
+ signature_header = get_header(headers, SIGNATURE_HEADER)
25
+ timestamp = get_header(headers, TIMESTAMP_HEADER)
26
+
27
+ fail_verification("Missing required header: telnyx-signature-ed25519") if signature_header.nil? || signature_header.empty?
28
+ fail_verification("Missing required header: telnyx-timestamp") if timestamp.nil? || timestamp.empty?
29
+ fail_verification("Public key is required for webhook verification") if public_key.nil? || public_key.empty?
30
+
31
+ timestamp_int = parse_timestamp(timestamp)
32
+ if (Time.now.to_i - timestamp_int).abs > DEFAULT_TOLERANCE
33
+ fail_verification("Webhook timestamp is too old or too far in the future")
34
+ end
34
35
 
35
- # Tolerance for timestamp validation (5 minutes)
36
- TIMESTAMP_TOLERANCE_SECONDS = 300
37
-
38
- # Verify webhook signature without parsing the payload.
39
- #
40
- # @param payload [String] The raw webhook payload
41
- # @param headers [Hash] The webhook headers
42
- # @param key [String, nil] Optional public key override (base64-encoded)
43
- #
44
- # @return [void]
45
- #
46
- # @raise [Telnyx::Errors::WebhookVerificationError] If verification fails
47
- def verify!(payload, headers, key: nil)
48
- public_key = key || @client.public_key
49
-
50
- unless public_key && !public_key.empty?
51
- raise Telnyx::Errors::WebhookVerificationError.new(
52
- message: "No public key configured. Provide key parameter or configure client with public_key."
53
- )
54
- end
55
-
56
- do_verify_signature(payload, headers, public_key)
57
- end
36
+ key = parse_public_key(public_key)
37
+ signature = Base64.strict_decode64(signature_header)
38
+ signed_payload = "#{timestamp}|#{payload}"
58
39
 
59
- private
40
+ fail_verification("Invalid webhook signature") unless key.verify(nil, signature, signed_payload)
60
41
 
61
- # Get header value case-insensitively
62
- #
63
- # @param headers [Hash] The headers hash
64
- # @param key [String] The header key to find
65
- #
66
- # @return [String, nil]
67
- def get_header(headers, key)
68
- key_lower = key.downcase
69
- headers.each do |header_key, header_value|
70
- return header_value if header_key.to_s.downcase == key_lower
42
+ true
43
+ rescue Telnyx::Errors::WebhookVerificationError
44
+ raise
45
+ rescue ArgumentError => e
46
+ fail_verification("Invalid webhook signature or public key encoding: #{e.message}")
47
+ rescue OpenSSL::PKey::PKeyError => e
48
+ fail_verification("Invalid Ed25519 public key: #{e.message}")
49
+ rescue OpenSSL::OpenSSLError => e
50
+ fail_verification("Webhook verification failed: #{e.message}")
71
51
  end
72
- nil
73
- end
74
-
75
- # Verify the webhook signature using ED25519 cryptography
76
- #
77
- # @param payload [String] The raw webhook payload
78
- # @param headers [Hash] The webhook headers
79
- # @param public_key [String] The ED25519 public key (base64-encoded)
80
- #
81
- # @raise [Telnyx::Errors::WebhookVerificationError] If verification fails
82
- def do_verify_signature(payload, headers, public_key)
83
- # Extract required headers (case-insensitive)
84
- signature_header = get_header(headers, SIGNATURE_HEADER)
85
- timestamp_header = get_header(headers, TIMESTAMP_HEADER)
86
52
 
87
- unless signature_header
88
- raise Telnyx::Errors::WebhookVerificationError.new(
89
- message: "Missing required header: #{SIGNATURE_HEADER}"
90
- )
91
- end
53
+ private
92
54
 
93
- unless timestamp_header
94
- raise Telnyx::Errors::WebhookVerificationError.new(
95
- message: "Missing required header: #{TIMESTAMP_HEADER}"
96
- )
55
+ def fail_verification(message)
56
+ raise Telnyx::Errors::WebhookVerificationError.new(message: message)
97
57
  end
98
58
 
99
- # Validate timestamp to prevent replay attacks (5 minute tolerance)
100
- begin
101
- webhook_time = Integer(timestamp_header)
102
- current_time = Time.now.to_i
103
- time_diff = (current_time - webhook_time).abs
104
-
105
- if time_diff > TIMESTAMP_TOLERANCE_SECONDS
106
- raise Telnyx::Errors::WebhookVerificationError.new(
107
- message: "Webhook timestamp is too old or too new (#{time_diff}s difference)"
108
- )
59
+ def get_header(headers, name)
60
+ headers.each do |key, value|
61
+ return value if key.to_s.downcase == name
109
62
  end
110
- rescue ArgumentError
111
- raise Telnyx::Errors::WebhookVerificationError.new(
112
- message: "Invalid timestamp format: #{timestamp_header}"
113
- )
63
+ nil
114
64
  end
115
65
 
116
- # Decode public key from base64
117
- begin
118
- public_key_bytes = Base64.strict_decode64(public_key)
119
-
120
- if public_key_bytes.bytesize != 32
121
- raise Telnyx::Errors::WebhookVerificationError.new(
122
- message: "Invalid public key: expected 32 bytes, got #{public_key_bytes.bytesize} bytes"
123
- )
124
- end
125
- rescue ArgumentError => e
126
- raise Telnyx::Errors::WebhookVerificationError.new(
127
- message: "Invalid public key format: #{e.message}"
128
- )
66
+ def parse_timestamp(timestamp)
67
+ Integer(timestamp, 10)
68
+ rescue ArgumentError, TypeError
69
+ fail_verification("Invalid webhook timestamp: #{timestamp.inspect}")
129
70
  end
130
71
 
131
- # Decode signature from base64
132
- begin
133
- signature_bytes = Base64.strict_decode64(signature_header)
134
-
135
- if signature_bytes.bytesize != 64
136
- raise Telnyx::Errors::WebhookVerificationError.new(
137
- message: "Invalid signature length: expected 64 bytes, got #{signature_bytes.bytesize} bytes"
72
+ def parse_public_key(public_key)
73
+ decoded_key = Base64.strict_decode64(public_key)
74
+ unless decoded_key.bytesize == 32
75
+ fail_verification(
76
+ "Invalid Ed25519 public key length: expected 32 bytes, got #{decoded_key.bytesize}"
138
77
  )
139
78
  end
140
- rescue ArgumentError => e
141
- raise Telnyx::Errors::WebhookVerificationError.new(
142
- message: "Invalid signature format: #{e.message}"
143
- )
144
- end
145
79
 
146
- # Create the signed payload: timestamp|payload
147
- signed_payload = "#{timestamp_header}|#{payload}"
148
-
149
- # Build ED25519 public key for verification
150
- # The raw 32-byte key needs to be wrapped in X.509 SubjectPublicKeyInfo format
151
- # ED25519 OID: 1.3.101.112 = 06 03 2b 65 70
152
- # X.509 SPKI header for ED25519: 30 2a 30 05 06 03 2b 65 70 03 21 00
153
- ed25519_spki_header = [
154
- 0x30,
155
- 0x2a,
156
- 0x30,
157
- 0x05,
158
- 0x06,
159
- 0x03,
160
- 0x2b,
161
- 0x65,
162
- 0x70,
163
- 0x03,
164
- 0x21,
165
- 0x00
166
- ].pack("C*")
167
- der_key = ed25519_spki_header + public_key_bytes
168
-
169
- begin
170
- pkey = OpenSSL::PKey.read(der_key)
171
- valid = pkey.verify(nil, signature_bytes, signed_payload)
172
-
173
- unless valid
174
- raise Telnyx::Errors::WebhookVerificationError.new(
175
- message: "Signature verification failed: signature does not match payload"
176
- )
177
- end
178
- rescue OpenSSL::PKey::PKeyError => e
179
- raise Telnyx::Errors::WebhookVerificationError.new(
180
- message: "Signature verification failed: #{e.message}"
181
- )
80
+ OpenSSL::PKey.read(ED25519_SPKI_PREFIX + decoded_key)
182
81
  end
183
82
  end
184
83
  end
data/lib/telnyx/lib.rb CHANGED
@@ -11,4 +11,6 @@
11
11
  #
12
12
  # Add new custom modules below:
13
13
 
14
- require_relative "lib/webhooks_ed25519"
14
+ require_relative "lib/webhook_verification_error"
15
+ require_relative "lib/webhook_verification"
16
+ require_relative "lib/websocket"
@@ -263,6 +263,17 @@ module Telnyx
263
263
  # @return [String, nil]
264
264
  optional :description, String
265
265
 
266
+ # @!attribute diversion
267
+ # The number the inbound call was received on, forwarded so an unverified
268
+ # non-Telnyx `from` can be used as the caller id -- typically to transfer out as
269
+ # the original caller by pairing `from: "{{telnyx_end_user_target}}"` with
270
+ # `diversion: "{{telnyx_agent_target}}"`. The caller id is only accepted while
271
+ # that number is still on an active inbound call to this `diversion` number, and
272
+ # the `diversion` number must be one you own or have verified.
273
+ #
274
+ # @return [String, nil]
275
+ optional :diversion, String
276
+
266
277
  # @!attribute voicemail_detection
267
278
  # Configuration for voicemail detection (AMD - Answering Machine Detection) on the
268
279
  # transferred call. Allows the assistant to detect when a voicemail system answers
@@ -304,7 +315,7 @@ module Telnyx
304
315
  # @return [String, nil]
305
316
  optional :warm_transfer_instructions, String
306
317
 
307
- # @!method initialize(from:, targets:, custom_headers: nil, description: nil, voicemail_detection: nil, warm_message_delay_ms: nil, warm_transfer_acceptance: nil, warm_transfer_instructions: nil)
318
+ # @!method initialize(from:, targets:, custom_headers: nil, description: nil, diversion: nil, voicemail_detection: nil, warm_message_delay_ms: nil, warm_transfer_acceptance: nil, warm_transfer_instructions: nil)
308
319
  # Some parameter documentations has been truncated, see
309
320
  # {Telnyx::Models::AI::AssistantTool::Transfer::Transfer} for more details.
310
321
  #
@@ -316,6 +327,8 @@ module Telnyx
316
327
  #
317
328
  # @param description [String] A description of the transfer tool. By default, Telnyx generates this automatica
318
329
  #
330
+ # @param diversion [String] The number the inbound call was received on, forwarded so an unverified non-Teln
331
+ #
319
332
  # @param voicemail_detection [Telnyx::Models::AI::AssistantTool::Transfer::Transfer::VoicemailDetection] Configuration for voicemail detection (AMD - Answering Machine Detection) on the
320
333
  #
321
334
  # @param warm_message_delay_ms [Integer, nil] Optional delay in milliseconds before playing the warm message audio when the tr
@@ -16,17 +16,19 @@ module Telnyx
16
16
  # supported models will automatically detect the language. For `deepgram/flux`,
17
17
  # supported values are: `auto` (Telnyx language detection controls the language
18
18
  # hint), `multi` (no language hint), and language-specific hints `en`, `es`, `fr`,
19
- # `de`, `hi`, `ru`, `pt`, `ja`, `it`, and `nl`. For `soniox/stt-rt-v4`, `auto`
20
- # omits the language hint and lets Soniox auto-detect; ISO 639-1 codes (e.g. `en`,
21
- # `es`) bias detection toward that language. For `humain/realtime`, supported
22
- # values are `ar`, `en`, `codeswitch` (Arabic/English code-switching), and `auto`
23
- # (resolves server-side to code-switching). Unlike other models, `humain/realtime`
24
- # does not fall back to `auto` when `language` is omitted — omitting it applies
25
- # `en` instead. For `reson8/turns`, supported values are `auto` (or unset) for
26
- # automatic language detection, and the language codes `nl`, `en`, `fr`, `fy`,
27
- # `de`, `it`, `pl`, `pt`, `es`, and `sv` to fix the transcription language. For
28
- # `cohere/ar-stt`, supported values are `ar` and `en`; unlike other models, this
29
- # model does not auto-detect and defaults to `ar` when `language` is omitted.
19
+ # `de`, `hi`, `ru`, `pt`, `ja`, `it`, and `nl`. For `soniox/stt-rt-v4` and
20
+ # `soniox/stt-rt-v5`, `auto` omits the language hint and lets Soniox auto-detect;
21
+ # ISO 639-1 codes (e.g. `en`, `es`) bias detection toward that language;
22
+ # `settings.language_hints` can pin multiple languages at once instead. For
23
+ # `humain/realtime`, supported values are `ar`, `en`, `codeswitch` (Arabic/English
24
+ # code-switching), and `auto` (resolves server-side to code-switching). Unlike
25
+ # other models, `humain/realtime` does not fall back to `auto` when `language` is
26
+ # omitted omitting it applies `en` instead. For `reson8/turns`, supported values
27
+ # are `auto` (or unset) for automatic language detection, and the language codes
28
+ # `nl`, `en`, `fr`, `fy`, `de`, `it`, `pl`, `pt`, `es`, and `sv` to fix the
29
+ # transcription language. For `cohere/ar-stt`, supported values are `ar` and `en`;
30
+ # unlike other models, this model does not auto-detect and defaults to `ar` when
31
+ # `language` is omitted.
30
32
  #
31
33
  # @return [String, nil]
32
34
  optional :language, String
@@ -42,8 +44,9 @@ module Telnyx
42
44
  # - `assemblyai/universal-streaming` is a multilingual streaming model with
43
45
  # configurable turn detection.
44
46
  # - `xai/grok-stt` is a multilingual Grok STT model.
45
- # - `soniox/stt-rt-v4` is a multilingual streaming model with automatic language
46
- # detection and configurable endpointing.
47
+ # - `soniox/stt-rt-v4` and `soniox/stt-rt-v5` are multilingual streaming models
48
+ # with automatic language detection, configurable endpointing, term biasing
49
+ # (`context`), and `language_hints`.
47
50
  # - `nvidia/parakeet-v3` is a multilingual transcription model with automatic
48
51
  # language detection.
49
52
  # - `humain/realtime` is a streaming model with native Arabic and Arabic/English
@@ -91,8 +94,9 @@ module Telnyx
91
94
  # - `assemblyai/universal-streaming` is a multilingual streaming model with
92
95
  # configurable turn detection.
93
96
  # - `xai/grok-stt` is a multilingual Grok STT model.
94
- # - `soniox/stt-rt-v4` is a multilingual streaming model with automatic language
95
- # detection and configurable endpointing.
97
+ # - `soniox/stt-rt-v4` and `soniox/stt-rt-v5` are multilingual streaming models
98
+ # with automatic language detection, configurable endpointing, term biasing
99
+ # (`context`), and `language_hints`.
96
100
  # - `nvidia/parakeet-v3` is a multilingual transcription model with automatic
97
101
  # language detection.
98
102
  # - `humain/realtime` is a streaming model with native Arabic and Arabic/English
@@ -112,6 +116,7 @@ module Telnyx
112
116
  ASSEMBLYAI_UNIVERSAL_STREAMING = :"assemblyai/universal-streaming"
113
117
  XAI_GROK_STT = :"xai/grok-stt"
114
118
  SONIOX_STT_RT_V4 = :"soniox/stt-rt-v4"
119
+ SONIOX_STT_RT_V5 = :"soniox/stt-rt-v5"
115
120
  NVIDIA_PARAKEET_V3 = :"nvidia/parakeet-v3"
116
121
  HUMAIN_REALTIME = :"humain/realtime"
117
122
  RESON8_TURNS = :"reson8/turns"
@@ -4,6 +4,18 @@ module Telnyx
4
4
  module Models
5
5
  module AI
6
6
  class TranscriptionSettingsConfig < Telnyx::Internal::Type::BaseModel
7
+ # @!attribute context
8
+ # Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. A comma-separated list
9
+ # of terms to boost for recognition during transcription, for staff names,
10
+ # building names, or other domain-specific vocabulary. This field may be templated
11
+ # with
12
+ # [dynamic variables](https://developers.telnyx.com/docs/inference/ai-assistants/dynamic-variables)
13
+ # using mustache syntax (e.g. `Telnyx,{{customer_name}},VoIP`). Variables are
14
+ # resolved at call time before the value is sent to Soniox.
15
+ #
16
+ # @return [String, nil]
17
+ optional :context, String
18
+
7
19
  # @!attribute eager_eot_threshold
8
20
  # Available only for deepgram/flux. Confidence threshold for eager end of turn
9
21
  # detection. Must be lower than or equal to eot_threshold. Setting this equal to
@@ -13,8 +25,9 @@ module Telnyx
13
25
  optional :eager_eot_threshold, Float
14
26
 
15
27
  # @!attribute enable_endpoint_detection
16
- # Available only for soniox/stt-rt-v4. When true, Soniox emits end-of-utterance
17
- # events at the cadence configured by `max_endpoint_delay_ms`.
28
+ # Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. When true, Soniox
29
+ # emits end-of-utterance events at the cadence configured by
30
+ # `max_endpoint_delay_ms`.
18
31
  #
19
32
  # @return [Boolean, nil]
20
33
  optional :enable_endpoint_detection, Telnyx::Internal::Type::Boolean
@@ -42,8 +55,8 @@ module Telnyx
42
55
  optional :eot_timeout_ms, Integer
43
56
 
44
57
  # @!attribute interim_results
45
- # Available only for soniox/stt-rt-v4. When true, Soniox streams interim
46
- # (non-final) results in addition to finalized transcripts.
58
+ # Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. When true, Soniox
59
+ # streams interim (non-final) results in addition to finalized transcripts.
47
60
  #
48
61
  # @return [Boolean, nil]
49
62
  optional :interim_results, Telnyx::Internal::Type::Boolean
@@ -60,9 +73,17 @@ module Telnyx
60
73
  # @return [String, nil]
61
74
  optional :keyterm, String
62
75
 
76
+ # @!attribute language_hints
77
+ # Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. A list of ISO 639-1
78
+ # language codes (e.g. `["nl", "fr"]`) to pin recognition to multiple languages at
79
+ # once, overriding the single hint derived from `language`.
80
+ #
81
+ # @return [Array<String>, nil]
82
+ optional :language_hints, Telnyx::Internal::Type::ArrayOf[String]
83
+
63
84
  # @!attribute max_endpoint_delay_ms
64
- # Available only for soniox/stt-rt-v4. Maximum silence (in milliseconds) before
65
- # Soniox emits an end-of-utterance event. Only honored when
85
+ # Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. Maximum silence (in
86
+ # milliseconds) before Soniox emits an end-of-utterance event. Only honored when
66
87
  # `enable_endpoint_detection` is true.
67
88
  #
68
89
  # @return [Integer, nil]
@@ -93,13 +114,15 @@ module Telnyx
93
114
  # @return [Boolean, nil]
94
115
  optional :smart_format, Telnyx::Internal::Type::Boolean
95
116
 
96
- # @!method initialize(eager_eot_threshold: nil, enable_endpoint_detection: nil, end_of_turn_confidence_threshold: nil, eot_threshold: nil, eot_timeout_ms: nil, interim_results: nil, keyterm: nil, max_endpoint_delay_ms: nil, max_turn_silence: nil, min_turn_silence: nil, numerals: nil, smart_format: nil)
117
+ # @!method initialize(context: nil, eager_eot_threshold: nil, enable_endpoint_detection: nil, end_of_turn_confidence_threshold: nil, eot_threshold: nil, eot_timeout_ms: nil, interim_results: nil, keyterm: nil, language_hints: nil, max_endpoint_delay_ms: nil, max_turn_silence: nil, min_turn_silence: nil, numerals: nil, smart_format: nil)
97
118
  # Some parameter documentations has been truncated, see
98
119
  # {Telnyx::Models::AI::TranscriptionSettingsConfig} for more details.
99
120
  #
121
+ # @param context [String] Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. A comma-separated list
122
+ #
100
123
  # @param eager_eot_threshold [Float] Available only for deepgram/flux. Confidence threshold for eager end of turn det
101
124
  #
102
- # @param enable_endpoint_detection [Boolean] Available only for soniox/stt-rt-v4. When true, Soniox emits end-of-utterance ev
125
+ # @param enable_endpoint_detection [Boolean] Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. When true, Soniox emit
103
126
  #
104
127
  # @param end_of_turn_confidence_threshold [Float] Available only for assemblyai/universal-streaming. Confidence level required to
105
128
  #
@@ -107,11 +130,13 @@ module Telnyx
107
130
  #
108
131
  # @param eot_timeout_ms [Integer] Available only for deepgram/flux. Maximum milliseconds of silence before forcing
109
132
  #
110
- # @param interim_results [Boolean] Available only for soniox/stt-rt-v4. When true, Soniox streams interim (non-fina
133
+ # @param interim_results [Boolean] Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. When true, Soniox stre
111
134
  #
112
135
  # @param keyterm [String] Available only for deepgram/nova-3 and deepgram/flux. A comma-separated list of
113
136
  #
114
- # @param max_endpoint_delay_ms [Integer] Available only for soniox/stt-rt-v4. Maximum silence (in milliseconds) before So
137
+ # @param language_hints [Array<String>] Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. A list of ISO 639-1 la
138
+ #
139
+ # @param max_endpoint_delay_ms [Integer] Available only for soniox/stt-rt-v4 and soniox/stt-rt-v5. Maximum silence (in mi
115
140
  #
116
141
  # @param max_turn_silence [Integer] Available only for assemblyai/universal-streaming. Maximum duration of silence i
117
142
  #
@@ -158,6 +158,16 @@ module Telnyx
158
158
  # @return [Telnyx::Models::DialogflowConfig, nil]
159
159
  optional :dialogflow_config, -> { Telnyx::DialogflowConfig }
160
160
 
161
+ # @!attribute diversion
162
+ # The number the inbound call being transferred was originally received on, in
163
+ # +E164 format. Supplying it lets an unverified non-Telnyx `from` be used as the
164
+ # caller id, provided that number is still on an active inbound call to this
165
+ # `diversion` number for your account. The `diversion` number itself must be one
166
+ # you own or have verified.
167
+ #
168
+ # @return [String, nil]
169
+ optional :diversion, String
170
+
161
171
  # @!attribute enable_dialogflow
162
172
  # Enables Dialogflow for the current call. The default value is false.
163
173
  #
@@ -507,7 +517,7 @@ module Telnyx
507
517
  # @return [Symbol, Telnyx::Models::CallDialParams::WebhookURLsMethod, nil]
508
518
  optional :webhook_urls_method, enum: -> { Telnyx::CallDialParams::WebhookURLsMethod }
509
519
 
510
- # @!method initialize(connection_id:, from:, to:, answering_machine_detection: nil, answering_machine_detection_config: nil, assistant: nil, audio_url: nil, billing_group_id: nil, bridge_intent: nil, bridge_on_answer: nil, client_state: nil, command_id: nil, conference_config: nil, conversation_relay_config: nil, custom_headers: nil, deepfake_detection: nil, dialogflow_config: nil, enable_dialogflow: nil, from_display_name: nil, link_to: nil, media_encryption: nil, media_name: nil, park_after_unbridge: nil, preferred_codecs: nil, prevent_double_bridge: nil, privacy: nil, record: nil, record_channels: nil, record_custom_file_name: nil, record_format: nil, record_max_length: nil, record_timeout_secs: nil, record_track: nil, record_trim: nil, retry_on_timeout: nil, route_to_mobile: nil, send_digits_on_answer: nil, send_silence_when_idle: nil, sip_auth_password: nil, sip_auth_username: nil, sip_headers: nil, sip_region: nil, sip_transport_protocol: nil, sound_modifications: nil, stream_auth_token: nil, stream_bidirectional_codec: nil, stream_bidirectional_mode: nil, stream_bidirectional_sampling_rate: nil, stream_bidirectional_target_legs: nil, stream_codec: nil, stream_establish_before_call_originate: nil, stream_track: nil, stream_url: nil, supervise_call_control_id: nil, supervisor_role: nil, time_limit_secs: nil, timeout_secs: nil, transcription: nil, transcription_config: nil, webhook_retries_policies: nil, webhook_url: nil, webhook_url_method: nil, webhook_urls: nil, webhook_urls_method: nil, request_options: {})
520
+ # @!method initialize(connection_id:, from:, to:, answering_machine_detection: nil, answering_machine_detection_config: nil, assistant: nil, audio_url: nil, billing_group_id: nil, bridge_intent: nil, bridge_on_answer: nil, client_state: nil, command_id: nil, conference_config: nil, conversation_relay_config: nil, custom_headers: nil, deepfake_detection: nil, dialogflow_config: nil, diversion: nil, enable_dialogflow: nil, from_display_name: nil, link_to: nil, media_encryption: nil, media_name: nil, park_after_unbridge: nil, preferred_codecs: nil, prevent_double_bridge: nil, privacy: nil, record: nil, record_channels: nil, record_custom_file_name: nil, record_format: nil, record_max_length: nil, record_timeout_secs: nil, record_track: nil, record_trim: nil, retry_on_timeout: nil, route_to_mobile: nil, send_digits_on_answer: nil, send_silence_when_idle: nil, sip_auth_password: nil, sip_auth_username: nil, sip_headers: nil, sip_region: nil, sip_transport_protocol: nil, sound_modifications: nil, stream_auth_token: nil, stream_bidirectional_codec: nil, stream_bidirectional_mode: nil, stream_bidirectional_sampling_rate: nil, stream_bidirectional_target_legs: nil, stream_codec: nil, stream_establish_before_call_originate: nil, stream_track: nil, stream_url: nil, supervise_call_control_id: nil, supervisor_role: nil, time_limit_secs: nil, timeout_secs: nil, transcription: nil, transcription_config: nil, webhook_retries_policies: nil, webhook_url: nil, webhook_url_method: nil, webhook_urls: nil, webhook_urls_method: nil, request_options: {})
511
521
  # Some parameter documentations has been truncated, see
512
522
  # {Telnyx::Models::CallDialParams} for more details.
513
523
  #
@@ -545,6 +555,8 @@ module Telnyx
545
555
  #
546
556
  # @param dialogflow_config [Telnyx::Models::DialogflowConfig]
547
557
  #
558
+ # @param diversion [String] The number the inbound call being transferred was originally received on, in +E1
559
+ #
548
560
  # @param enable_dialogflow [Boolean] Enables Dialogflow for the current call. The default value is false.
549
561
  #
550
562
  # @param from_display_name [String] The `from_display_name` string to be used as the caller id name (SIP From Displa
@@ -78,6 +78,16 @@ module Telnyx
78
78
  # @return [Array<Telnyx::Models::CustomSipHeader>, nil]
79
79
  optional :custom_headers, -> { Telnyx::Internal::Type::ArrayOf[Telnyx::CustomSipHeader] }
80
80
 
81
+ # @!attribute diversion
82
+ # The number the inbound call being transferred was originally received on, in
83
+ # +E164 format. Supplying it lets an unverified non-Telnyx `from` be used as the
84
+ # caller id, provided that number is still on an active inbound call to this
85
+ # `diversion` number for your account. The `diversion` number itself must be one
86
+ # you own or have verified.
87
+ #
88
+ # @return [String, nil]
89
+ optional :diversion, String
90
+
81
91
  # @!attribute early_media
82
92
  # If set to false, early media will not be passed to the originating leg.
83
93
  #
@@ -336,7 +346,7 @@ module Telnyx
336
346
  # @return [Symbol, Telnyx::Models::Calls::ActionTransferParams::WebhookURLsMethod, nil]
337
347
  optional :webhook_urls_method, enum: -> { Telnyx::Calls::ActionTransferParams::WebhookURLsMethod }
338
348
 
339
- # @!method initialize(call_control_id:, to:, answering_machine_detection: nil, answering_machine_detection_config: nil, audio_url: nil, client_state: nil, command_id: nil, custom_headers: nil, early_media: nil, from: nil, from_display_name: nil, media_encryption: nil, media_name: nil, mute_dtmf: nil, park_after_unbridge: nil, preferred_codecs: nil, privacy: nil, record: nil, record_channels: nil, record_custom_file_name: nil, record_format: nil, record_max_length: nil, record_timeout_secs: nil, record_track: nil, record_trim: nil, route_to_mobile: nil, send_digits_on_answer: nil, sip_auth_password: nil, sip_auth_username: nil, sip_headers: nil, sip_region: nil, sip_transport_protocol: nil, sound_modifications: nil, target_leg_client_state: nil, time_limit_secs: nil, timeout_secs: nil, webhook_retries_policies: nil, webhook_url: nil, webhook_url_method: nil, webhook_urls: nil, webhook_urls_method: nil, request_options: {})
349
+ # @!method initialize(call_control_id:, to:, answering_machine_detection: nil, answering_machine_detection_config: nil, audio_url: nil, client_state: nil, command_id: nil, custom_headers: nil, diversion: nil, early_media: nil, from: nil, from_display_name: nil, media_encryption: nil, media_name: nil, mute_dtmf: nil, park_after_unbridge: nil, preferred_codecs: nil, privacy: nil, record: nil, record_channels: nil, record_custom_file_name: nil, record_format: nil, record_max_length: nil, record_timeout_secs: nil, record_track: nil, record_trim: nil, route_to_mobile: nil, send_digits_on_answer: nil, sip_auth_password: nil, sip_auth_username: nil, sip_headers: nil, sip_region: nil, sip_transport_protocol: nil, sound_modifications: nil, target_leg_client_state: nil, time_limit_secs: nil, timeout_secs: nil, webhook_retries_policies: nil, webhook_url: nil, webhook_url_method: nil, webhook_urls: nil, webhook_urls_method: nil, request_options: {})
340
350
  # Some parameter documentations has been truncated, see
341
351
  # {Telnyx::Models::Calls::ActionTransferParams} for more details.
342
352
  #
@@ -356,6 +366,8 @@ module Telnyx
356
366
  #
357
367
  # @param custom_headers [Array<Telnyx::Models::CustomSipHeader>] Custom headers to be added to the SIP INVITE.
358
368
  #
369
+ # @param diversion [String] The number the inbound call being transferred was originally received on, in +E1
370
+ #
359
371
  # @param early_media [Boolean] If set to false, early media will not be passed to the originating leg.
360
372
  #
361
373
  # @param from [String] The `from` number to be used as the caller id presented to the destination (`to`
@@ -4,8 +4,8 @@ module Telnyx
4
4
  module Models
5
5
  class ConnectionRtcpSettings < Telnyx::Internal::Type::BaseModel
6
6
  # @!attribute capture_enabled
7
- # BETA - Enable the capture and storage of RTCP messages to create QoS reports on
8
- # the Telnyx Mission Control Portal.
7
+ # Enable the capture and storage of RTCP messages to create QoS reports on the
8
+ # Telnyx Mission Control Portal.
9
9
  #
10
10
  # @return [Boolean, nil]
11
11
  optional :capture_enabled, Telnyx::Internal::Type::Boolean
@@ -27,7 +27,7 @@ module Telnyx
27
27
  # Some parameter documentations has been truncated, see
28
28
  # {Telnyx::Models::ConnectionRtcpSettings} for more details.
29
29
  #
30
- # @param capture_enabled [Boolean] BETA - Enable the capture and storage of RTCP messages to create QoS reports on
30
+ # @param capture_enabled [Boolean] Enable the capture and storage of RTCP messages to create QoS reports on the Tel
31
31
  #
32
32
  # @param port [Symbol, Telnyx::Models::ConnectionRtcpSettings::Port] RTCP port by default is rtp+1, it can also be set to rtcp-mux
33
33
  #