Evo Voice

<back to all web services

ListSessions

Retrieve a list of sessions

Requires Authentication
The following routes are available for this service:
GET/sessions
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


class SortOrders(str, Enum):
    ASCEND = 'Ascend'
    DESCEND = 'Descend'


T = TypeVar('T')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ListRequest(Generic[T], IReturn[ListResponse[T]], IGet):
    # @ApiMember(Description="The page of data to retrieve")
    page: Optional[int] = None
    """
    The page of data to retrieve
    """


    # @ApiMember(Description="If you want all objects to be returned. This should be used with care")
    all: Optional[bool] = None
    """
    If you want all objects to be returned. This should be used with care
    """


    # @ApiMember(Description="The number per page to retrieve")
    count_per_page: Optional[int] = None
    """
    The number per page to retrieve
    """


    # @ApiMember(Description="Specific IDs")
    specific_ids: Optional[List[str]] = None
    """
    Specific IDs
    """


    # @ApiMember(Description="Specify a sort field")
    sort_field: Optional[str] = None
    """
    Specify a sort field
    """


    # @ApiMember(Description="Specify a sort order")
    sort_order: Optional[SortOrders] = None
    """
    Specify a sort order
    """


    # @ApiMember(Description="Disables total / page counts - improves performance. Returns only data. If there is no more data, Items will be empty array")
    simplified_paging: Optional[bool] = None
    """
    Disables total / page counts - improves performance. Returns only data. If there is no more data, Items will be empty array
    """
    @staticmethod
    def response_type(): return ListResponse[T]


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class EntityInfo:
    # @ApiMember(Description="The ID of the object")
    id: Optional[str] = None
    """
    The ID of the object
    """


    # @ApiMember(Description="The date the object was created")
    date_created: Optional[str] = None
    """
    The date the object was created
    """


    # @ApiMember(Description="The date the object was last modified")
    date_last_modified: Optional[str] = None
    """
    The date the object was last modified
    """


    # @ApiMember(Description="The user that created this object")
    created_by: Optional[str] = None
    """
    The user that created this object
    """


    # @ApiMember(Description="The user that last modified this object")
    last_modified_by: Optional[str] = None
    """
    The user that last modified this object
    """


class SessionDialState(str, Enum):
    NONE = 'None'
    ACTIVE = 'Active'


class SessionCallState(str, Enum):
    DISCONNECTED = 'Disconnected'
    RINGING = 'Ringing'
    CONNECTED = 'Connected'
    HOLD = 'Hold'
    PASSIVE = 'Passive'


class SessionQueueStates(str, Enum):
    NONE = 'None'
    QUEUED = 'Queued'
    RINGING = 'Ringing'
    CONNECTED = 'Connected'
    HOLD = 'Hold'
    DISCONNECTED = 'Disconnected'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerBreadcrumb:
    id: Optional[str] = None
    name: Optional[str] = None


class FlowChannels(str, Enum):
    VOICE = 'Voice'
    CHAT = 'Chat'
    FAX = 'Fax'


class SessionHoldReasons(str, Enum):
    NONE = 'None'
    TRANSFERRING = 'Transferring'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionLogInfo:
    date: Optional[str] = None
    message: Optional[str] = None


class SessionMemberCallState(str, Enum):
    NONE = 'None'
    RINGING = 'Ringing'
    CONNECTED = 'Connected'
    HOLD = 'Hold'


class SessionMemberRoles(str, Enum):
    NONE = 'None'
    CALLER = 'Caller'
    AGENT = 'Agent'
    TRANSFER = 'Transfer'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionMemberInfo:
    identity: Optional[str] = None
    endpoint_id: Optional[str] = None
    display_name: Optional[str] = None
    is_original_member: Optional[bool] = None
    avatar_url: Optional[str] = None
    application_data: Optional[Dict[str, str]] = None
    call_state: Optional[SessionMemberCallState] = None
    role: Optional[SessionMemberRoles] = None
    call_sid: Optional[str] = None
    muted: Optional[bool] = None


class SessionDirections(str, Enum):
    INCOMING = 'Incoming'
    OUTGOING = 'Outgoing'


