ultracart_api 4.1.71 → 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.
@@ -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