""" Options: Date: 2025-05-04 20:40:11 Version: 8.71 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://team.evovoice.io #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: AppGetHomeInformation.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class HostedSuiteCompletedFormField: name: Optional[str] = None values: Optional[List[str]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class HostedSuiteCompletedForm: id: Optional[str] = None name: Optional[str] = None date_created: Optional[str] = None date_completed: Optional[str] = None form_id: Optional[str] = None form_name: Optional[str] = None client_id: Optional[str] = None client_name: Optional[str] = None contact_id: Optional[str] = None contact_name: Optional[str] = None contacts_ids: Optional[List[str]] = None contacts_names: Optional[List[str]] = None email_subject: Optional[str] = None caller_number: Optional[str] = None fields: Optional[List[HostedSuiteCompletedFormField]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class MessageInfo: id: Optional[str] = None account_id: Optional[str] = None customer_id: Optional[str] = None endpoint_id: Optional[str] = None endpoint_display_name: Optional[str] = None date: Optional[str] = None direction: Optional[MessageDirections] = None other_address: Optional[str] = None sender: Optional[str] = None text: Optional[str] = None is_unread: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ConversationInfo: id: Optional[str] = None endpoint_id: Optional[str] = None other_address: Optional[str] = None most_recent_message: Optional[MessageInfo] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AppHomeCallMetric: metric_key: Optional[str] = None total: float = 0.0 average: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FileInfo(EntityInfo): # @ApiMember(Description="The type of file this is") type: Optional[FileTypes] = None """ The type of file this is """ # @ApiMember(Description="The account ID this file is associated with") account_id: Optional[str] = None """ The account ID this file is associated with """ # @ApiMember(Description="The name of the account this file is associated with") account_name: Optional[str] = None """ The name of the account this file is associated with """ # @ApiMember(Description="The ID of the customer this file is associated with") customer_id: Optional[str] = None """ The ID of the customer this file is associated with """ # @ApiMember(Description="The name of the customer this file is associated with") customer_name: Optional[str] = None """ The name of the customer this file is associated with """ # @ApiMember(Description="The breadcrumb to the customer for this file") customer_breadcrumb: Optional[List[CustomerBreadcrumb]] = None """ The breadcrumb to the customer for this file """ # @ApiMember(Description="The ID of the user this file is assocaited with") user_id: Optional[str] = None """ The ID of the user this file is assocaited with """ # @ApiMember(Description="The name of the user this file is associated with") user_name: Optional[str] = None """ The name of the user this file is associated with """ # @ApiMember(Description="The original file name for the file") file_name: Optional[str] = None """ The original file name for the file """ # @ApiMember(Description="The URI of the file") uri: Optional[str] = None """ The URI of the file """ # @ApiMember(Description="The Content type of the file") content_type: Optional[str] = None """ The Content type of the file """ # @ApiMember(Description="The size of the file") content_length: int = 0 """ The size of the file """ # @ApiMember(Description="The Twilio ID of the recording") recording_sid: Optional[str] = None """ The Twilio ID of the recording """ # @ApiMember(Description="The duration of the recording in seconds") recording_duration: int = 0 """ The duration of the recording in seconds """ # @ApiMember(Description="Who is the recording from?") recording_from: Optional[str] = None """ Who is the recording from? """ # @ApiMember(Description="Transcription (if available)") transcription: Optional[str] = None """ Transcription (if available) """ # @ApiMember(Description="From Address (e.g. caller ID) for incoming calls") from_address: Optional[str] = None """ From Address (e.g. caller ID) for incoming calls """ # @ApiMember(Description="To Address (e.g. dialed number) for outgoing calls") to_address: Optional[str] = None """ To Address (e.g. dialed number) for outgoing calls """ # @ApiMember(Description="The AI transcription for this call") ai_transcription: Optional[str] = None """ The AI transcription for this call """ @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SessionInfo(EntityInfo): # @ApiMember(Description="The state of the session") dial_state: Optional[SessionDialState] = None """ The state of the session """ # @ApiMember(Description="The call state of the session") call_state: Optional[SessionCallState] = None """ The call state of the session """ # @ApiMember(Description="The queue state of the session") queue_state: Optional[SessionQueueStates] = None """ The queue state of the session """ # @ApiMember(Description="The ID of the account associated with the flow") account_id: Optional[str] = None """ The ID of the account associated with the flow """ # @ApiMember(Description="The name of the account associated with the session") account_name: Optional[str] = None """ The name of the account associated with the session """ # @ApiMember(Description="The ID of the customer this session is associated with") customer_id: Optional[str] = None """ The ID of the customer this session is associated with """ # @ApiMember(Description="The customer breadcrumb this session is associated with") customer_breadcrumb: Optional[List[CustomerBreadcrumb]] = None """ The customer breadcrumb this session is associated with """ # @ApiMember(Description="The name of the customer this session is associated with") customer_name: Optional[str] = None """ The name of the customer this session is associated with """ # @ApiMember(Description="The ID of the endpoint associated with this session") endpoint_id: Optional[str] = None """ The ID of the endpoint associated with this session """ # @ApiMember(Description="The name of the endpoint associated with this session") endpoint_name: Optional[str] = None """ The name of the endpoint associated with this session """ # @ApiMember(Description="The date the call completed") date_completed: Optional[str] = None """ The date the call completed """ # @ApiMember(Description="The destination of the session (e.g. what was entered into the Dial box)") destination: Optional[str] = None """ The destination of the session (e.g. what was entered into the Dial box) """ # @ApiMember(Description="The to address if any") to_address: Optional[str] = None """ The to address if any """ # @ApiMember(Description="The from address if any") from_address: Optional[str] = None """ The from address if any """ # @ApiMember(Description="The from name if any") from_name: Optional[str] = None """ The from name if any """ # @ApiMember(Description="Answered by name (if any)") answered_by_name: Optional[str] = None """ Answered by name (if any) """ # @ApiMember(Description="The ID of the queue member assigned to this call") queue_member_id: Optional[str] = None """ The ID of the queue member assigned to this call """ # @ApiMember(Description="The flow channel") channel: Optional[FlowChannels] = None """ The flow channel """ # @ApiMember(Description="Has the session ended") ended: bool = False """ Has the session ended """ # @ApiMember(Description="The outcome of the call") outcome: Optional[str] = None """ The outcome of the call """ # @ApiMember(Description="The twilio Call SID of this session") call_sid: Optional[str] = None """ The twilio Call SID of this session """ # @ApiMember(Description="Any console data for this session") console_data: Optional[str] = None """ Any console data for this session """ # @ApiMember(Description="The name of the hold queue for this call") hold_queue_name: Optional[str] = None """ The name of the hold queue for this call """ # @ApiMember(Description="The user ID who put this call on hold") held_by_user_id: Optional[str] = None """ The user ID who put this call on hold """ # @ApiMember(Description="The reason for the hold") hold_reason: Optional[SessionHoldReasons] = None """ The reason for the hold """ # @ApiMember(Description="The SID of the conference if in a conference call") conference_sid: Optional[str] = None """ The SID of the conference if in a conference call """ # @ApiMember(Description="The display name for this session") display_name: Optional[str] = None """ The display name for this session """ # @ApiMember(Description="The log entries for this session") log: Optional[List[SessionLogInfo]] = None """ The log entries for this session """ # @ApiMember(Description="The members of this session") members: Optional[List[SessionMemberInfo]] = None """ The members of this session """ # @ApiMember(Description="The callback number (typically used for SIP to User calls)") callback_number: Optional[str] = None """ The callback number (typically used for SIP to User calls) """ # @ApiMember(Description="The ID of the endpoint that answered") answered_by_id: Optional[str] = None """ The ID of the endpoint that answered """ # @ApiMember(Description="Is this session incoming or outgoing?") direction: Optional[SessionDirections] = None """ Is this session incoming or outgoing? """ # @ApiMember(Description="The phone number that this session is coming from (used with SMS chats)") from_phone_number: Optional[str] = None """ The phone number that this session is coming from (used with SMS chats) """ # @ApiMember(Description="The Call SID of the most recently added conference participant") most_recent_participant_call_sid: Optional[str] = None """ The Call SID of the most recently added conference participant """ # @ApiMember(Description="Was this session missed?") was_missed: bool = False """ Was this session missed? """ # @ApiMember(Description="The ring queue that the call is currently in") ring_queue_id: Optional[str] = None """ The ring queue that the call is currently in """ @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AppHomeInformation: is_hosted_suite_customer: bool = False conversations: Optional[List[ConversationInfo]] = None calls: Optional[List[SessionInfo]] = None call_metrics: Optional[List[AppHomeCallMetric]] = None voicemail: Optional[List[FileInfo]] = None forms: Optional[List[HostedSuiteCompletedForm]] = None # @Route("/portal/home", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AppGetHomeInformation(IReturn[AppHomeInformation]): account_id: Optional[str] = None customer_id: Optional[str] = None from_date: Optional[str] = None