@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: Optional[bool] = None
    """
    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: Optional[bool] = None
    """
    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
    """


# @Api(Description="Retrieve a list of sessions")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ListSessions(ListRequest[SessionInfo]):
    """
    Retrieve a list of sessions
    """

    # @ApiMember(Description="The account IDs for the sessions to retrieve")
    account_ids: Optional[List[str]] = None
    """
    The account IDs for the sessions to retrieve
    """


    # @ApiMember(Description="Whether to search live or archived sessions")
    search_archive: Optional[bool] = None
    """
    Whether to search live or archived sessions
    """


    # @ApiMember(Description="The start date to retrieve usage records for (YYYY-MM-DD)")
    start_date: Optional[str] = None
    """
    The start date to retrieve usage records for (YYYY-MM-DD)
    """


    # @ApiMember(Description="The end date to retrieve usage records for (YYYY-MM-DD)")
    end_date: Optional[str] = None
    """
    The end date to retrieve usage records for (YYYY-MM-DD)
    """


    # @ApiMember(Description="The IDs of the customers whose sessions you want to retrieve")
    customer_ids: Optional[List[str]] = None
    """
    The IDs of the customers whose sessions you want to retrieve
    """


    # @ApiMember(Description="The IDs of the endpoints whose sessions you want to retrieve")
    endpoint_ids: Optional[List[str]] = None
    """
    The IDs of the endpoints whose sessions you want to retrieve
    """


    # @ApiMember(Description="Filter by the from  (this is a contains search)")
    from_: Optional[str] = field(metadata=config(field_name='from'), default=None)
    """
    Filter by the from  (this is a contains search)
    """


    # @ApiMember(Description="Filter by the to  (this is a contains search)")
    to: Optional[str] = None
    """
    Filter by the to  (this is a contains search)
    """


    # @ApiMember(Description="Filter by text in the log")
    log: Optional[str] = None
    """
    Filter by text in the log
    """


    # @ApiMember(Description="Filter by parent session ID")
    parent_session_id: Optional[str] = None
    """
    Filter by parent session ID
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillingItem:
    base_cost: Optional[float] = None
    raw_unit_multiplier: Optional[float] = None
    unit_cost: Optional[float] = None
    allowance: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillingSettings:
    base: Optional[BillingItem] = None
    local_numbers: Optional[BillingItem] = None
    toll_free_numbers: Optional[BillingItem] = None
    inbound_voice_calls: Optional[BillingItem] = None
    outbound_voice_calls: Optional[BillingItem] = None
    inbound_faxes: Optional[BillingItem] = None
    outbound_faxes: Optional[BillingItem] = None
    inbound_sms_messages: Optional[BillingItem] = None
    outbound_sms_messages: Optional[BillingItem] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AccountInfo(EntityInfo):
    # @ApiMember(Description="The name of this account")
    name: Optional[str] = None
    """
    The name of this account
    """


    # @ApiMember(Description="The ID of this account's parent")
    parent_account_id: Optional[str] = None
    """
    The ID of this account's parent
    """


    # @ApiMember(Description="The twilio account SID")
    twilio_account_sid: Optional[str] = None
    """
    The twilio account SID
    """


    # @ApiMember(Description="The ancestors of this account. Useful for breadcrumbs")
    ancestor_ids: Optional[List[str]] = None
    """
    The ancestors of this account. Useful for breadcrumbs
    """


    # @ApiMember(Description="The max number of phone numbers this account can have")
    max_phone_numbers: Optional[int] = None
    """
    The max number of phone numbers this account can have
    """


    # @ApiMember(Description="This account is BYOA")
    is_b_y_o_a: Optional[bool] = None
    """
    This account is BYOA
    """


    # @ApiMember(Description="TrustHub Profile Sid")
    trust_hub_profile_sid: Optional[str] = None
    """
    TrustHub Profile Sid
    """


    # @ApiMember(Description="The ID of the logo file")
    logo_id: Optional[str] = None
    """
    The ID of the logo file
    """


    # @ApiMember(Description="The URI of the logo file")
    logo_uri: Optional[str] = None
    """
    The URI of the logo file
    """


    # @ApiMember(Description="The billing settings for this account")
    billing_settings: Optional[BillingSettings] = None
    """
    The billing settings for this account
    """


AccountInfo = TypeVar('AccountInfo')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ListResponse(Generic[AccountInfo]):
    # @ApiMember(Description="The items")
    items: Optional[List[AccountInfo]] = None
    """
    The items
    """


    # @ApiMember(Description="The total number of items")
    total_count: Optional[int] = None
    """
    The total number of items
    """


    # @ApiMember(Description="The total number of pages")
    total_pages: Optional[int] = None
    """
    The total number of pages
    """


    # @ApiMember(Description="Are there more pages of items? Used with simplified paging")
    has_more_pages: Optional[bool] = None
    """
    Are there more pages of items? Used with simplified paging
    """

Python ListSessions DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /sessions HTTP/1.1 
Host: evovoice.io 
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length

{"items":[{"dialState":"None","callState":"Disconnected","queueState":"None","accountId":"String","accountName":"String","customerId":"String","customerBreadcrumb":[{"id":"String","name":"String"}],"customerName":"String","endpointId":"String","endpointName":"String","dateCompleted":"String","destination":"String","toAddress":"String","fromAddress":"String","fromName":"String","answeredByName":"String","queueMemberId":"String","channel":"Voice","ended":false,"outcome":"String","callSid":"String","consoleData":"String","holdQueueName":"String","heldByUserId":"String","holdReason":"None","conferenceSid":"String","displayName":"String","log":[{"date":"String","message":"String"}],"members":[{"identity":"String","endpointId":"String","displayName":"String","isOriginalMember":false,"avatarUrl":"String","applicationData":{"String":"String"},"callState":"None","role":"None","callSid":"String","muted":false}],"callbackNumber":"String","answeredById":"String","direction":"Incoming","fromPhoneNumber":"String","mostRecentParticipantCallSid":"String","wasMissed":false,"ringQueueId":"String","id":"String","dateCreated":"String","dateLastModified":"String","createdBy":"String","lastModifiedBy":"String"}],"totalCount":0,"totalPages":0,"hasMorePages":false}