ultracart_api 4.1.72 → 4.1.73

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4bf651f3c35e969505f1e9aa6fde9a7b7c32671fe1163754aa36d32033d2c028
4
- data.tar.gz: 79da60e733be44597252b9dd0c064deb3a305ed85589972da9591886d19802dc
3
+ metadata.gz: 2b012c1c1cb42f56eec70a9c9a782b0eb04ca2c3350588e242288ec4e371eecc
4
+ data.tar.gz: 0c6e5c3b3e6a6e40fb4f025785f14555fd8202467297f476122c1c76028802f2
5
5
  SHA512:
6
- metadata.gz: ce8cde54f86df8d62aa28cee6a142c3f9f651196714fb3d96091ed01fc2fdc51a3fbe3b609e66abbec1099ff0721769c890771cb9ef39e46601d66c29c70e366
7
- data.tar.gz: f0f27c480eba36cb43c190a6fe71d13274b72f5bdf9f63b02c23b456eaf4eec570d193d0c863572a5cd46a645a34c072089b96741dae033ac23a19e5c7f7330f
6
+ metadata.gz: b93742d5f5b6ddecaf89d65236de195902591c0deebc3b1c00476f6dcca5e326a920d8649a13f5d6ea990c68021b0277982a761987e9512ada2e55e21cde7b3d
7
+ data.tar.gz: ac4ffda51157a410e93dbf9ea409610f68f3cfdb6866614149e70fc7e5d56895a44d59f7e9c0154acfb35baf0ac56e185cb5dbcd3b20e46533b2db48817b35b6
data/README.md CHANGED
@@ -7,7 +7,7 @@ Note: Every method has a sample for every language. See https://github.com/Ultr
7
7
  This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
8
8
 
9
9
  - API version: 2.0.0
10
- - Package version: 4.1.72
10
+ - Package version: 4.1.73
11
11
  - Build package: org.openapitools.codegen.languages.RubyClientCodegen
