1use serde::{Deserialize, Serialize};
12
13use crate::models;
14
15#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16pub struct Assistant {
17 #[serde(rename = "transcriber", skip_serializing_if = "Option::is_none")]
18 pub transcriber: Option<models::CreateAssistantDtoTranscriber>,
19 #[serde(rename = "model", skip_serializing_if = "Option::is_none")]
20 pub model: Option<models::CreateAssistantDtoModel>,
21 #[serde(rename = "voice", skip_serializing_if = "Option::is_none")]
22 pub voice: Option<models::CreateAssistantDtoVoice>,
23 #[serde(rename = "firstMessage", skip_serializing_if = "Option::is_none")]
25 pub first_message: Option<String>,
26 #[serde(rename = "firstMessageMode", skip_serializing_if = "Option::is_none")]
28 pub first_message_mode: Option<FirstMessageMode>,
29 #[serde(rename = "voicemailDetection", skip_serializing_if = "Option::is_none")]
31 pub voicemail_detection: Option<serde_json::Value>,
32 #[serde(rename = "clientMessages", skip_serializing_if = "Option::is_none")]
34 pub client_messages: Option<Vec<ClientMessages>>,
35 #[serde(rename = "serverMessages", skip_serializing_if = "Option::is_none")]
37 pub server_messages: Option<Vec<ServerMessages>>,
38 #[serde(
40 rename = "silenceTimeoutSeconds",
41 skip_serializing_if = "Option::is_none"
42 )]
43 pub silence_timeout_seconds: Option<f64>,
44 #[serde(rename = "maxDurationSeconds", skip_serializing_if = "Option::is_none")]
46 pub max_duration_seconds: Option<f64>,
47 #[serde(rename = "backgroundSound", skip_serializing_if = "Option::is_none")]
49 pub background_sound: Option<BackgroundSound>,
50 #[serde(
52 rename = "backgroundDenoisingEnabled",
53 skip_serializing_if = "Option::is_none"
54 )]
55 pub background_denoising_enabled: Option<bool>,
56 #[serde(
58 rename = "modelOutputInMessagesEnabled",
59 skip_serializing_if = "Option::is_none"
60 )]
61 pub model_output_in_messages_enabled: Option<bool>,
62 #[serde(
64 rename = "transportConfigurations",
65 skip_serializing_if = "Option::is_none"
66 )]
67 pub transport_configurations:
68 Option<Vec<models::CreateAssistantDtoTransportConfigurationsInner>>,
69 #[serde(rename = "credentials", skip_serializing_if = "Option::is_none")]
71 pub credentials: Option<Vec<models::CreateAssistantDtoCredentialsInner>>,
72 #[serde(rename = "name", skip_serializing_if = "Option::is_none")]
74 pub name: Option<String>,
75 #[serde(rename = "voicemailMessage", skip_serializing_if = "Option::is_none")]
77 pub voicemail_message: Option<String>,
78 #[serde(rename = "endCallMessage", skip_serializing_if = "Option::is_none")]
80 pub end_call_message: Option<String>,
81 #[serde(rename = "endCallPhrases", skip_serializing_if = "Option::is_none")]
83 pub end_call_phrases: Option<Vec<String>>,
84 #[serde(rename = "compliancePlan", skip_serializing_if = "Option::is_none")]
85 pub compliance_plan: Option<models::CompliancePlan>,
86 #[serde(rename = "metadata", skip_serializing_if = "Option::is_none")]
88 pub metadata: Option<serde_json::Value>,
89 #[serde(rename = "analysisPlan", skip_serializing_if = "Option::is_none")]
91 pub analysis_plan: Option<models::AnalysisPlan>,
92 #[serde(rename = "artifactPlan", skip_serializing_if = "Option::is_none")]
94 pub artifact_plan: Option<models::ArtifactPlan>,
95 #[serde(rename = "messagePlan", skip_serializing_if = "Option::is_none")]
97 pub message_plan: Option<models::MessagePlan>,
98 #[serde(rename = "startSpeakingPlan", skip_serializing_if = "Option::is_none")]
100 pub start_speaking_plan: Option<models::StartSpeakingPlan>,
101 #[serde(rename = "stopSpeakingPlan", skip_serializing_if = "Option::is_none")]
103 pub stop_speaking_plan: Option<models::StopSpeakingPlan>,
104 #[serde(rename = "monitorPlan", skip_serializing_if = "Option::is_none")]
106 pub monitor_plan: Option<models::MonitorPlan>,
107 #[serde(rename = "credentialIds", skip_serializing_if = "Option::is_none")]
109 pub credential_ids: Option<Vec<String>>,
110 #[serde(rename = "server", skip_serializing_if = "Option::is_none")]
112 pub server: Option<models::Server>,
113 #[serde(rename = "hooks", skip_serializing_if = "Option::is_none")]
115 pub hooks: Option<Vec<models::AssistantHooks>>,
116 #[serde(rename = "keypadInputPlan", skip_serializing_if = "Option::is_none")]
117 pub keypad_input_plan: Option<models::KeypadInputPlan>,
118 #[serde(rename = "id")]
120 pub id: String,
121 #[serde(rename = "orgId")]
123 pub org_id: String,
124 #[serde(rename = "createdAt")]
126 pub created_at: String,
127 #[serde(rename = "updatedAt")]
129 pub updated_at: String,
130}
131
132impl Assistant {
133 pub fn new(id: String, org_id: String, created_at: String, updated_at: String) -> Assistant {
134 Assistant {
135 transcriber: None,
136 model: None,
137 voice: None,
138 first_message: None,
139 first_message_mode: None,
140 voicemail_detection: None,
141 client_messages: None,
142 server_messages: None,
143 silence_timeout_seconds: None,
144 max_duration_seconds: None,
145 background_sound: None,
146 background_denoising_enabled: None,
147 model_output_in_messages_enabled: None,
148 transport_configurations: None,
149 credentials: None,
150 name: None,
151 voicemail_message: None,
152 end_call_message: None,
153 end_call_phrases: None,
154 compliance_plan: None,
155 metadata: None,
156 analysis_plan: None,
157 artifact_plan: None,
158 message_plan: None,
159 start_speaking_plan: None,
160 stop_speaking_plan: None,
161 monitor_plan: None,
162 credential_ids: None,
163 server: None,
164 hooks: None,
165 keypad_input_plan: None,
166 id,
167 org_id,
168 created_at,
169 updated_at,
170 }
171 }
172}
173#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
175pub enum FirstMessageMode {
176 #[serde(rename = "assistant-speaks-first")]
177 AssistantSpeaksFirst,
178 #[serde(rename = "assistant-speaks-first-with-model-generated-message")]
179 AssistantSpeaksFirstWithModelGeneratedMessage,
180 #[serde(rename = "assistant-waits-for-user")]
181 AssistantWaitsForUser,
182}
183
184impl Default for FirstMessageMode {
185 fn default() -> FirstMessageMode {
186 Self::AssistantSpeaksFirst
187 }
188}
189#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
191pub enum ClientMessages {
192 #[serde(rename = "conversation-update")]
193 ConversationUpdate,
194 #[serde(rename = "function-call")]
195 FunctionCall,
196 #[serde(rename = "function-call-result")]
197 FunctionCallResult,
198 #[serde(rename = "hang")]
199 Hang,
200 #[serde(rename = "language-changed")]
201 LanguageChanged,
202 #[serde(rename = "metadata")]
203 Metadata,
204 #[serde(rename = "model-output")]
205 ModelOutput,
206 #[serde(rename = "speech-update")]
207 SpeechUpdate,
208 #[serde(rename = "status-update")]
209 StatusUpdate,
210 #[serde(rename = "transcript")]
211 Transcript,
212 #[serde(rename = "tool-calls")]
213 ToolCalls,
214 #[serde(rename = "tool-calls-result")]
215 ToolCallsResult,
216 #[serde(rename = "transfer-update")]
217 TransferUpdate,
218 #[serde(rename = "user-interrupted")]
219 UserInterrupted,
220 #[serde(rename = "voice-input")]
221 VoiceInput,
222}
223
224impl Default for ClientMessages {
225 fn default() -> ClientMessages {
226 Self::ConversationUpdate
227 }
228}
229#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
231pub enum ServerMessages {
232 #[serde(rename = "conversation-update")]
233 ConversationUpdate,
234 #[serde(rename = "end-of-call-report")]
235 EndOfCallReport,
236 #[serde(rename = "function-call")]
237 FunctionCall,
238 #[serde(rename = "hang")]
239 Hang,
240 #[serde(rename = "language-changed")]
241 LanguageChanged,
242 #[serde(rename = "language-change-detected")]
243 LanguageChangeDetected,
244 #[serde(rename = "model-output")]
245 ModelOutput,
246 #[serde(rename = "phone-call-control")]
247 PhoneCallControl,
248 #[serde(rename = "speech-update")]
249 SpeechUpdate,
250 #[serde(rename = "status-update")]
251 StatusUpdate,
252 #[serde(rename = "transcript")]
253 Transcript,
254 #[serde(rename = "transcript[transcriptType=\"final\"]")]
255 TranscriptLeftSquareBracketTranscriptTypeEqualDoubleQuoteFinalDoubleQuoteRightSquareBracket,
256 #[serde(rename = "tool-calls")]
257 ToolCalls,
258 #[serde(rename = "transfer-destination-request")]
259 TransferDestinationRequest,
260 #[serde(rename = "transfer-update")]
261 TransferUpdate,
262 #[serde(rename = "user-interrupted")]
263 UserInterrupted,
264 #[serde(rename = "voice-input")]
265 VoiceInput,
266}
267
268impl Default for ServerMessages {
269 fn default() -> ServerMessages {
270 Self::ConversationUpdate
271 }
272}
273#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
275pub enum BackgroundSound {
276 #[serde(rename = "off")]
277 Off,
278 #[serde(rename = "office")]
279 Office,
280}
281
282impl Default for BackgroundSound {
283 fn default() -> BackgroundSound {
284 Self::Off
285 }
286}