import {z} from 'zod' export type CreateApiV1ConvaiConversationsConversationIdAnalysisRunArgs = {conversation_id: string, 'xi-api-key'?: (string | null) | undefined}; export type CreateApiV1ConvaiConversationsConversationIdAnalysisRunOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const conversationDeletionSettings = z.object({deletion_time_unix_secs: z.number().int().nullable().optional(), deleted_logs_at_time_unix_secs: z.number().int().nullable().optional(), deleted_audio_at_time_unix_secs: z.number().int().nullable().optional(), deleted_transcript_at_time_unix_secs: z.number().int().nullable().optional(), delete_transcript_and_pii: z.boolean().optional(), delete_audio: z.boolean().optional()}); export const conversationFeedbackType = z.enum(["thumbs", "rating"]); export const userFeedbackScore = z.enum(["like", "dislike"]); export const conversationHistoryFeedbackCommonModel = z.object({type: conversationFeedbackType.nullable().optional(), overall_score: userFeedbackScore.nullable().optional(), likes: z.number().int().optional(), dislikes: z.number().int().optional(), rating: z.number().int().nullable().optional(), comment: z.string().nullable().optional()}); export const authorizationMethod = z.enum(["invalid", "public", "authorization_header", "signed_url", "shareable_link", "livekit_token", "livekit_token_website", "genesys_api_key", "avaya_api_key", "audiocodes_api_key", "whatsapp", "sms"]); export const lLMTokensCategoryUsage = z.object({tokens: z.number().int().optional(), price: z.number().optional()}); export const lLMInputOutputTokensUsage = z.object({input: lLMTokensCategoryUsage.optional(), input_cache_read: lLMTokensCategoryUsage.optional(), input_cache_write: lLMTokensCategoryUsage.optional(), output_total: lLMTokensCategoryUsage.optional()}); export const lLMUsageOutput = z.object({model_usage: z.record(z.string(), lLMInputOutputTokensUsage).optional()}); export const lLMCategoryUsage = z.object({irreversible_generation: lLMUsageOutput.optional(), initiated_generation: lLMUsageOutput.optional()}); export const platformCategoryUsage = z.object({credits: z.number().int().optional(), price: z.number().optional(), quantity: z.number().optional()}); export const platformUsage = z.object({category_usage: z.record(z.string(), platformCategoryUsage).optional()}); export const conversationVoiceUsageModel = z.object({voice_id: z.string(), audio_output_seconds: z.number().optional()}); export const conversationTTSUsageModel = z.object({primary_tts_model: z.string().nullable().optional(), total_audio_output_seconds: z.number().optional(), total_characters: z.number().int().optional(), per_voice_usage: z.array(conversationVoiceUsageModel).optional()}); export const conversationASRUsageModel = z.object({asr_model: z.string().nullable().optional(), total_transcription_calls: z.number().int().optional(), total_audio_input_seconds: z.number().optional()}); export const analysisRunningTotal = z.object({price: z.number().optional(), charge: z.number().int().optional(), runs: z.number().int().optional(), price_per_feature: z.record(z.string(), z.number()).optional(), charge_per_feature: z.record(z.string(), z.number().int()).optional()}); export const analysisRunSnapshot = z.object({price: z.number().optional(), charge: z.number().int().optional(), price_per_feature: z.record(z.string(), z.number()).optional(), charge_per_feature: z.record(z.string(), z.number().int()).optional()}); export const analysisCharging = z.object({total: analysisRunningTotal, last_run: analysisRunSnapshot}); export const conversationChargingCommonModel = z.object({dev_discount: z.boolean().optional(), is_burst: z.boolean().optional(), tier: z.string().nullable().optional(), llm_usage: lLMCategoryUsage.optional(), llm_price: z.number().nullable().optional(), llm_charge: z.number().int().nullable().optional(), call_charge: z.number().int().nullable().optional(), platform_charge: z.number().int().nullable().optional(), platform_usage: platformUsage.optional(), platform_price: z.number().nullable().optional(), free_minutes_consumed: z.number().optional(), free_llm_dollars_consumed: z.number().optional(), tts_usage: conversationTTSUsageModel.nullable().optional(), asr_usage: conversationASRUsageModel.nullable().optional(), analysis: analysisCharging.nullable().optional(), voice_surcharge_charge: z.number().int().nullable().optional()}); export const telephonyDirection = z.enum(["inbound", "outbound"]); export const callResult = z.enum(["answered", "voicemail", "busy", "no_answer", "failed"]); export const conversationHistoryTwilioPhoneCallModel = z.object({direction: telephonyDirection, phone_number_id: z.string(), agent_number: z.string(), external_number: z.string(), call_result: callResult.nullable().optional(), type: z.literal("twilio"), stream_sid: z.string(), call_sid: z.string()}); export const conversationHistoryExotelPhoneCallModel = z.object({direction: telephonyDirection, phone_number_id: z.string(), agent_number: z.string(), external_number: z.string(), call_result: callResult.nullable().optional(), type: z.literal("exotel").optional(), stream_sid: z.string(), call_sid: z.string()}); export const conversationHistorySIPTrunkingPhoneCallModel = z.object({direction: telephonyDirection, phone_number_id: z.string(), agent_number: z.string(), external_number: z.string(), call_result: callResult.nullable().optional(), type: z.literal("sip_trunking"), call_id: z.string().nullable().optional(), call_sid: z.string(), sip_header_dynamic_variables: z.record(z.string(), z.string()).optional()}); export const campaignConversationType = z.enum(["initial", "retry", "callback", "redirect"]); export const batchCallingCampaignInformation = z.object({campaign_id: z.string(), campaign_lead_id: z.string(), cold_attempt: z.number().int().nullable().optional(), conversation_type: campaignConversationType.nullable().optional()}); export const conversationHistoryBatchCallModel = z.object({batch_call_id: z.string(), batch_call_recipient_id: z.string(), campaign: batchCallingCampaignInformation.nullable().optional()}); export const conversationHistoryErrorCommonModel = z.object({code: z.number().int(), reason: z.string().nullable().optional()}); export const conversationHistoryRagUsageCommonModel = z.object({usage_count: z.number().int(), embedding_model: z.string()}); export const featureStatusCommonModel = z.object({enabled: z.boolean().optional(), used: z.boolean().optional()}); export const workflowFeaturesUsageCommonModel = z.object({enabled: z.boolean().optional(), tool_node: featureStatusCommonModel.optional(), standalone_agent_node: featureStatusCommonModel.optional(), phone_number_node: featureStatusCommonModel.optional(), end_node: featureStatusCommonModel.optional(), override_agent_node: featureStatusCommonModel.optional()}); export const testsFeatureUsageCommonModel = z.object({enabled: z.boolean().optional(), tests_ran_after_last_modification: z.boolean().optional(), tests_ran_in_last_7_days: z.boolean().optional()}); export const featuresUsageCommonModel = z.object({language_detection: featureStatusCommonModel.optional(), transfer_to_agent: featureStatusCommonModel.optional(), transfer_to_number: featureStatusCommonModel.optional(), multivoice: featureStatusCommonModel.optional(), dtmf_tones: featureStatusCommonModel.optional(), external_mcp_servers: featureStatusCommonModel.optional(), pii_zrm_workspace: z.boolean().optional(), pii_zrm_agent: z.boolean().optional(), tool_dynamic_variable_updates: featureStatusCommonModel.optional(), is_livekit: z.boolean().optional(), voicemail_detection: featureStatusCommonModel.optional(), dtmf_input: featureStatusCommonModel.optional(), workflow: workflowFeaturesUsageCommonModel.optional(), agent_testing: testsFeatureUsageCommonModel.optional(), versioning: featureStatusCommonModel.optional(), file_input: featureStatusCommonModel.optional(), freeform_procedure: featureStatusCommonModel.optional(), structured_procedure: featureStatusCommonModel.optional()}); export const conversationHistoryElevenAssistantCommonModel = z.object({is_eleven_assistant: z.boolean().optional()}); export const conversationInitiationSource = z.enum(["unknown", "android_sdk", "node_js_sdk", "react_native_sdk", "react_sdk", "js_sdk", "python_sdk", "widget", "sip_trunk", "twilio", "exotel", "genesys", "avaya", "audiocodes", "swift_sdk", "whatsapp", "twilio_sms", "flutter_sdk", "zendesk_integration", "slack_integration", "telegram_integration", "intercom_integration", "freshdesk_integration", "salesforce_integration", "template_preview", "genesys_bot_connector", "subagent_tool"]); export const plainPlatformMetadata = z.object({conversation_initiation_source: z.literal("plain_integration").optional(), thread_id: z.string(), workspace_id: z.string()}); export const zendeskPlatformMetadata = z.object({conversation_initiation_source: z.literal("zendesk_integration").optional(), ticket_id: z.string()}); export const asyncConversationMetadata = z.object({delivery_status: z.enum(["pending", "success", "failed"]), delivery_timestamp: z.number().int(), delivery_error: z.string().nullable().optional(), external_system: z.string(), external_id: z.string(), external_link: z.string().nullable().optional(), retry_count: z.number().int().optional(), last_retry_timestamp: z.number().int().nullable().optional(), last_processed_external_message_id: z.string().nullable().optional(), integration_trigger_id: z.string().nullable().optional(), platform_metadata: z.union([plainPlatformMetadata, zendeskPlatformMetadata]).nullable().optional()}); export const whatsAppRecipient = z.object({phone: z.string().nullable().optional(), bsuid: z.string().nullable().optional()}); export const whatsAppCallPermissionRequestState = z.enum(["blocked", "sent", "accepted", "declined"]); export const whatsAppCallPermissionRequest = z.object({state: whatsAppCallPermissionRequestState, requested_at_unix: z.number().int().nullable().optional(), responded_at_unix: z.number().int().nullable().optional(), permanent: z.boolean().nullable().optional(), granted_by_user_call: z.boolean().nullable().optional()}); export const whatsAppOpeningMessage = z.object({template_name: z.string(), wamid: z.string().nullable().optional(), sent_at_unix: z.number().int(), delivered_at_unix: z.number().int().nullable().optional(), read_at_unix: z.number().int().nullable().optional(), replied_at_unix: z.number().int().nullable().optional(), failed_at_unix: z.number().int().nullable().optional(), error_code: z.string().nullable().optional(), pricing_category: z.string().nullable().optional(), billable: z.boolean().nullable().optional()}); export const whatsAppConversationInfo = z.object({direction: z.enum(["inbound", "outbound", "unknown"]).optional(), whatsapp_phone_number_id: z.string().nullable().optional(), whatsapp_user_id: z.string(), awaiting_first_user_message: z.boolean().nullable().optional(), recipient: whatsAppRecipient.nullable().optional(), call_permission_request: whatsAppCallPermissionRequest.nullable().optional(), call_result: callResult.nullable().optional(), opening_message: whatsAppOpeningMessage.nullable().optional()}); export const sMSConversationInfo = z.object({direction: z.enum(["inbound", "outbound"]), phone_number_id: z.string().nullable().optional(), sms_user_phone_number: z.string(), agent_phone_number: z.string().nullable().optional()}); export const agentDefinitionSource = z.enum(["cli", "ui", "api", "template", "architect", "mcp", "unknown"]); export const conversationVoiceRewardModel = z.object({voice_id: z.string(), reward_usd_cents: z.number()}); export const conversationHistoryMetadataCommonModel = z.object({start_time_unix_secs: z.number().int(), accepted_time_unix_secs: z.number().int().nullable().optional(), call_duration_secs: z.number().int(), queue_wait_secs: z.number().nullable().optional(), cost: z.number().int().nullable().optional(), deletion_settings: conversationDeletionSettings.optional(), feedback: conversationHistoryFeedbackCommonModel.optional(), authorization_method: authorizationMethod.optional(), charging: conversationChargingCommonModel.optional(), phone_call: z.union([conversationHistoryTwilioPhoneCallModel, conversationHistoryExotelPhoneCallModel, conversationHistorySIPTrunkingPhoneCallModel]).nullable().optional(), batch_call: conversationHistoryBatchCallModel.nullable().optional(), termination_reason: z.string().optional(), error: conversationHistoryErrorCommonModel.nullable().optional(), warnings: z.array(z.string()).optional(), main_language: z.string().nullable().optional(), rag_usage: conversationHistoryRagUsageCommonModel.nullable().optional(), text_only: z.boolean().optional(), features_usage: featuresUsageCommonModel.optional(), eleven_assistant: conversationHistoryElevenAssistantCommonModel.optional(), initiator_id: z.string().nullable().optional(), conversation_initiation_source: conversationInitiationSource.optional(), conversation_initiation_source_version: z.string().max(50).nullable().optional(), timezone: z.string().nullable().optional(), async_metadata: asyncConversationMetadata.nullable().optional(), whatsapp: whatsAppConversationInfo.nullable().optional(), sms: sMSConversationInfo.nullable().optional(), agent_created_from: agentDefinitionSource.optional(), agent_last_updated_from: agentDefinitionSource.optional(), voice_rewards: z.array(conversationVoiceRewardModel).optional(), cost_fiat: z.number().nullable()}); export const evaluationSuccessResult = z.enum(["success", "failure", "unknown"]); export const criteriaScoringMode = z.enum(["binary", "numeric_uniform"]); export const conversationHistoryEvaluationCriteriaResultCommonModel = z.object({criteria_id: z.string(), result: evaluationSuccessResult, rationale: z.string(), scoring_mode: criteriaScoringMode.nullable().optional(), score: z.number().int().nullable().optional(), max_score: z.number().int().nullable().optional()}); export const allowedValues = z.object({dynamic_variable: z.string().min(1)}); export const literalJsonSchemaProperty = z.object({type: z.union([z.enum(["boolean", "string", "integer", "number"]), z.array(z.string())]), description: z.string().optional(), enum: z.array(z.string()).nullable().optional(), is_system_provided: z.boolean().optional(), dynamic_variable: z.string().optional(), allowed_values: allowedValues.nullable().optional(), allowed_values_dynamic_variable: z.string().optional(), constant_value: z.union([z.string(), z.number().int(), z.number(), z.boolean()]).nullable().optional(), is_omitted: z.boolean().optional()}); export const dataCollectionResultCommonModel = z.object({data_collection_id: z.string(), name: z.string().nullable().optional(), value: z.unknown(), json_schema: literalJsonSchemaProperty.nullable().optional(), rationale: z.string()}); export const analysisScope = z.enum(["conversation", "agent"]); export const scopedAnalysisResult = z.object({scope: analysisScope, source_agent_id: z.string(), source_branch_id: z.string().nullable().optional(), evaluation_criteria_results: z.record(z.string(), conversationHistoryEvaluationCriteriaResultCommonModel).optional(), data_collection_results: z.record(z.string(), dataCollectionResultCommonModel).optional(), successful: evaluationSuccessResult, success_score: z.number().nullable().optional()}); export const conversationHistoryAnalysisCommonModel = z.object({evaluation_criteria_results: z.record(z.string(), conversationHistoryEvaluationCriteriaResultCommonModel).optional(), data_collection_results: z.record(z.string(), dataCollectionResultCommonModel).optional(), evaluation_criteria_results_list: z.array(conversationHistoryEvaluationCriteriaResultCommonModel).optional(), data_collection_results_list: z.array(dataCollectionResultCommonModel).optional(), call_successful: evaluationSuccessResult, call_success_score: z.number().nullable().optional(), transcript_summary: z.string(), call_summary_title: z.string().nullable().optional(), scoped: z.array(scopedAnalysisResult).optional()}); export const visitedAgentRef = z.object({agent_id: z.string(), branch_id: z.string().nullable().optional()}); export const aSRConversationalConfigOverride = z.object({keywords: z.array(z.string()).nullable().optional()}); export const softTimeoutConfigOverride = z.object({message: z.string().nullable().optional(), additional_soft_timeout_messages: z.array(z.string()).nullable().optional()}); export const turnConfigOverride = z.object({soft_timeout_config: softTimeoutConfigOverride.nullable().optional(), noisy_environment_message: z.string().nullable().optional()}); export const tTSModelFamily = z.enum(["turbo", "flash", "multilingual", "v3_conversational", "v4", "v4_turbo"]); export const tTSOptimizeStreamingLatency = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const supportedVoice = z.object({label: z.string().min(1), voice_id: z.string().min(1), description: z.string().nullable().optional(), language: z.string().nullable().optional(), model_family: tTSModelFamily.nullable().optional(), optimize_streaming_latency: tTSOptimizeStreamingLatency.nullable().optional(), stability: z.number().gte(0).lte(1).nullable().optional(), speed: z.number().gte(0.7).lte(1.2).nullable().optional(), similarity_boost: z.number().gte(0).lte(1).nullable().optional(), clone_strength: z.number().gte(0).lte(1).nullable().optional()}); export const pydanticPronunciationDictionaryVersionLocator = z.object({pronunciation_dictionary_id: z.string(), version_id: z.string().nullable()}); export const tTSConversationalConfigOverride = z.object({model_id: z.enum(["eleven_turbo_v2", "eleven_turbo_v2_5", "eleven_flash_v2", "eleven_flash_v2_5", "eleven_multilingual_v2", "eleven_v3_conversational", "eleven_v4", "eleven_v4_turbo"]).nullable().optional(), voice_id: z.string().nullable().optional(), supported_voices: z.array(supportedVoice).nullable().optional(), stability: z.number().nullable().optional(), speed: z.number().nullable().optional(), similarity_boost: z.number().nullable().optional(), clone_strength: z.number().nullable().optional(), pronunciation_dictionary_locators: z.array(pydanticPronunciationDictionaryVersionLocator).nullable().optional()}); export const conversationConfigOverride = z.object({text_only: z.boolean().nullable().optional(), max_duration_seconds: z.number().int().nullable().optional()}); export const knowledgeBaseDocumentType = z.enum(["file", "url", "text", "folder"]); export const documentUsageModeEnum = z.enum(["prompt", "auto"]); export const knowledgeBaseLocator = z.object({type: knowledgeBaseDocumentType, name: z.string(), id: z.string(), usage_mode: documentUsageModeEnum.optional()}); export const promptAgentAPIModelOverrideOutput = z.object({prompt: z.string().nullable().optional(), llm: z.enum(["gpt-4o-mini", "gpt-4o", "gpt-4", "gpt-4-turbo", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-5", "gpt-5.1", "gpt-5.2", "gpt-5.2-chat-latest", "gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano", "gpt-5.5", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-6-astra", "gpt-6-sol", "gpt-6-luna", "gpt-6.1-sol", "gpt-6.1-terra", "gpt-5-mini", "gpt-5-nano", "gpt-3.5-turbo", "gemini-1.5-pro", "gemini-1.5-flash", "gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3-pro-preview", "gemini-3-flash-preview", "gemini-3.1-pro-preview", "gemini-3.1-flash-lite-preview", "gemini-3.1-flash-lite", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", "gemini-3.7-flash", "gemini-3.8-flash", "gemini-4-argon", "claude-sonnet-4-5", "claude-opus-4-6", "claude-opus-4-7", "claude-opus-4-8", "claude-opus-5", "claude-opus-5-5", "claude-sonnet-4-6", "claude-sonnet-5", "claude-sonnet-5-5", "claude-sonnet-4", "claude-haiku-4-5", "claude-haiku-5-5", "claude-3-7-sonnet", "claude-3-5-sonnet", "claude-3-5-sonnet-v1", "claude-3-haiku", "grok-beta", "custom-llm", "qwen3-4b", "qwen3-30b-a3b", "qwen36-35b-a3b", "qwen35-397b-a17b", "gpt-oss-20b", "gpt-oss-120b", "glm-45-air-fp8", "glm-52", "deepseek-v41-flash", "nemotron-35-super-vl-nvfp4", "gemini-2.5-flash-preview-09-2025", "gemini-2.5-flash-lite-preview-09-2025", "gemini-2.5-flash-preview-05-20", "gemini-2.5-flash-preview-04-17", "gemini-2.5-flash-lite-preview-06-17", "gemini-2.0-flash-lite-001", "gemini-2.0-flash-001", "gemini-1.5-flash-002", "gemini-1.5-flash-001", "gemini-1.5-pro-002", "gemini-1.5-pro-001", "claude-sonnet-4@20250514", "claude-sonnet-4-5@20250929", "claude-haiku-4-5@20251001", "claude-3-7-sonnet@20250219", "claude-3-5-sonnet@20240620", "claude-3-5-sonnet-v2@20241022", "claude-3-haiku@20240307", "gpt-5-2025-08-07", "gpt-5.1-2025-11-13", "gpt-5.2-2025-12-11", "gpt-5.4-2026-03-05", "gpt-5.4-mini-2026-03-17", "gpt-5.4-nano-2026-03-17", "gpt-5.5-2026-04-23", "gpt-5-mini-2025-08-07", "gpt-5-nano-2025-08-07", "gpt-4.1-2025-04-14", "gpt-4.1-mini-2025-04-14", "gpt-4.1-nano-2025-04-14", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-11-20", "gpt-4o-2024-08-06", "gpt-4o-2024-05-13", "gpt-4-0613", "gpt-4-0314", "gpt-4-turbo-2024-04-09", "gpt-3.5-turbo-0125", "gpt-3.5-turbo-1106", "watt-tool-8b", "watt-tool-70b"]).nullable().optional(), reasoning_effort: z.enum(["none", "minimal", "low", "medium", "high", "xhigh", "max"]).nullable().optional(), tool_ids: z.array(z.string()).nullable().optional(), tool_ids_strict: z.boolean().nullable().optional(), native_mcp_server_ids: z.array(z.string()).nullable().optional(), knowledge_base: z.array(knowledgeBaseLocator).nullable().optional()}); export const agentConfigOverrideOutput = z.object({first_message: z.string().nullable().optional(), language: z.string().nullable().optional(), max_conversation_duration_message: z.string().nullable().optional(), prompt: promptAgentAPIModelOverrideOutput.nullable().optional()}); export const conversationConfigClientOverrideOutput = z.object({asr: aSRConversationalConfigOverride.nullable().optional(), turn: turnConfigOverride.nullable().optional(), tts: tTSConversationalConfigOverride.nullable().optional(), conversation: conversationConfigOverride.nullable().optional(), agent: agentConfigOverrideOutput.nullable().optional()}); export const conversationInitiationSourceInfo = z.object({source: conversationInitiationSource.nullable().optional(), version: z.string().max(50).nullable().optional()}); export const conversationInitiationClientDataRequestOutput = z.object({conversation_config_override: conversationConfigClientOverrideOutput.optional(), custom_llm_extra_body: z.record(z.string(), z.unknown()).optional(), user_id: z.string().nullable().optional(), source_info: conversationInitiationSourceInfo.optional(), branch_id: z.string().nullable().optional(), environment: z.string().nullable().optional(), starting_workflow_node_id: z.string().nullable().optional(), procedure_ids: z.array(z.string()).nullable().optional(), start_procedure_ids: z.array(z.string()).nullable().optional(), dynamic_variables: z.record(z.string(), z.unknown()).optional()}); export const agentMetadata = z.object({agent_id: z.string(), branch_id: z.string().nullable().optional(), workflow_node_id: z.string().nullable().optional(), version_id: z.string().nullable().optional()}); export const conversationHistoryMultivoiceMessagePartModel = z.object({text: z.string(), voice_label: z.string().nullable(), time_in_call_secs: z.number().int().nullable()}); export const conversationHistoryMultivoiceMessageModel = z.object({parts: z.array(conversationHistoryMultivoiceMessagePartModel)}); export const toolType = z.enum(["system", "webhook", "client", "mcp", "workflow", "api_integration_webhook", "smb"]); export const conversationHistoryTranscriptToolCallWebhookDetails = z.object({type: z.literal("webhook").optional(), method: z.string(), url: z.string(), headers: z.record(z.string(), z.string()).optional(), path_params: z.record(z.string(), z.string()).optional(), query_params: z.record(z.string(), z.string()).optional(), body: z.string().nullable().optional()}); export const conversationHistoryTranscriptToolCallClientDetails = z.object({type: z.literal("client").optional(), parameters: z.string()}); export const conversationHistoryTranscriptToolCallMCPDetails = z.object({type: z.literal("mcp").optional(), mcp_server_id: z.string(), mcp_server_name: z.string(), integration_type: z.string(), parameters: z.record(z.string(), z.string()).optional(), approval_policy: z.string(), requires_approval: z.boolean().optional(), mcp_tool_name: z.string().optional(), mcp_tool_description: z.string().optional()}); export const conversationHistoryTranscriptToolCallApiIntegrationWebhookDetailsOutput = z.object({type: z.literal("api_integration_webhook"), integration_id: z.string(), credential_id: z.string(), integration_connection_id: z.string(), webhook_details: conversationHistoryTranscriptToolCallWebhookDetails}); export const conversationHistoryTranscriptToolCallCommonModelOutput = z.object({type: toolType.nullable().optional(), request_id: z.string(), tool_name: z.string(), tool_id: z.string().nullable().optional(), params_as_json: z.string(), tool_has_been_called: z.boolean(), tool_details: z.union([conversationHistoryTranscriptToolCallWebhookDetails, conversationHistoryTranscriptToolCallClientDetails, conversationHistoryTranscriptToolCallMCPDetails, conversationHistoryTranscriptToolCallApiIntegrationWebhookDetailsOutput]).nullable().optional()}); export const dynamicVariableUpdateCommonModel = z.object({variable_name: z.string(), old_value: z.string().nullable(), new_value: z.string(), updated_at: z.number(), tool_name: z.string(), tool_request_id: z.string()}); export const conversationHistoryTranscriptOtherToolsResultCommonModel = z.object({request_id: z.string(), tool_name: z.string(), tool_id: z.string().nullable().optional(), result_value: z.string(), is_error: z.boolean(), is_blocked: z.boolean().optional(), tool_has_been_called: z.boolean(), tool_latency_secs: z.number().optional(), error_type: z.string().optional(), raw_error_message: z.string().optional(), dynamic_variable_updates: z.array(dynamicVariableUpdateCommonModel).optional(), type: z.enum(["client", "webhook", "mcp", "code"]).nullable().optional()}); export const endCallToolResultModel = z.object({result_type: z.literal("end_call_success").optional(), status: z.literal("success").optional(), reason: z.string().nullable().optional(), message: z.string().nullable().optional()}); export const languageDetectionToolResultModel = z.object({result_type: z.literal("language_detection_success").optional(), status: z.literal("success").optional(), reason: z.string().nullable().optional(), language: z.string().nullable().optional()}); export const transferBranchInfoConfigured = z.object({branch_reason: z.literal("configured"), branch_id: z.string()}); export const transferBranchInfoTrafficSplit = z.object({branch_reason: z.literal("traffic_split"), branch_id: z.string(), traffic_percentage: z.number()}); export const transferBranchInfoDefaultingToMain = z.object({branch_reason: z.literal("defaulting_to_main"), branch_id: z.string()}); export const transferToAgentToolResultSuccessModelOutput = z.object({result_type: z.literal("transfer_to_agent_success").optional(), status: z.literal("success").optional(), from_agent: z.string(), to_agent: z.string(), to_node: z.string().nullable().optional(), condition: z.string(), delay_ms: z.number().int().optional(), transfer_message: z.string().nullable().optional(), enable_transferred_agent_first_message: z.boolean().optional(), branch_info: z.union([transferBranchInfoConfigured, transferBranchInfoTrafficSplit, transferBranchInfoDefaultingToMain]).nullable().optional(), preserve_client_tts_overrides: z.boolean().optional(), preserve_voice_settings: z.boolean().optional()}); export const transferToAgentToolResultErrorModel = z.object({result_type: z.literal("transfer_to_agent_error").optional(), status: z.literal("error").optional(), from_agent: z.string(), error: z.string()}); export const transferToNumberResultTwilioSuccessModel = z.object({result_type: z.literal("transfer_to_number_twilio_success").optional(), status: z.literal("success").optional(), transfer_number: z.string(), reason: z.string().nullable().optional(), client_message: z.string().nullable().optional(), agent_message: z.string(), conference_name: z.string(), post_dial_digits: z.string().nullable().optional(), note: z.string().nullable().optional()}); export const transferToNumberResultSipSuccessModel = z.object({result_type: z.literal("transfer_to_number_sip_success").optional(), status: z.literal("success").optional(), transfer_number: z.string(), reason: z.string().nullable().optional(), note: z.string().nullable().optional()}); export const transferToNumberResultExotelSuccessModel = z.object({result_type: z.literal("transfer_to_number_exotel_success").optional(), status: z.literal("success").optional(), transfer_number: z.string(), reason: z.string().nullable().optional(), agent_message: z.string().nullable().optional(), note: z.string().nullable().optional()}); export const transferToNumberResultAmazonConnectSuccessModel = z.object({result_type: z.literal("transfer_to_number_amazon_connect_success").optional(), status: z.literal("success").optional(), reason: z.string().nullable().optional(), client_message: z.string().nullable().optional(), note: z.string().nullable().optional()}); export const transferToNumberResultErrorModel = z.object({result_type: z.literal("transfer_to_number_error").optional(), status: z.literal("error").optional(), error: z.string(), details: z.string().nullable().optional()}); export const skipTurnToolResponseModel = z.object({result_type: z.literal("skip_turn_success").optional(), status: z.literal("success").optional(), reason: z.string().nullable().optional()}); export const playDTMFResultSuccessModel = z.object({result_type: z.literal("play_dtmf_success").optional(), status: z.literal("success").optional(), dtmf_tones: z.string(), reason: z.string().nullable().optional()}); export const playDTMFResultErrorModel = z.object({result_type: z.literal("play_dtmf_error").optional(), status: z.literal("error").optional(), error: z.string(), details: z.string().nullable().optional()}); export const voiceMailDetectionResultSuccessModel = z.object({result_type: z.literal("voicemail_detection_success").optional(), status: z.literal("success").optional(), voicemail_message: z.string().nullable().optional(), reason: z.string().nullable().optional()}); export const testToolResultModel = z.object({result_type: z.literal("testing_tool_result").optional(), status: z.literal("success").optional(), reason: z.string().optional(), to_agent: z.string().nullable().optional(), to_node: z.string().nullable().optional()}); export const knowledgeBaseRagToolStatus = z.enum(["success", "no_documents", "no_results"]); export const knowledgeBaseRagChunkModel = z.object({chunk_id: z.string(), document_id: z.string(), content: z.string()}); export const knowledgeBaseRagToolResultModel = z.object({result_type: z.literal("knowledge_base_rag_success").optional(), status: knowledgeBaseRagToolStatus.optional(), chunk_count: z.number().int().optional(), message: z.string().optional(), chunks: z.array(knowledgeBaseRagChunkModel).optional()}); export const knowledgeBaseToolStatus = z.enum(["success", "no_matching_documents", "no_results"]); export const knowledgeBaseToolResultModel = z.object({result_type: z.literal("knowledge_base_success").optional(), status: knowledgeBaseToolStatus.optional(), chunk_count: z.number().int().optional(), message: z.string().optional()}); export const startProcedureToolResultSuccessModel = z.object({result_type: z.literal("start_procedure_success").optional(), status: z.literal("success").optional(), procedure_id: z.string(), procedure_name: z.string(), procedure_entry_workflow_node: z.string().nullable().optional(), procedure_return_workflow_node: z.string().nullable().optional(), message: z.string().optional()}); export const startProcedureToolErrorStatus = z.enum(["not_found", "invalid_name", "already_active"]); export const startProcedureToolResultErrorModel = z.object({result_type: z.literal("start_procedure_error").optional(), status: startProcedureToolErrorStatus, procedure_id: z.string().nullable().optional(), message: z.string()}); export const endProcedureToolResultSuccessModel = z.object({result_type: z.literal("end_procedure_success").optional(), status: z.literal("success").optional(), procedure_id: z.string(), procedure_name: z.string(), message: z.string().optional()}); export const endProcedureToolErrorStatus = z.enum(["not_found", "invalid_id"]); export const endProcedureToolResultErrorModel = z.object({result_type: z.literal("end_procedure_error").optional(), status: endProcedureToolErrorStatus, procedure_id: z.string().nullable().optional(), message: z.string()}); export const dummyToolResultModel = z.object({result_type: z.literal("dummy").optional()}); export const conversationHistoryTranscriptSystemToolResultCommonModelOutput = z.object({request_id: z.string(), tool_name: z.string(), tool_id: z.string().nullable().optional(), result_value: z.string(), is_error: z.boolean(), is_blocked: z.boolean().optional(), tool_has_been_called: z.boolean(), tool_latency_secs: z.number().optional(), error_type: z.string().optional(), raw_error_message: z.string().optional(), dynamic_variable_updates: z.array(dynamicVariableUpdateCommonModel).optional(), type: z.literal("system"), result: z.union([endCallToolResultModel, languageDetectionToolResultModel, transferToAgentToolResultSuccessModelOutput, transferToAgentToolResultErrorModel, transferToNumberResultTwilioSuccessModel, transferToNumberResultSipSuccessModel, transferToNumberResultExotelSuccessModel, transferToNumberResultAmazonConnectSuccessModel, transferToNumberResultErrorModel, skipTurnToolResponseModel, playDTMFResultSuccessModel, playDTMFResultErrorModel, voiceMailDetectionResultSuccessModel, testToolResultModel, knowledgeBaseRagToolResultModel, knowledgeBaseToolResultModel, startProcedureToolResultSuccessModel, startProcedureToolResultErrorModel, endProcedureToolResultSuccessModel, endProcedureToolResultErrorModel, dummyToolResultModel]).nullable().optional()}); export const conversationHistoryTranscriptApiIntegrationWebhookToolsResultCommonModelOutput = z.object({request_id: z.string(), tool_name: z.string(), tool_id: z.string().nullable(), result_value: z.string(), is_error: z.boolean(), is_blocked: z.boolean(), tool_has_been_called: z.boolean(), tool_latency_secs: z.number(), error_type: z.string(), raw_error_message: z.string(), dynamic_variable_updates: z.array(dynamicVariableUpdateCommonModel), type: z.literal("api_integration_webhook"), integration_id: z.string(), credential_id: z.string(), integration_connection_id: z.string()}); export const workflowToolEdgeStepModel = z.object({step_latency_secs: z.number(), type: z.literal("edge").optional(), edge_id: z.string(), target_node_id: z.string()}); export const workflowToolNestedToolsStepModelOutput = z.object({step_latency_secs: z.number(), type: z.literal("nested_tools").optional(), node_id: z.string(), requests: z.array(conversationHistoryTranscriptToolCallCommonModelOutput), results: z.array(z.union([conversationHistoryTranscriptOtherToolsResultCommonModel, conversationHistoryTranscriptSystemToolResultCommonModelOutput, conversationHistoryTranscriptApiIntegrationWebhookToolsResultCommonModelOutput, z.lazy(() => conversationHistoryTranscriptWorkflowToolsResultCommonModelOutput)])), is_successful: z.boolean()}); export const workflowToolMaxIterationsExceededStepModel = z.object({step_latency_secs: z.number(), type: z.literal("max_iterations_exceeded").optional(), max_iterations: z.number().int()}); export const workflowToolResponseModelOutput = z.object({steps: z.array(z.discriminatedUnion("type", [workflowToolEdgeStepModel, workflowToolNestedToolsStepModelOutput, workflowToolMaxIterationsExceededStepModel])).optional()}); export const conversationHistoryTranscriptWorkflowToolsResultCommonModelOutput: z.ZodType = z.object({request_id: z.string(), tool_name: z.string(), tool_id: z.string().nullable().optional(), result_value: z.string(), is_error: z.boolean(), is_blocked: z.boolean().optional(), tool_has_been_called: z.boolean(), tool_latency_secs: z.number().optional(), error_type: z.string().optional(), raw_error_message: z.string().optional(), dynamic_variable_updates: z.array(dynamicVariableUpdateCommonModel).optional(), type: z.literal("workflow"), result: workflowToolResponseModelOutput.nullable().optional()}); export const userFeedback = z.object({score: userFeedbackScore, time_in_call_secs: z.number().int()}); export const metricRecord = z.object({elapsed_time: z.number()}); export const conversationTurnMetrics = z.object({metrics: z.record(z.string(), metricRecord).optional(), convai_asr_provider: z.string().nullable().optional(), convai_tts_model: z.string().nullable().optional(), convai_tts_cascade: z.string().nullable().optional(), voice_id: z.string().nullable().optional()}); export const ragChunkMetadata = z.object({document_id: z.string(), chunk_id: z.string(), vector_distance: z.number()}); export const embeddingModelEnum = z.enum(["e5_mistral_7b_instruct", "multilingual_e5_large_instruct"]); export const ragRetrievalInfo = z.object({chunks: z.array(ragChunkMetadata), embedding_model: embeddingModelEnum, retrieval_query: z.string(), rag_latency_secs: z.number(), used_chunk_ids: z.array(z.string()).optional()}); export const transcriptPlatformEvent = z.enum(["user_turn_timeout", "skip_turn_wait_elapsed"]); export const conversationReasoningModel = z.object({summary: z.string().nullable().optional(), provider_redact: z.boolean().optional()}); export const chatSourceMedium = z.enum(["audio", "dtmf", "text", "image", "file"]); export const guardrailType = z.enum(["custom", "prompt_injection", "self_harm_intent", "violence_graphic", "sexual", "violence", "harassment", "sexual_minors", "self_harm", "self_harm_instructions", "harassment_threatening", "hate", "hate_threatening", "profanity", "religion_or_politics", "medical_and_legal", "guardrail"]); export const guardrailExecutionMode = z.enum(["streaming", "blocking"]); export const guardrailLLMVerdict = z.object({type: z.literal("llm").optional(), rationale: z.string()}); export const guardrailClassifierVerdict = z.object({type: z.literal("classifier").optional(), score: z.number(), threshold: z.number()}); export const guardrailUnknownVerdict = z.object({type: z.literal("unknown").optional()}); export const triggeredGuardrailCommonModel = z.object({guardrail_type: guardrailType, guardrail_name: z.string().nullable().optional(), execution_mode: guardrailExecutionMode.nullable().optional(), guardrail_details: z.union([guardrailLLMVerdict, guardrailClassifierVerdict, guardrailUnknownVerdict]).nullable().optional()}); export const conversationHistoryTranscriptFileInputResponseModel = z.object({file_id: z.string(), original_filename: z.string(), mime_type: z.string(), file_url: z.string()}); export const contextualUpdateInfo = z.object({context_id: z.string(), is_superseded: z.boolean().optional()}); export const conversationHistoryTranscriptResponseModel = z.object({role: z.enum(["user", "agent"]), agent_metadata: agentMetadata.nullable().optional(), message: z.string().nullable().optional(), multivoice_message: conversationHistoryMultivoiceMessageModel.nullable().optional(), tool_calls: z.array(conversationHistoryTranscriptToolCallCommonModelOutput).optional(), tool_results: z.array(z.union([conversationHistoryTranscriptOtherToolsResultCommonModel, conversationHistoryTranscriptSystemToolResultCommonModelOutput, conversationHistoryTranscriptApiIntegrationWebhookToolsResultCommonModelOutput, conversationHistoryTranscriptWorkflowToolsResultCommonModelOutput])).optional(), feedback: userFeedback.nullable().optional(), llm_override: z.string().nullable().optional(), producing_llm: z.string().nullable().optional(), time_in_call_secs: z.number().int(), conversation_turn_metrics: conversationTurnMetrics.nullable().optional(), rag_retrieval_info: ragRetrievalInfo.nullable().optional(), llm_usage: lLMUsageOutput.nullable().optional(), interrupted: z.boolean().optional(), ignored_as_backchannel: z.boolean().optional(), platform_event: transcriptPlatformEvent.nullable().optional(), original_message: z.string().nullable().optional(), reasoning: z.array(conversationReasoningModel).optional(), source_medium: chatSourceMedium.nullable().optional(), source_event_id: z.number().int().nullable().optional(), used_static_kb_document_ids: z.array(z.string()).optional(), user_identifier: z.string().nullable().optional(), id: z.string().nullable().optional(), created_at_unix_ms: z.number().int().nullable().optional(), triggered_guardrails: z.array(triggeredGuardrailCommonModel).optional(), file_input: conversationHistoryTranscriptFileInputResponseModel.nullable().optional(), file_inputs: z.array(conversationHistoryTranscriptFileInputResponseModel).optional(), contextual_update_info: contextualUpdateInfo.nullable().optional(), reasoned: z.boolean().optional()}); export const getConversationResponseModel = z.object({agent_id: z.string(), agent_name: z.string().nullable().optional(), conversation_product: z.string().optional(), status: z.enum(["initiated", "in-progress", "processing", "done", "failed"]), user_id: z.string().nullable().optional(), branch_id: z.string().nullable().optional(), version_id: z.string().nullable().optional(), metadata: conversationHistoryMetadataCommonModel, analysis: conversationHistoryAnalysisCommonModel.nullable().optional(), user_message_count: z.number().int().nullable().optional(), agent_message_count: z.number().int().nullable().optional(), visited_agents: z.array(visitedAgentRef).optional(), conversation_initiation_client_data: conversationInitiationClientDataRequestOutput.optional(), environment: z.string().optional(), conversation_id: z.string(), has_audio: z.boolean(), has_user_audio: z.boolean(), has_response_audio: z.boolean(), has_auxiliary_audio: z.boolean(), transcript: z.array(conversationHistoryTranscriptResponseModel), tag_ids: z.array(z.string()).optional(), otlp_traces: z.record(z.string(), z.unknown()).nullable().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Run Conversation Analysis * * POST /v1/convai/conversations/{conversation_id}/analysis/run */ export const createApiV1ConvaiConversationsConversationIdAnalysisRun = async (args: CreateApiV1ConvaiConversationsConversationIdAnalysisRunArgs, options: CreateApiV1ConvaiConversationsConversationIdAnalysisRunOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['xi-api-key'] != null) headers.set("xi-api-key", String(args['xi-api-key'])) const url = `${baseUrl.replace(/\/+$/, '')}/v1/convai/conversations/${encodeURIComponent(String(args.conversation_id))}/analysis/run${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getConversationResponseModel, await res.json()) };