12
12
  - For more information, please visit [http://www.ultracart.com/api/](http://www.ultracart.com/api/)
13
13
 
@@ -16,7 +16,7 @@ This SDK is automatically generated by the [OpenAPI Generator](https://openapi-g
16
16
  gemfile:
17
17
 
18
18
  ```shell
19
- gem 'ultracart_api', '4.1.72'
19
+ gem 'ultracart_api', '4.1.73'
20
20
  ```
21
21
 
22
22
  install:
@@ -865,6 +865,7 @@ Class | Method | HTTP request | Description
865
865
  - [UltracartClient::ConversationPbxCallAgent](docs/ConversationPbxCallAgent.md)
866
866
  - [UltracartClient::ConversationPbxCallAiCost](docs/ConversationPbxCallAiCost.md)
867
867
  - [UltracartClient::ConversationPbxCallAiEngagement](docs/ConversationPbxCallAiEngagement.md)
868
+ - [UltracartClient::ConversationPbxCallAiSummary](docs/ConversationPbxCallAiSummary.md)
868
869
  - [UltracartClient::ConversationPbxCallAiToolCall](docs/ConversationPbxCallAiToolCall.md)
869
870
  - [UltracartClient::ConversationPbxCallAiWhisper](docs/ConversationPbxCallAiWhisper.md)
870
871
  - [UltracartClient::ConversationPbxCallCaller](docs/ConversationPbxCallCaller.md)
@@ -1689,6 +1690,7 @@ Not every change is committed to every SDK.
1689
1690
 
1690
1691
  | Version | Date | Comments |
1691
1692
  | --: | :-: | --- |
1693
+ | 4.1.73 | 04/13/2026 | conversation pbx - queue configuration for ai summary and call record zoho desk |
1692
1694
  | 4.1.72 | 04/11/2026 | conversation pbx - voicemail notification channels |
1693
1695
  | 4.1.71 | 04/06/2026 | coupons - new percent_off_items_with_minimum_item_amount |
1694
1696
  | 4.1.70 | 04/03/2026 | conversation pbx - queue callback settings |
@@ -7,6 +7,7 @@
7
7
  | **account_sid** | **String** | Twilio account SID | [optional] |
8
8
  | **agents** | [**Array<ConversationPbxCallAgent>**](ConversationPbxCallAgent.md) | List of agents who participated in this call | [optional] |
9
9
  | **ai_agent_engagements** | [**Array<ConversationPbxCallAiEngagement>**](ConversationPbxCallAiEngagement.md) | List of AI agent engagements during the call | [optional] |
10
+ | **ai_summary** | [**ConversationPbxCallAiSummary**](ConversationPbxCallAiSummary.md) | | [optional] |
10
11
  | **call_sid** | **String** | Twilio call SID for the primary (customer) call leg | [optional] |
11
12
  | **call_uuid** | **String** | Unique identifier for this call record | [optional] |
12
13
  | **caller** | [**ConversationPbxCallCaller**](ConversationPbxCallCaller.md) | | [optional] |
@@ -26,6 +27,8 @@
26
27
  | **timeline** | [**ConversationPbxCallTimeline**](ConversationPbxCallTimeline.md) | | [optional] |
27
28
  | **transfers** | [**Array<ConversationPbxCallTransfer>**](ConversationPbxCallTransfer.md) | List of transfer events during the call | [optional] |
28
29
  | **updated_at_dts** | **String** | Timestamp when the call record was last updated | [optional] |
30
+ | **zoho_desk_ticket_id** | **String** | Zoho Desk ticket ID if a ticket was created for this call | [optional] |
31
+ | **zoho_desk_ticket_url** | **String** | URL to the Zoho Desk ticket if a ticket was created for this call | [optional] |
29
32
 
30
33
  ## Example
31
34
 
@@ -36,6 +39,7 @@ instance = UltracartClient::ConversationPbxCall.new(
36
39
  account_sid: null,
37
40
  agents: null,
38
41
  ai_agent_engagements: null,
42
+ ai_summary: null,
39
43
  call_sid: null,
40
44
  call_uuid: null,
41
45
  caller: null,
@@ -54,7 +58,9 @@ instance = UltracartClient::ConversationPbxCall.new(
54
58
  status: null,
55
59
  timeline: null,
56
60
  transfers: null,
57
- updated_at_dts: null
61
+ updated_at_dts: null,
62
+ zoho_desk_ticket_id: null,
63
+ zoho_desk_ticket_url: null
58
64
  )
59
65
  ```
60
66
 
@@ -0,0 +1,38 @@
1
+ # UltracartClient::ConversationPbxCallAiSummary
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **action_items** | **Array<String>** | Action items identified during the call | [optional] |
8
+ | **call_category** | **String** | Category of the call (e.g. support, sales, billing) | [optional] |
9
+ | **completion_tokens** | **Integer** | Number of output tokens used to generate the summary | [optional] |
10
+ | **cost** | **Float** | Cost of generating the summary in the specified currency | [optional] |
11
+ | **cost_currency** | **String** | Currency code for the summary cost (always USD) | [optional] |
12
+ | **generated_at_dts** | **String** | Timestamp when the summary was generated | [optional] |
13
+ | **key_topics** | **Array<String>** | Key topics discussed during the call | [optional] |
14
+ | **model** | **String** | AI model used to generate the summary (e.g. grok-4.1-fast) | [optional] |
15
+ | **prompt_tokens** | **Integer** | Number of input tokens used to generate the summary | [optional] |
16
+ | **sentiment** | **String** | Overall sentiment of the call | [optional] |
17
+ | **summary** | **String** | 2-3 sentence synopsis of the call | [optional] |
18
+
19
+ ## Example
20
+
21
+ ```ruby
22
+ require 'ultracart_api'
23
+
24
+ instance = UltracartClient::ConversationPbxCallAiSummary.new(
25
+ action_items: null,
26
+ call_category: null,
27
+ completion_tokens: null,
28
+ cost: null,
29
+ cost_currency: null,
30
+ generated_at_dts: null,
31
+ key_topics: null,
32
+ model: null,
33
+ prompt_tokens: null,
34
+ sentiment: null,
35
+ summary: null
36
+ )
37
+ ```
38
+
@@ -7,6 +7,7 @@
7
7
  | **ai_agent_billed_minutes** | **Float** | Total AI agent billed minutes for this call | [optional] |
8
8
  | **ai_agent_cost** | **Float** | Total AI agent cost for this call | [optional] |
9
9
  | **ai_agent_cost_currency** | **String** | Currency for AI agent cost | [optional] |
10
+ | **ai_summary_cost** | **Float** | AI summary generation cost (LLM call made by pbx-transcript-formatter after the call ends) | [optional] |
10
11
  | **call_currency** | **String** | Currency for call price (default USD) | [optional] |
11
12
  | **call_price** | **Float** | Twilio call cost | [optional] |
12
13
  | **call_price_estimated** | **Boolean** | True if call price is a fallback-rate estimate, false if Twilio-confirmed | [optional] |
@@ -21,6 +22,7 @@ instance = UltracartClient::ConversationPbxCallFinancial.new(
21
22
  ai_agent_billed_minutes: null,
22
23
  ai_agent_cost: null,
23
24
  ai_agent_cost_currency: null,
25
+ ai_summary_cost: null,
24
26
  call_currency: null,
25
27
  call_price: null,
26
28
  call_price_estimated: null,
@@ -5,6 +5,8 @@
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
7
  | **ai_priority** | **String** | AI Agent Priority compared to human agents | [optional] |
8
+ | **ai_summary_enabled** | **Boolean** | If true, AI summaries are generated for answered calls in this queue | [optional] |
9
+ | **ai_summary_instructions** | **String** | Custom instructions injected into the AI summary system prompt for this queue | [optional] |
8
10
  | **ai_timeout_seconds** | **Integer** | AI timeout seconds | [optional] |
9
11
  | **announce_queue_position** | **Boolean** | If true, the customer is told their queue position upon entering the queue | [optional] |
10
12
  | **automatic_coach_agent_uuid** | **String** | AI Agent UUID to automatically engage to provide coaching | [optional] |
@@ -40,6 +42,8 @@
40
42
  | **wait_critical_seconds** | **Integer** | Wait time in seconds before critical | [optional] |
41
43
  | **wait_warning_seconds** | **Integer** | Wait time in seconds before warning | [optional] |
42
44
  | **wrap_up_seconds** | **Integer** | Wrap up time in seconds | [optional] |
45
+ | **zoho_desk_department_id** | **String** | Zoho Desk department ID to create tickets in | [optional] |
46
+ | **zoho_desk_ticket_enabled** | **Boolean** | If true, a Zoho Desk ticket is automatically created for answered calls in this queue | [optional] |
43
47
 
44
48
  ## Example
45
49
 
@@ -48,6 +52,8 @@ require 'ultracart_api'
48
52
 
49
53
  instance = UltracartClient::ConversationPbxQueue.new(
50
54
  ai_priority: null,
55
+ ai_summary_enabled: null,
56
+ ai_summary_instructions: null,
51
57
  ai_timeout_seconds: null,
52
58
  announce_queue_position: null,
53
59
  automatic_coach_agent_uuid: null,
@@ -82,7 +88,9 @@ instance = UltracartClient::ConversationPbxQueue.new(
82
88
  voicemail: null,
83
89
  wait_critical_seconds: null,
84
90
  wait_warning_seconds: null,
85
- wrap_up_seconds: null
91
+ wrap_up_seconds: null,
92
+ zoho_desk_department_id: null,
93
+ zoho_desk_ticket_enabled: null
86
94
  )
87
95
  ```
88
96
 
@@ -24,6 +24,8 @@ module UltracartClient
24
24
  # List of AI agent engagements during the call
25
25
  attr_accessor :ai_agent_engagements
26
26
 
27
+ attr_accessor :ai_summary
28
+
27
29
  # Twilio call SID for the primary (customer) call leg
28
30
  attr_accessor :call_sid
29
31
 
@@ -77,12 +79,19 @@ module UltracartClient
77
79
  # Timestamp when the call record was last updated
78
80
  attr_accessor :updated_at_dts
79
81
 
82
+ # Zoho Desk ticket ID if a ticket was created for this call
83
+ attr_accessor :zoho_desk_ticket_id
84
+
85
+ # URL to the Zoho Desk ticket if a ticket was created for this call
86
+ attr_accessor :zoho_desk_ticket_url
87
+
80
88
  # Attribute mapping from ruby-style variable name to JSON key.
81
89
  def self.attribute_map
82
90
  {
83
91
  :'account_sid' => :'account_sid',
84
92
  :'agents' => :'agents',
85
93
  :'ai_agent_engagements' => :'ai_agent_engagements',
94
+ :'ai_summary' => :'ai_summary',
86
95
  :'call_sid' => :'call_sid',
87
96
  :'call_uuid' => :'call_uuid',
88
97
  :'caller' => :'caller',
@@ -101,7 +110,9 @@ module UltracartClient
101
110
  :'status' => :'status',
102
111
  :'timeline' => :'timeline',
103
112
  :'transfers' => :'transfers',
104
- :'updated_at_dts' => :'updated_at_dts'
113
+ :'updated_at_dts' => :'updated_at_dts',
114
+ :'zoho_desk_ticket_id' => :'zoho_desk_ticket_id',
115
+ :'zoho_desk_ticket_url' => :'zoho_desk_ticket_url'
105
116
  }
106
117
  end
107
118
 
@@ -116,6 +127,7 @@ module UltracartClient
116
127
  :'account_sid' => :'String',
117
128
  :'agents' => :'Array<ConversationPbxCallAgent>',
118
129
  :'ai_agent_engagements' => :'Array<ConversationPbxCallAiEngagement>',
130
+ :'ai_summary' => :'ConversationPbxCallAiSummary',
119
131
  :'call_sid' => :'String',
120
132
  :'call_uuid' => :'String',
121
133
  :'caller' => :'ConversationPbxCallCaller',
@@ -134,7 +146,9 @@ module UltracartClient
134
146
  :'status' => :'String',
135
147
  :'timeline' => :'ConversationPbxCallTimeline',
136
148
  :'transfers' => :'Array<ConversationPbxCallTransfer>',
137
- :'updated_at_dts' => :'String'
149
+ :'updated_at_dts' => :'String',
150
+ :'zoho_desk_ticket_id' => :'String',
151
+ :'zoho_desk_ticket_url' => :'String'
138
152
  }
139
153
  end
140
154
 
@@ -175,6 +189,10 @@ module UltracartClient
175
189
  end
176
190
  end
177
191
 
192
+ if attributes.key?(:'ai_summary')
193
+ self.ai_summary = attributes[:'ai_summary']
194
+ end
195
+
178
196
  if attributes.key?(:'call_sid')
179
197
  self.call_sid = attributes[:'call_sid']
180
198
  end
@@ -258,6 +276,14 @@ module UltracartClient
258
276
  if attributes.key?(:'updated_at_dts')
259
277
  self.updated_at_dts = attributes[:'updated_at_dts']
260
278
  end
279
+
280
+ if attributes.key?(:'zoho_desk_ticket_id')
281
+ self.zoho_desk_ticket_id = attributes[:'zoho_desk_ticket_id']
282
+ end
283
+
284
+ if attributes.key?(:'zoho_desk_ticket_url')
285
+ self.zoho_desk_ticket_url = attributes[:'zoho_desk_ticket_url']
286
+ end
261
287
  end
262
288
 
263
289
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -281,6 +307,7 @@ module UltracartClient
281
307
  account_sid == o.account_sid &&
282
308
  agents == o.agents &&
283
309
  ai_agent_engagements == o.ai_agent_engagements &&
310
+ ai_summary == o.ai_summary &&
284
311
  call_sid == o.call_sid &&
285
312
  call_uuid == o.call_uuid &&
286
313
  caller == o.caller &&
@@ -299,7 +326,9 @@ module UltracartClient
299
326
  status == o.status &&
300
327
  timeline == o.timeline &&
301
328
  transfers == o.transfers &&
302
- updated_at_dts == o.updated_at_dts
329
+ updated_at_dts == o.updated_at_dts &&
330
+ zoho_desk_ticket_id == o.zoho_desk_ticket_id &&
331
+ zoho_desk_ticket_url == o.zoho_desk_ticket_url
303
332
  end
304
333
 
305
334
  # @see the `==` method
@@ -311,7 +340,7 @@ module UltracartClient
311
340
  # Calculates hash code according to all attributes.
312
341
  # @return [Integer] Hash code
313
342
  def hash
314
- [account_sid, agents, ai_agent_engagements, call_sid, call_uuid, caller, conference_sid, created_at_dts, customer_name, customer_profile_oid, disposition, email, financial, holds, merchant_id, recording_sids, recordings, routing, status, timeline, transfers, updated_at_dts].hash
343
+ [account_sid, agents, ai_agent_engagements, ai_summary, call_sid, call_uuid, caller, conference_sid, created_at_dts, customer_name, customer_profile_oid, disposition, email, financial, holds, merchant_id, recording_sids, recordings, routing, status, timeline, transfers, updated_at_dts, zoho_desk_ticket_id, zoho_desk_ticket_url].hash
315
344
  end
316
345
 
317
346
  # Builds the object from hash
@@ -0,0 +1,358 @@
1
+ =begin
2
+ #UltraCart Rest API V2
3
+
4
+ #UltraCart REST API Version 2
5
+
6
+ The version of the OpenAPI document: 2.0.0
7
+ Contact: support@ultracart.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 6.0.1-SNAPSHOT
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module UltracartClient
17
+ class ConversationPbxCallAiSummary
18
+ # Action items identified during the call
19
+ attr_accessor :action_items
20
+
21
+ # Category of the call (e.g. support, sales, billing)
22
+ attr_accessor :call_category
23
+
24
+ # Number of output tokens used to generate the summary
25
+ attr_accessor :completion_tokens
26
+
27
+ # Cost of generating the summary in the specified currency
28
+ attr_accessor :cost
29
+
30
+ # Currency code for the summary cost (always USD)
31
+ attr_accessor :cost_currency
32
+
33
+ # Timestamp when the summary was generated
34
+ attr_accessor :generated_at_dts
35
+
36
+ # Key topics discussed during the call
37
+ attr_accessor :key_topics
38
+
39
+ # AI model used to generate the summary (e.g. grok-4.1-fast)
40
+ attr_accessor :model
41
+
42
+ # Number of input tokens used to generate the summary
43
+ attr_accessor :prompt_tokens
44
+
45
+ # Overall sentiment of the call
46
+ attr_accessor :sentiment
47
+
48
+ # 2-3 sentence synopsis of the call
49
+ attr_accessor :summary
50
+
51
+ class EnumAttributeValidator
52
+ attr_reader :datatype
53
+ attr_reader :allowable_values
54
+
55
+ def initialize(datatype, allowable_values)
56
+ @allowable_values = allowable_values.map do |value|
57
+ case datatype.to_s
58
+ when /Integer/i
59
+ value.to_i
60
+ when /Float/i
61
+ value.to_f
62
+ else
63
+ value
64
+ end
65
+ end
66
+ end
67
+
68
+ def valid?(value)
69
+ !value || allowable_values.include?(value)
70
+ end
71
+ end
72
+
73
+ # Attribute mapping from ruby-style variable name to JSON key.
74
+ def self.attribute_map
75
+ {
76
+ :'action_items' => :'action_items',
77
+ :'call_category' => :'call_category',
78
+ :'completion_tokens' => :'completion_tokens',
79
+ :'cost' => :'cost',
80
+ :'cost_currency' => :'cost_currency',
81
+ :'generated_at_dts' => :'generated_at_dts',
82
+ :'key_topics' => :'key_topics',
83
+ :'model' => :'model',
84
+ :'prompt_tokens' => :'prompt_tokens',
85
+ :'sentiment' => :'sentiment',
86
+ :'summary' => :'summary'
87
+ }
88
+ end
89
+
90
+ # Returns all the JSON keys this model knows about
91
+ def self.acceptable_attributes
92
+ attribute_map.values
93
+ end
94
+
95
+ # Attribute type mapping.
96
+ def self.openapi_types
97
+ {
98
+ :'action_items' => :'Array<String>',
99
+ :'call_category' => :'String',
100
+ :'completion_tokens' => :'Integer',
101
+ :'cost' => :'Float',
102
+ :'cost_currency' => :'String',
103
+ :'generated_at_dts' => :'String',
104
+ :'key_topics' => :'Array<String>',
105
+ :'model' => :'String',
106
+ :'prompt_tokens' => :'Integer',
107
+ :'sentiment' => :'String',
108
+ :'summary' => :'String'
109
+ }
110
+ end
111
+
112
+ # List of attributes with nullable: true
113
+ def self.openapi_nullable
114
+ Set.new([
115
+ ])
116
+ end
117
+
118
+ # Initializes the object
119
+ # @param [Hash] attributes Model attributes in the form of hash
120
+ def initialize(attributes = {})
121
+ if (!attributes.is_a?(Hash))
122
+ fail ArgumentError, "The input argument (attributes) must be a hash in `UltracartClient::ConversationPbxCallAiSummary` initialize method"
123
+ end
124
+
125
+ # check to see if the attribute exists and convert string to symbol for hash key
126
+ attributes = attributes.each_with_object({}) { |(k, v), h|
127
+ if (!self.class.attribute_map.key?(k.to_sym))
128
+ fail ArgumentError, "`#{k}` is not a valid attribute in `UltracartClient::ConversationPbxCallAiSummary`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
129
+ end
130
+ h[k.to_sym] = v
131
+ }
132
+
133
+ if attributes.key?(:'action_items')
134
+ if (value = attributes[:'action_items']).is_a?(Array)
135
+ self.action_items = value
136
+ end
137
+ end
138
+
139
+ if attributes.key?(:'call_category')
140
+ self.call_category = attributes[:'call_category']
141
+ end
142
+
143
+ if attributes.key?(:'completion_tokens')
144
+ self.completion_tokens = attributes[:'completion_tokens']
145
+ end
146
+
147
+ if attributes.key?(:'cost')
148
+ self.cost = attributes[:'cost']
149
+ end
150
+
151
+ if attributes.key?(:'cost_currency')
152
+ self.cost_currency = attributes[:'cost_currency']
153
+ end
154
+
155
+ if attributes.key?(:'generated_at_dts')
156
+ self.generated_at_dts = attributes[:'generated_at_dts']
157
+ end
158
+
159
+ if attributes.key?(:'key_topics')
160
+ if (value = attributes[:'key_topics']).is_a?(Array)
161
+ self.key_topics = value
162
+ end
163
+ end
164
+
165
+ if attributes.key?(:'model')
166
+ self.model = attributes[:'model']
167
+ end
168
+
169
+ if attributes.key?(:'prompt_tokens')
170
+ self.prompt_tokens = attributes[:'prompt_tokens']
171
+ end
172
+
173
+ if attributes.key?(:'sentiment')
174
+ self.sentiment = attributes[:'sentiment']
175
+ end
176
+
177
+ if attributes.key?(:'summary')
178
+ self.summary = attributes[:'summary']
179
+ end
180
+ end
181
+
182
+ # Show invalid properties with the reasons. Usually used together with valid?
183
+ # @return Array for valid properties with the reasons
184
+ def list_invalid_properties
185
+ invalid_properties = Array.new
186
+ invalid_properties
187
+ end
188
+
189
+ # Check to see if the all the properties in the model are valid
190
+ # @return true if the model is valid
191
+ def valid?
192
+ sentiment_validator = EnumAttributeValidator.new('String', ["positive", "neutral", "negative"])
193
+ return false unless sentiment_validator.valid?(@sentiment)
194
+ true
195
+ end
196
+
197
+ # Custom attribute writer method checking allowed values (enum).
198
+ # @param [Object] sentiment Object to be assigned
199
+ def sentiment=(sentiment)
200
+ validator = EnumAttributeValidator.new('String', ["positive", "neutral", "negative"])
201
+ unless validator.valid?(sentiment)
202
+ fail ArgumentError, "invalid value for \"sentiment\", must be one of #{validator.allowable_values}."
203
+ end
204
+ @sentiment = sentiment
205
+ end
206
+
207
+ # Checks equality by comparing each attribute.
208
+ # @param [Object] Object to be compared
209
+ def ==(o)
210
+ return true if self.equal?(o)
211
+ self.class == o.class &&
212
+ action_items == o.action_items &&
213
+ call_category == o.call_category &&
214
+ completion_tokens == o.completion_tokens &&
215
+ cost == o.cost &&
216
+ cost_currency == o.cost_currency &&
217
+ generated_at_dts == o.generated_at_dts &&
218
+ key_topics == o.key_topics &&
219
+ model == o.model &&
220
+ prompt_tokens == o.prompt_tokens &&
221
+ sentiment == o.sentiment &&
222
+ summary == o.summary
223
+ end
224
+
225
+ # @see the `==` method
226
+ # @param [Object] Object to be compared
227
+ def eql?(o)
228
+ self == o
229
+ end
230
+
231
+ # Calculates hash code according to all attributes.
232
+ # @return [Integer] Hash code
233
+ def hash
234
+ [action_items, call_category, completion_tokens, cost, cost_currency, generated_at_dts, key_topics, model, prompt_tokens, sentiment, summary].hash
235
+ end
236
+
237
+ # Builds the object from hash
238
+ # @param [Hash] attributes Model attributes in the form of hash
239
+ # @return [Object] Returns the model itself
240
+ def self.build_from_hash(attributes)
241
+ new.build_from_hash(attributes)
242
+ end
243
+
244
+ # Builds the object from hash
245
+ # @param [Hash] attributes Model attributes in the form of hash
246
+ # @return [Object] Returns the model itself
247
+ def build_from_hash(attributes)
248
+ return nil unless attributes.is_a?(Hash)
249
+ attributes = attributes.transform_keys(&:to_sym)
250
+ self.class.openapi_types.each_pair do |key, type|
251
+ if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
252
+ self.send("#{key}=", nil)
253
+ elsif type =~ /\AArray<(.*)>/i
254
+ # check to ensure the input is an array given that the attribute
255
+ # is documented as an array but the input is not
256
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
257
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
258
+ end
259
+ elsif !attributes[self.class.attribute_map[key]].nil?
260
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
261
+ end
262
+ end
263
+
264
+ self
265
+ end
266
+
267
+ # Deserializes the data based on type
268
+ # @param string type Data type
269
+ # @param string value Value to be deserialized
270
+ # @return [Object] Deserialized data
271
+ def _deserialize(type, value)
272
+ case type.to_sym
273
+ when :Time
274
+ Time.parse(value)
275
+ when :Date
276
+ Date.parse(value)
277
+ when :String
278
+ value.to_s
279
+ when :Integer
280
+ value.to_i
281
+ when :Float
282
+ value.to_f
283
+ when :Boolean
284
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
285
+ true
286
+ else
287
+ false
288
+ end
289
+ when :Object
290
+ # generic object (usually a Hash), return directly
291
+ value
292
+ when /\AArray<(?<inner_type>.+)>\z/
293
+ inner_type = Regexp.last_match[:inner_type]
294
+ value.map { |v| _deserialize(inner_type, v) }
295
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
296
+ k_type = Regexp.last_match[:k_type]
297
+ v_type = Regexp.last_match[:v_type]
298
+ {}.tap do |hash|
299
+ value.each do |k, v|
300
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
301
+ end
302
+ end
303
+ else # model
304
+ # models (e.g. Pet) or oneOf
305
+ klass = UltracartClient.const_get(type)
306
+ klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
307
+ end
308
+ end
309
+
310
+ # Returns the string representation of the object
311
+ # @return [String] String presentation of the object
312
+ def to_s
313
+ to_hash.to_s
314
+ end
315
+
316
+ # to_body is an alias to to_hash (backward compatibility)
317
+ # @return [Hash] Returns the object in the form of hash
318
+ def to_body
319
+ to_hash
320
+ end
321
+
322
+ # Returns the object in the form of hash
323
+ # @return [Hash] Returns the object in the form of hash
324
+ def to_hash
325
+ hash = {}
326
+ self.class.attribute_map.each_pair do |attr, param|
327
+ value = self.send(attr)
328
+ if value.nil?
329
+ is_nullable = self.class.openapi_nullable.include?(attr)
330
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
331
+ end
332
+
333
+ hash[param] = _to_hash(value)
334
+ end
335
+ hash
336
+ end
337
+
338
+ # Outputs non-array value in the form of hash
339
+ # For object, use to_hash. Otherwise, just return the value
340
+ # @param [Object] value Any valid value
341
+ # @return [Hash] Returns the value in the form of hash
342
+ def _to_hash(value)
343
+ if value.is_a?(Array)
344
+ value.compact.map { |v| _to_hash(v) }
345
+ elsif value.is_a?(Hash)
346
+ {}.tap do |hash|
347
+ value.each { |k, v| hash[k] = _to_hash(v) }
348
+ end
349
+ elsif value.respond_to? :to_hash
350
+ value.to_hash
351
+ else
352
+ value
353
+ end
354
+ end
355
+
356
+ end
357
+
358
+ end
@@ -24,6 +24,9 @@ module UltracartClient
24
24
  # Currency for AI agent cost
25
25
  attr_accessor :ai_agent_cost_currency
26
26
 
27
+ # AI summary generation cost (LLM call made by pbx-transcript-formatter after the call ends)
28
+ attr_accessor :ai_summary_cost
29
+
27
30
  # Currency for call price (default USD)
28
31
  attr_accessor :call_currency
29
32
 
@@ -42,6 +45,7 @@ module UltracartClient
42
45
  :'ai_agent_billed_minutes' => :'ai_agent_billed_minutes',
43
46
  :'ai_agent_cost' => :'ai_agent_cost',
44
47
  :'ai_agent_cost_currency' => :'ai_agent_cost_currency',
48
+ :'ai_summary_cost' => :'ai_summary_cost',
45
49
  :'call_currency' => :'call_currency',
46
50
  :'call_price' => :'call_price',
47
51
  :'call_price_estimated' => :'call_price_estimated',
@@ -60,6 +64,7 @@ module UltracartClient
60
64
  :'ai_agent_billed_minutes' => :'Float',
61
65
  :'ai_agent_cost' => :'Float',
62
66
  :'ai_agent_cost_currency' => :'String',
67
+ :'ai_summary_cost' => :'Float',
63
68
  :'call_currency' => :'String',
64
69
  :'call_price' => :'Float',
65
70
  :'call_price_estimated' => :'Boolean',
@@ -100,6 +105,10 @@ module UltracartClient
100
105
  self.ai_agent_cost_currency = attributes[:'ai_agent_cost_currency']
101
106
  end
102
107
 
108
+ if attributes.key?(:'ai_summary_cost')
109
+ self.ai_summary_cost = attributes[:'ai_summary_cost']
110
+ end
111
+
103
112
  if attributes.key?(:'call_currency')
104
113
  self.call_currency = attributes[:'call_currency']
105
114
  end
@@ -138,6 +147,7 @@ module UltracartClient
138
147
  ai_agent_billed_minutes == o.ai_agent_billed_minutes &&
139
148
  ai_agent_cost == o.ai_agent_cost &&
140
149
  ai_agent_cost_currency == o.ai_agent_cost_currency &&
150
+ ai_summary_cost == o.ai_summary_cost &&
141
151
  call_currency == o.call_currency &&
142
152
  call_price == o.call_price &&
143
153
  call_price_estimated == o.call_price_estimated &&
@@ -153,7 +163,7 @@ module UltracartClient
153
163
  # Calculates hash code according to all attributes.
154
164
  # @return [Integer] Hash code
155
165
  def hash
156
- [ai_agent_billed_minutes, ai_agent_cost, ai_agent_cost_currency, call_currency, call_price, call_price_estimated, transcription_cost].hash
166
+ [ai_agent_billed_minutes, ai_agent_cost, ai_agent_cost_currency, ai_summary_cost, call_currency, call_price, call_price_estimated, transcription_cost].hash
157
167
  end
158
168
 
159
169
  # Builds the object from hash
@@ -18,6 +18,12 @@ module UltracartClient
18
18
  # AI Agent Priority compared to human agents
19
19
  attr_accessor :ai_priority
20
20
 
21
+ # If true, AI summaries are generated for answered calls in this queue
22
+ attr_accessor :ai_summary_enabled
23
+
24
+ # Custom instructions injected into the AI summary system prompt for this queue
25
+ attr_accessor :ai_summary_instructions
26
+
21
27
  # AI timeout seconds
22
28
  attr_accessor :ai_timeout_seconds
23
29
 
@@ -122,6 +128,12 @@ module UltracartClient
122
128
  # Wrap up time in seconds
123
129
  attr_accessor :wrap_up_seconds
124
130
 
131
+ # Zoho Desk department ID to create tickets in
132
+ attr_accessor :zoho_desk_department_id
133
+
134
+ # If true, a Zoho Desk ticket is automatically created for answered calls in this queue
135
+ attr_accessor :zoho_desk_ticket_enabled
136
+
125
137
  class EnumAttributeValidator
126
138
  attr_reader :datatype
127
139
  attr_reader :allowable_values
@@ -148,6 +160,8 @@ module UltracartClient
148
160
  def self.attribute_map
149
161
  {
150
162
  :'ai_priority' => :'ai_priority',
163
+ :'ai_summary_enabled' => :'ai_summary_enabled',
164
+ :'ai_summary_instructions' => :'ai_summary_instructions',
151
165
  :'ai_timeout_seconds' => :'ai_timeout_seconds',
152
166
  :'announce_queue_position' => :'announce_queue_position',
153
167
  :'automatic_coach_agent_uuid' => :'automatic_coach_agent_uuid',
@@ -182,7 +196,9 @@ module UltracartClient
182
196
  :'voicemail' => :'voicemail',
183
197
  :'wait_critical_seconds' => :'wait_critical_seconds',
184
198
  :'wait_warning_seconds' => :'wait_warning_seconds',
185
- :'wrap_up_seconds' => :'wrap_up_seconds'
199
+ :'wrap_up_seconds' => :'wrap_up_seconds',
200
+ :'zoho_desk_department_id' => :'zoho_desk_department_id',
201
+ :'zoho_desk_ticket_enabled' => :'zoho_desk_ticket_enabled'
186
202
  }
187
203
  end
188
204
 
@@ -195,6 +211,8 @@ module UltracartClient
195
211
  def self.openapi_types
196
212
  {
197
213
  :'ai_priority' => :'String',
214
+ :'ai_summary_enabled' => :'Boolean',
215
+ :'ai_summary_instructions' => :'String',
198
216
  :'ai_timeout_seconds' => :'Integer',
199
217
  :'announce_queue_position' => :'Boolean',
200
218
  :'automatic_coach_agent_uuid' => :'String',
@@ -229,7 +247,9 @@ module UltracartClient
229
247
  :'voicemail' => :'Boolean',
230
248
  :'wait_critical_seconds' => :'Integer',
231
249
  :'wait_warning_seconds' => :'Integer',
232
- :'wrap_up_seconds' => :'Integer'
250
+ :'wrap_up_seconds' => :'Integer',
251
+ :'zoho_desk_department_id' => :'String',
252
+ :'zoho_desk_ticket_enabled' => :'Boolean'
233
253
  }
234
254
  end
235
255
 
@@ -258,6 +278,14 @@ module UltracartClient
258
278
  self.ai_priority = attributes[:'ai_priority']
259
279
  end
260
280
 
281
+ if attributes.key?(:'ai_summary_enabled')
282
+ self.ai_summary_enabled = attributes[:'ai_summary_enabled']
283
+ end
284
+
285
+ if attributes.key?(:'ai_summary_instructions')
286
+ self.ai_summary_instructions = attributes[:'ai_summary_instructions']
287
+ end
288
+
261
289
  if attributes.key?(:'ai_timeout_seconds')
262
290
  self.ai_timeout_seconds = attributes[:'ai_timeout_seconds']
263
291
  end
@@ -397,12 +425,24 @@ module UltracartClient
397
425
  if attributes.key?(:'wrap_up_seconds')
398
426
  self.wrap_up_seconds = attributes[:'wrap_up_seconds']
399
427
  end
428
+
429
+ if attributes.key?(:'zoho_desk_department_id')
430
+ self.zoho_desk_department_id = attributes[:'zoho_desk_department_id']
431
+ end
432
+
433
+ if attributes.key?(:'zoho_desk_ticket_enabled')
434
+ self.zoho_desk_ticket_enabled = attributes[:'zoho_desk_ticket_enabled']
435
+ end
400
436
  end
401
437
 
402
438
  # Show invalid properties with the reasons. Usually used together with valid?
403
439
  # @return Array for valid properties with the reasons
404
440
  def list_invalid_properties
405
441
  invalid_properties = Array.new
442
+ if !@ai_summary_instructions.nil? && @ai_summary_instructions.to_s.length > 100000
443
+ invalid_properties.push('invalid value for "ai_summary_instructions", the character length must be smaller than or equal to 100000.')
444
+ end
445
+
406
446
  if !@callback_announce_audio_uuid.nil? && @callback_announce_audio_uuid.to_s.length > 50
407
447
  invalid_properties.push('invalid value for "callback_announce_audio_uuid", the character length must be smaller than or equal to 50.')
408
448
  end
@@ -451,6 +491,10 @@ module UltracartClient
451
491
  invalid_properties.push('invalid value for "twilio_workspace_queue_sid", the character length must be smaller than or equal to 50.')
452
492
  end
453
493
 
494
+ if !@zoho_desk_department_id.nil? && @zoho_desk_department_id.to_s.length > 50
495
+ invalid_properties.push('invalid value for "zoho_desk_department_id", the character length must be smaller than or equal to 50.')
496
+ end
497
+
454
498
  invalid_properties
455
499
  end
456
500
 
@@ -459,6 +503,7 @@ module UltracartClient
459
503
  def valid?
460
504
  ai_priority_validator = EnumAttributeValidator.new('String', ["neutral", "first", "backup"])
461
505
  return false unless ai_priority_validator.valid?(@ai_priority)
506
+ return false if !@ai_summary_instructions.nil? && @ai_summary_instructions.to_s.length > 100000
462
507
  return false if !@callback_announce_audio_uuid.nil? && @callback_announce_audio_uuid.to_s.length > 50
463
508
  return false if !@callback_confirm_audio_uuid.nil? && @callback_confirm_audio_uuid.to_s.length > 50
464
509
  return false if !@conversation_voicemail_mailbox_uuid.nil? && @conversation_voicemail_mailbox_uuid.to_s.length > 50
@@ -475,6 +520,7 @@ module UltracartClient
475
520
  return false if !@say_voice.nil? && @say_voice.to_s.length > 50
476
521
  return false if !@twilio_taskrouter_workflow_sid.nil? && @twilio_taskrouter_workflow_sid.to_s.length > 100
477
522
  return false if !@twilio_workspace_queue_sid.nil? && @twilio_workspace_queue_sid.to_s.length > 50
523
+ return false if !@zoho_desk_department_id.nil? && @zoho_desk_department_id.to_s.length > 50
478
524
  true
479
525
  end
480
526
 
@@ -488,6 +534,16 @@ module UltracartClient
488
534
  @ai_priority = ai_priority
489
535
  end
490
536
 
537
+ # Custom attribute writer method with validation
538
+ # @param [Object] ai_summary_instructions Value to be assigned
539
+ def ai_summary_instructions=(ai_summary_instructions)
540
+ if !ai_summary_instructions.nil? && ai_summary_instructions.to_s.length > 100000
541
+ fail ArgumentError, 'invalid value for "ai_summary_instructions", the character length must be smaller than or equal to 100000.'
542
+ end
543
+
544
+ @ai_summary_instructions = ai_summary_instructions
545
+ end
546
+
491
547
  # Custom attribute writer method with validation
492
548
  # @param [Object] callback_announce_audio_uuid Value to be assigned
493
549
  def callback_announce_audio_uuid=(callback_announce_audio_uuid)
@@ -608,12 +664,24 @@ module UltracartClient
608
664
  @twilio_workspace_queue_sid = twilio_workspace_queue_sid
609
665
  end
610
666
 
667
+ # Custom attribute writer method with validation
668
+ # @param [Object] zoho_desk_department_id Value to be assigned
669
+ def zoho_desk_department_id=(zoho_desk_department_id)
670
+ if !zoho_desk_department_id.nil? && zoho_desk_department_id.to_s.length > 50
671
+ fail ArgumentError, 'invalid value for "zoho_desk_department_id", the character length must be smaller than or equal to 50.'
672
+ end
673
+
674
+ @zoho_desk_department_id = zoho_desk_department_id
675
+ end
676
+
611
677
  # Checks equality by comparing each attribute.
612
678
  # @param [Object] Object to be compared
613
679
  def ==(o)
614
680
  return true if self.equal?(o)
615
681
  self.class == o.class &&
616
682
  ai_priority == o.ai_priority &&
683
+ ai_summary_enabled == o.ai_summary_enabled &&
684
+ ai_summary_instructions == o.ai_summary_instructions &&
617
685
  ai_timeout_seconds == o.ai_timeout_seconds &&
618
686
  announce_queue_position == o.announce_queue_position &&
619
687
  automatic_coach_agent_uuid == o.automatic_coach_agent_uuid &&
@@ -648,7 +716,9 @@ module UltracartClient
648
716
  voicemail == o.voicemail &&
649
717
  wait_critical_seconds == o.wait_critical_seconds &&
650
718
  wait_warning_seconds == o.wait_warning_seconds &&
651
- wrap_up_seconds == o.wrap_up_seconds
719
+ wrap_up_seconds == o.wrap_up_seconds &&
720
+ zoho_desk_department_id == o.zoho_desk_department_id &&
721
+ zoho_desk_ticket_enabled == o.zoho_desk_ticket_enabled
652
722
  end
653
723
 
654
724
  # @see the `==` method
@@ -660,7 +730,7 @@ module UltracartClient
660
730
  # Calculates hash code according to all attributes.
661
731
  # @return [Integer] Hash code
662
732
  def hash
663
- [ai_priority, ai_timeout_seconds, announce_queue_position, automatic_coach_agent_uuid, callback_announce_audio_uuid, callback_announce_say, callback_confirm_audio_uuid, callback_confirm_say, callback_enabled, callback_hours_only, callback_max_attempts, callback_max_offers, callback_max_pending, callback_offer_after_seconds, callback_offer_interval_seconds, callback_retry_delay_seconds, conversation_pbx_queue_uuid, conversation_voicemail_mailbox_uuid, hold_conversation_pbx_audio_uuid, max_hold_seconds, members, merchant_id, name, no_agent_available_play_audio_uuid, no_agent_available_say, no_agent_available_say_voice, play_audio_uuid, record_call, say, say_voice, twilio_taskrouter_workflow_sid, twilio_workspace_queue_sid, voicemail, wait_critical_seconds, wait_warning_seconds, wrap_up_seconds].hash
733
+ [ai_priority, ai_summary_enabled, ai_summary_instructions, ai_timeout_seconds, announce_queue_position, automatic_coach_agent_uuid, callback_announce_audio_uuid, callback_announce_say, callback_confirm_audio_uuid, callback_confirm_say, callback_enabled, callback_hours_only, callback_max_attempts, callback_max_offers, callback_max_pending, callback_offer_after_seconds, callback_offer_interval_seconds, callback_retry_delay_seconds, conversation_pbx_queue_uuid, conversation_voicemail_mailbox_uuid, hold_conversation_pbx_audio_uuid, max_hold_seconds, members, merchant_id, name, no_agent_available_play_audio_uuid, no_agent_available_say, no_agent_available_say_voice, play_audio_uuid, record_call, say, say_voice, twilio_taskrouter_workflow_sid, twilio_workspace_queue_sid, voicemail, wait_critical_seconds, wait_warning_seconds, wrap_up_seconds, zoho_desk_department_id, zoho_desk_ticket_enabled].hash
664
734
  end
665
735
 
666
736
  # Builds the object from hash
@@ -11,5 +11,5 @@ OpenAPI Generator version: 6.0.1-SNAPSHOT
11
11
  =end
12
12
 
13
13
  module UltracartClient
14
- VERSION = '4.1.72'
14
+ VERSION = '4.1.73'
15
15
  end
data/lib/ultracart_api.rb CHANGED
@@ -219,6 +219,7 @@ require 'ultracart_api/models/conversation_pbx_call'
219
219
  require 'ultracart_api/models/conversation_pbx_call_agent'
220
220
  require 'ultracart_api/models/conversation_pbx_call_ai_cost'
221
221
  require 'ultracart_api/models/conversation_pbx_call_ai_engagement'
222
+ require 'ultracart_api/models/conversation_pbx_call_ai_summary'
222
223
  require 'ultracart_api/models/conversation_pbx_call_ai_tool_call'
223
224
  require 'ultracart_api/models/conversation_pbx_call_ai_whisper'
224
225
  require 'ultracart_api/models/conversation_pbx_call_caller'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultracart_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.72
4
+ version: 4.1.73
5
5
  platform: ruby
6
6
  authors:
7
7
  - UltraCart
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-04-11 00:00:00.000000000 Z
11
+ date: 2026-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -268,6 +268,7 @@ files:
268
268
  - docs/ConversationPbxCallAgent.md
269
269
  - docs/ConversationPbxCallAiCost.md
270
270
  - docs/ConversationPbxCallAiEngagement.md
271
+ - docs/ConversationPbxCallAiSummary.md
271
272
  - docs/ConversationPbxCallAiToolCall.md
272
273
  - docs/ConversationPbxCallAiWhisper.md
273
274
  - docs/ConversationPbxCallCaller.md
@@ -1259,6 +1260,7 @@ files:
1259
1260
  - lib/ultracart_api/models/conversation_pbx_call_agent.rb
1260
1261
  - lib/ultracart_api/models/conversation_pbx_call_ai_cost.rb
1261
1262
  - lib/ultracart_api/models/conversation_pbx_call_ai_engagement.rb
1263
+ - lib/ultracart_api/models/conversation_pbx_call_ai_summary.rb
1262
1264
  - lib/ultracart_api/models/conversation_pbx_call_ai_tool_call.rb
1263
1265
  - lib/ultracart_api/models/conversation_pbx_call_ai_whisper.rb
1264
1266
  - lib/ultracart_api/models/conversation_pbx_call_caller.rb