index.ts•14.4 kB
import { z } from "zod";
import {
  CreatePhoneCallInputSchema,
  CreateWebCallInputSchema,
  CallOutputSchema,
  AgentOutputSchema,
  PhoneNumberOutputSchema,
  VoiceOutputSchema,
  KnowledgeBaseOutputSchema,
  CreateAgentInputSchema,
  UpdateAgentInputSchema,
  CreateRetellLLMInputSchema,
  UpdateRetellLLMInputSchema,
  RetellLLMOutputSchema,
  ListCallsInputSchema,
  UpdateCallInputSchema,
} from "../schemas/index.js";
// ===== Call Transformers =====
export const transformPhoneCallInput = (
  input: z.infer<typeof CreatePhoneCallInputSchema>
) => {
  return {
    from_number: input.fromNumber,
    to_number: input.toNumber,
    override_agent_id: input.overrideAgentId,
    override_agent_version: input.overrideAgentVersion,
    direction: input.direction,
    metadata: input.metadata,
    retell_llm_dynamic_variables: input.retellLlmDynamicVariables,
    opt_out_sensitive_data_storage: input.optOutSensitiveDataStorage,
    opt_in_signed_url: input.optInSignedUrl,
  };
};
export const transformWebCallInput = (
  input: z.infer<typeof CreateWebCallInputSchema>
) => {
  return {
    agent_id: input.agentId,
    metadata: input.metadata,
    retell_llm_dynamic_variables: input.retellLlmDynamicVariables,
    opt_out_sensitive_data_storage: input.optOutSensitiveDataStorage,
    opt_in_signed_url: input.optInSignedUrl,
  };
};
export const transformCallOutput = (data: any) => {
  return {
    call_id: data.call_id,
    call_type: data.call_type,
    agent_id: data.agent_id,
    version: data.version,
    call_status: data.call_status,
    metadata: data.metadata,
    start_timestamp: data.start_timestamp,
    end_timestamp: data.end_timestamp,
    transcript: data.transcript,
    recording_url: data.recording_url,
    disconnection_reason: data.disconnection_reason,
    call_analysis: data.call_analysis,
    call_cost: data.call_cost,
  };
};
export const transformListCallsInput = (
  data: z.infer<typeof ListCallsInputSchema>
) => {
  return {
    agent_id: data.agentId,
    start_timestamp: data.startTimestamp,
    end_timestamp: data.endTimestamp,
    limit: data.limit,
    offset: data.offset,
  };
};
export const transformUpdateCallInput = (
  data: z.infer<typeof UpdateCallInputSchema>
) => {
  return {
    metadata: data.metadata,
    retell_llm_dynamic_variables: data.dynamicVariables,
  };
};
// ===== Agent Transformers =====
export function transformAgentInput(
  input: z.infer<typeof CreateAgentInputSchema>
) {
  return {
    response_engine: input.response_engine,
    voice_id: input.voice_id,
    agent_name: input.agent_name,
    voice_model: input.voice_model,
    // fallback_voice_ids: input.fallback_voice_ids,
    // voice_temperature: input.voice_temperature,
    // voice_speed: input.voice_speed,
    // volume: input.volume,
    // responsiveness: input.responsiveness,
    // interruption_sensitivity: input.interruption_sensitivity,
    // enable_backchannel: input.enable_backchannel,
    // backchannel_frequency: input.backchannel_frequency,
    // backchannel_words: input.backchannel_words,
    // reminder_trigger_ms: input.reminder_trigger_ms,
    // reminder_max_count: input.reminder_max_count,
    // ambient_sound: input.ambient_sound,
    // ambient_sound_volume: input.ambient_sound_volume,
    // language: input.language,
    // webhook_url: input.webhook_url,
    // boosted_keywords: input.boosted_keywords,
    // enable_transcription_formatting: input.enable_transcription_formatting,
    // opt_out_sensitive_data_storage: input.opt_out_sensitive_data_storage,
    // opt_in_signed_url: input.opt_in_signed_url,
    // pronunciation_dictionary: input.pronunciation_dictionary,
    // normalize_for_speech: input.normalize_for_speech,
    // end_call_after_silence_ms: input.end_call_after_silence_ms,
    // max_call_duration_ms: input.max_call_duration_ms,
    // enable_voicemail_detection: input.enable_voicemail_detection,
    // voicemail_message: input.voicemail_message,
    // voicemail_detection_timeout_ms: input.voicemail_detection_timeout_ms,
    // post_call_analysis_data: input.post_call_analysis_data,
    // post_call_analysis_model: input.post_call_analysis_model,
    // begin_message_delay_ms: input.begin_message_delay_ms,
    // ring_duration_ms: input.ring_duration_ms,
    // stt_mode: input.stt_mode,
  };
}
export function transformUpdateAgentInput(
  input: z.infer<typeof UpdateAgentInputSchema>
) {
  const updateData: any = {};
  if (input.response_engine !== undefined)
    updateData.response_engine = input.response_engine;
  if (input.voice_id !== undefined) updateData.voice_id = input.voice_id;
  if (input.agent_name !== undefined) updateData.agent_name = input.agent_name;
  if (input.voice_model !== undefined)
    updateData.voice_model = input.voice_model;
  if (input.fallback_voice_ids !== undefined)
    updateData.fallback_voice_ids = input.fallback_voice_ids;
  if (input.voice_temperature !== undefined)
    updateData.voice_temperature = input.voice_temperature;
  if (input.voice_speed !== undefined)
    updateData.voice_speed = input.voice_speed;
  if (input.volume !== undefined) updateData.volume = input.volume;
  if (input.responsiveness !== undefined)
    updateData.responsiveness = input.responsiveness;
  if (input.interruption_sensitivity !== undefined)
    updateData.interruption_sensitivity = input.interruption_sensitivity;
  if (input.enable_backchannel !== undefined)
    updateData.enable_backchannel = input.enable_backchannel;
  if (input.backchannel_frequency !== undefined)
    updateData.backchannel_frequency = input.backchannel_frequency;
  if (input.backchannel_words !== undefined)
    updateData.backchannel_words = input.backchannel_words;
  if (input.reminder_trigger_ms !== undefined)
    updateData.reminder_trigger_ms = input.reminder_trigger_ms;
  if (input.reminder_max_count !== undefined)
    updateData.reminder_max_count = input.reminder_max_count;
  if (input.ambient_sound !== undefined)
    updateData.ambient_sound = input.ambient_sound;
  if (input.ambient_sound_volume !== undefined)
    updateData.ambient_sound_volume = input.ambient_sound_volume;
  if (input.language !== undefined) updateData.language = input.language;
  if (input.webhook_url !== undefined)
    updateData.webhook_url = input.webhook_url;
  if (input.boosted_keywords !== undefined)
    updateData.boosted_keywords = input.boosted_keywords;
  if (input.enable_transcription_formatting !== undefined)
    updateData.enable_transcription_formatting =
      input.enable_transcription_formatting;
  if (input.opt_out_sensitive_data_storage !== undefined)
    updateData.opt_out_sensitive_data_storage =
      input.opt_out_sensitive_data_storage;
  if (input.opt_in_signed_url !== undefined)
    updateData.opt_in_signed_url = input.opt_in_signed_url;
  if (input.pronunciation_dictionary !== undefined)
    updateData.pronunciation_dictionary = input.pronunciation_dictionary;
  if (input.normalize_for_speech !== undefined)
    updateData.normalize_for_speech = input.normalize_for_speech;
  if (input.end_call_after_silence_ms !== undefined)
    updateData.end_call_after_silence_ms = input.end_call_after_silence_ms;
  if (input.max_call_duration_ms !== undefined)
    updateData.max_call_duration_ms = input.max_call_duration_ms;
  if (input.enable_voicemail_detection !== undefined)
    updateData.enable_voicemail_detection = input.enable_voicemail_detection;
  if (input.voicemail_message !== undefined)
    updateData.voicemail_message = input.voicemail_message;
  if (input.voicemail_detection_timeout_ms !== undefined)
    updateData.voicemail_detection_timeout_ms =
      input.voicemail_detection_timeout_ms;
  if (input.post_call_analysis_data !== undefined)
    updateData.post_call_analysis_data = input.post_call_analysis_data;
  if (input.post_call_analysis_model !== undefined)
    updateData.post_call_analysis_model = input.post_call_analysis_model;
  if (input.begin_message_delay_ms !== undefined)
    updateData.begin_message_delay_ms = input.begin_message_delay_ms;
  if (input.ring_duration_ms !== undefined)
    updateData.ring_duration_ms = input.ring_duration_ms;
  if (input.stt_mode !== undefined) updateData.stt_mode = input.stt_mode;
  return updateData;
}
export function transformAgentOutput(
  agent: any
): z.infer<typeof AgentOutputSchema> {
  return {
    agent_id: agent.agent_id,
    response_engine: agent.response_engine,
    agent_name: agent.agent_name,
    version: agent.version,
    voice_id: agent.voice_id,
    voice_model: agent.voice_model,
    fallback_voice_ids: agent.fallback_voice_ids,
    voice_temperature: agent.voice_temperature,
    voice_speed: agent.voice_speed,
    volume: agent.volume,
    responsiveness: agent.responsiveness,
    interruption_sensitivity: agent.interruption_sensitivity,
    enable_backchannel: agent.enable_backchannel,
    backchannel_frequency: agent.backchannel_frequency,
    backchannel_words: agent.backchannel_words,
    reminder_trigger_ms: agent.reminder_trigger_ms,
    reminder_max_count: agent.reminder_max_count,
    ambient_sound: agent.ambient_sound,
    ambient_sound_volume: agent.ambient_sound_volume,
    language: agent.language,
    webhook_url: agent.webhook_url,
    boosted_keywords: agent.boosted_keywords,
    enable_transcription_formatting: agent.enable_transcription_formatting,
    opt_out_sensitive_data_storage: agent.opt_out_sensitive_data_storage,
    opt_in_signed_url: agent.opt_in_signed_url,
    pronunciation_dictionary: agent.pronunciation_dictionary,
    normalize_for_speech: agent.normalize_for_speech,
    end_call_after_silence_ms: agent.end_call_after_silence_ms,
    max_call_duration_ms: agent.max_call_duration_ms,
    enable_voicemail_detection: agent.enable_voicemail_detection,
    voicemail_message: agent.voicemail_message,
    voicemail_detection_timeout_ms: agent.voicemail_detection_timeout_ms,
    post_call_analysis_data: agent.post_call_analysis_data,
    post_call_analysis_model: agent.post_call_analysis_model,
    begin_message_delay_ms: agent.begin_message_delay_ms,
    ring_duration_ms: agent.ring_duration_ms,
    stt_mode: agent.stt_mode,
    last_modification_timestamp: agent.last_modification_timestamp,
  };
}
// ===== Phone Number Transformers =====
export function transformPhoneNumberOutput(
  phoneNumber: any
): z.infer<typeof PhoneNumberOutputSchema> {
  return {
    phone_number: phoneNumber.phone_number,
    phone_number_pretty: phoneNumber.phone_number_pretty,
    phone_number_type: phoneNumber.phone_number_type,
    inbound_agent_id: phoneNumber.inbound_agent_id,
    outbound_agent_id: phoneNumber.outbound_agent_id,
    area_code: phoneNumber.area_code,
    nickname: phoneNumber.nickname,
    inbound_webhook_url: phoneNumber.inbound_webhook_url,
    last_modification_timestamp: phoneNumber.last_modification_timestamp,
  };
}
// ===== Voice Transformers =====
export function transformVoiceOutput(
  voice: any
): z.infer<typeof VoiceOutputSchema> {
  return {
    voice_id: voice.voice_id,
    voice_name: voice.voice_name,
    provider: voice.provider,
    accent: voice.accent,
    gender: voice.gender,
    age: voice.age,
  };
}
// ===== Knowledge Base Transformers =====
export function transformKnowledgeBaseOutput(
  kb: any
): z.infer<typeof KnowledgeBaseOutputSchema> {
  return {
    knowledge_base_id: kb.knowledge_base_id,
    name: kb.name,
    description: kb.description,
    created_at: kb.created_at,
    updated_at: kb.updated_at,
    sources: kb.sources,
  };
}
// ===== Retell LLM Transformers =====
export function transformRetellLLMInput(
  input: z.infer<typeof CreateRetellLLMInputSchema>
) {
  return {
    // version: input.version,
    model: input.model,
    // s2s_model: input.s2s_model,
    // model_temperature: input.model_temperature,
    // model_high_priority: input.model_high_priority,
    // tool_call_strict_mode: input.tool_call_strict_mode,
    general_prompt: input.general_prompt,
    // general_tools: input.general_tools,
    // states: input.states,
    // starting_state: input.starting_state,
    begin_message: input.begin_message,
    default_dynamic_variables: input.default_dynamic_variables,
    knowledge_base_ids: input.knowledge_base_ids,
  };
}
export function transformUpdateRetellLLMInput(
  input: z.infer<typeof UpdateRetellLLMInputSchema>
) {
  const updateData: any = {};
  if (input.version !== undefined) updateData.version = input.version;
  if (input.model !== undefined) updateData.model = input.model;
  if (input.s2s_model !== undefined) updateData.s2s_model = input.s2s_model;
  if (input.model_temperature !== undefined)
    updateData.model_temperature = input.model_temperature;
  if (input.model_high_priority !== undefined)
    updateData.model_high_priority = input.model_high_priority;
  if (input.tool_call_strict_mode !== undefined)
    updateData.tool_call_strict_mode = input.tool_call_strict_mode;
  if (input.general_prompt !== undefined)
    updateData.general_prompt = input.general_prompt;
  if (input.general_tools !== undefined)
    updateData.general_tools = input.general_tools;
  // if (input.states !== undefined) updateData.states = input.states;
  // if (input.starting_state !== undefined)
  //   updateData.starting_state = input.starting_state;
  if (input.begin_message !== undefined)
    updateData.begin_message = input.begin_message;
  if (input.default_dynamic_variables !== undefined)
    updateData.default_dynamic_variables = input.default_dynamic_variables;
  if (input.knowledge_base_ids !== undefined)
    updateData.knowledge_base_ids = input.knowledge_base_ids;
  return updateData;
}
export function transformRetellLLMOutput(
  llm: any
): z.infer<typeof RetellLLMOutputSchema> {
  return {
    llm_id: llm.llm_id,
    version: llm.version,
    model: llm.model,
    s2s_model: llm.s2s_model,
    model_temperature: llm.model_temperature,
    model_high_priority: llm.model_high_priority,
    tool_call_strict_mode: llm.tool_call_strict_mode,
    general_prompt: llm.general_prompt,
    // general_tools: llm.general_tools,
    // states: llm.states,
    // starting_state: llm.starting_state,
    begin_message: llm.begin_message,
    default_dynamic_variables: llm.default_dynamic_variables,
    knowledge_base_ids: llm.knowledge_base_ids,
    last_modification_timestamp: llm.last_modification_timestamp,
  };
}