Evo Voice

<back to all web services

SetCustomerStagingMode

Change the customer's routing between production and staging

Requires Authentication
Requires any of the roles:SystemAdministrator, Manager, Customer
The following routes are available for this service:
POST/customers/{customerId}/staging
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 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
    """


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


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Value:
    bool_value: Optional[bool] = None
    string_value: Optional[str] = None
    number_value: Optional[float] = None
    list_value: Optional[List[Struct]] = None
    struct_value: Optional[Struct] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Struct(Dict[str,Value]):
    pass


class TagColors(str, Enum):
    MAGENTA = 'Magenta'
    RED = 'Red'
    VOLCANO = 'Volcano'
    ORANGE = 'Orange'
    GOLD = 'Gold'
    LIME = 'Lime'
    GREEN = 'Green'
    CYAN = 'Cyan'
    BLUE = 'Blue'
    GEEK_BLUE = 'GeekBlue'
    PURPLE = 'Purple'


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


class SimpleSchedulingRuleTypes(str, Enum):
    ALWAYS = 'Always'
    CUSTOMER_STATE = 'CustomerState'
    TIME = 'Time'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ScheduleDay:
    offset: int = 0
    day_of_week: Optional[DayOfWeek] = None


class SchedulingRuleFrequency(str, Enum):
    NONE = 'None'
    SECONDLY = 'Secondly'
    MINUTELY = 'Minutely'
    HOURLY = 'Hourly'
    DAILY = 'Daily'
    WEEKLY = 'Weekly'
    MONTHLY = 'Monthly'
    YEARLY = 'Yearly'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SchedulingRule:
    id: Optional[str] = None
    name: Optional[str] = None
    priority: int = 0
    state: Optional[str] = None
    source: Optional[str] = None
    condition: Optional[str] = None
    simple_rule_type: Optional[SimpleSchedulingRuleTypes] = None
    customer_state: Optional[str] = None
    flow_id: Optional[str] = None
    flow_params: Optional[Struct] = None
    is_all_day: bool = False
    start_date: Optional[str] = None
    start_time: Optional[str] = None
    end_time: Optional[str] = None
    by_set_position: Optional[List[int]] = None
    by_month: Optional[List[int]] = None
    by_week_no: Optional[List[int]] = None
    by_year_day: Optional[List[int]] = None
    by_month_day: Optional[List[int]] = None
    by_day: Optional[List[ScheduleDay]] = None
    by_hour: Optional[List[int]] = None
    by_minute: Optional[List[int]] = None
    interval: int = 0
    count: int = 0
    until_date: Optional[str] = None
    frequency: Optional[SchedulingRuleFrequency] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Schedule:
    time_zone_id: Optional[str] = None
    inherit: bool = False
    force_closed: bool = False
    rules: Optional[List[SchedulingRule]] = None
    default_state: Optional[str] = None


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


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class EntityIntegrationData(Dict[str,IntegrationData]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillingItem:
    base_cost: float = 0.0
    raw_unit_multiplier: float = 0.0
    unit_cost: float = 0.0
    allowance: int = 0


@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
    ai_insights: Optional[BillingItem] = None
    ai_live_minutes: Optional[BillingItem] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AppSettings:
    enable_phone_number_management: bool = False
    enable_device_management: bool = False
    enable_dialer: bool = False
    enable_call_history: bool = False
    enable_assistants: bool = False
    show_file_name_in_message_center: bool = False
    chakra_theme: Optional[str] = None
    custom_css: Optional[str] = None
    page_title: Optional[str] = None
    string_mappings: Optional[str] = None
    logout_url: Optional[str] = None
    port_my_number_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerInfo(EntityInfo):
    # @ApiMember(Description="The ID of the account associated with this customer")
    account_id: Optional[str] = None
    """
    The ID of the account associated with this customer
    """


    # @ApiMember(Description="The parent customer ID for this customer")
    parent_customer_id: Optional[str] = None
    """
    The parent customer ID for this customer
    """


    # @ApiMember(Description="The breadcrumb to this customer")
    breadcrumb: Optional[List[CustomerBreadcrumb]] = None
    """
    The breadcrumb to this customer
    """


    # @ApiMember(Description="The name of the account associated with this customer")
    account_name: Optional[str] = None
    """
    The name of the account associated with this customer
    """


    # @ApiMember(Description="Is this customer staging or production?")
    is_staging: bool = False
    """
    Is this customer staging or production?
    """


    # @ApiMember(Description="The name of the company")
    name: Optional[str] = None
    """
    The name of the company
    """


    # @ApiMember(Description="The reference ID for this company")
    reference_id: Optional[str] = None
    """
    The reference ID for this company
    """


    # @ApiMember(Description="This customer's data values")
    data: Optional[Struct] = None
    """
    This customer's data values
    """


    # @ApiMember(Description="The list of tags for this customer")
    tags: Optional[List[Tag]] = None
    """
    The list of tags for this customer
    """


    # @ApiMember(Description="This customer's schedule")
    schedule: Optional[Schedule] = None
    """
    This customer's schedule
    """


    # @ApiMember(Description="Integration data for this customer")
    integration_data: Optional[EntityIntegrationData] = None
    """
    Integration data for this customer
    """


    # @ApiMember(Description="Override this customer's billing settings? Otherwise inherits from parent")
    override_billing_settings: bool = False
    """
    Override this customer's billing settings? Otherwise inherits from parent
    """


    # @ApiMember(Description="Billing settings for this customer")
    billing_settings: Optional[BillingSettings] = None
    """
    Billing settings for this customer
    """


    # @ApiMember(Description="Should this customer override the parent customer's app settings")
    override_app_settings: bool = False
    """
    Should this customer override the parent customer's app settings
    """


    # @ApiMember(Description="App / Portal settings for this customer")
    app_settings: Optional[AppSettings] = None
    """
    App / Portal settings for this customer
    """


# @Api(Description="Change the customer's routing between production and staging")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetCustomerStagingMode:
    """
    Change the customer's routing between production and staging
    """

    # @ApiMember(Description="The ID of the customer you want to update")
    customer_id: Optional[str] = None
    """
    The ID of the customer you want to update
    """


    # @ApiMember(Description="Should this customer's phone numbers route to the staging server")
    is_staging: bool = False
    """
    Should this customer's phone numbers route to the staging server
    """

Python SetCustomerStagingMode DTOs

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

HTTP + XML

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

POST /customers/{customerId}/staging HTTP/1.1 
Host: team.evovoice.io 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<SetCustomerStagingMode xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Customers">
  <CustomerId>String</CustomerId>
  <IsStaging>false</IsStaging>
</SetCustomerStagingMode>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<CustomerInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Voice.Api.Customers">
  <CreatedBy xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</CreatedBy>
  <DateCreated xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</DateCreated>
  <DateLastModified xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</DateLastModified>
  <Id xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</Id>
  <LastModifiedBy xmlns="http://schemas.datacontract.org/2004/07/Voice.Api">String</LastModifiedBy>
  <AccountId>String</AccountId>
  <AccountName>String</AccountName>
  <AppSettings>
    <ChakraTheme>String</ChakraTheme>
    <CustomCss>String</CustomCss>
    <EnableAssistants>false</EnableAssistants>
    <EnableCallHistory>false</EnableCallHistory>
    <EnableDeviceManagement>false</EnableDeviceManagement>
    <EnableDialer>false</EnableDialer>
    <EnablePhoneNumberManagement>false</EnablePhoneNumberManagement>
    <LogoutUrl>String</LogoutUrl>
    <PageTitle>String</PageTitle>
    <PortMyNumberUrl>String</PortMyNumberUrl>
    <ShowFileNameInMessageCenter>false</ShowFileNameInMessageCenter>
    <StringMappings>String</StringMappings>
  </AppSettings>
  <BillingSettings xmlns:d2p1="http://schemas.datacontract.org/2004/07/Voice.Api.Accounts">
    <d2p1:AIInsights>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:AIInsights>
    <d2p1:AILiveMinutes>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:AILiveMinutes>
    <d2p1:Base>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:Base>
    <d2p1:InboundFaxes>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:InboundFaxes>
    <d2p1:InboundSmsMessages>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:InboundSmsMessages>
    <d2p1:InboundVoiceCalls>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:InboundVoiceCalls>
    <d2p1:LocalNumbers>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:LocalNumbers>
    <d2p1:OutboundFaxes>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:OutboundFaxes>
    <d2p1:OutboundSmsMessages>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:OutboundSmsMessages>
    <d2p1:OutboundVoiceCalls>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:OutboundVoiceCalls>
    <d2p1:TollFreeNumbers>
      <d2p1:Allowance>0</d2p1:Allowance>
      <d2p1:BaseCost>0</d2p1:BaseCost>
      <d2p1:RawUnitMultiplier>0</d2p1:RawUnitMultiplier>
      <d2p1:UnitCost>0</d2p1:UnitCost>
    </d2p1:TollFreeNumbers>
  </BillingSettings>
  <Breadcrumb>
    <CustomerBreadcrumb>
      <Id>String</Id>
      <Name>String</Name>
    </CustomerBreadcrumb>
  </Breadcrumb>
  <Data xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
  <IntegrationData xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:KeyValueOfstringIntegrationDataY_SkqLnhh>
      <d2p1:Key>String</d2p1:Key>
      <d2p1:Value xmlns:d4p1="http://schemas.datacontract.org/2004/07/Voice.Api.Integrations">
        <d4p1:ThirdPartyId>String</d4p1:ThirdPartyId>
      </d2p1:Value>
    </d2p1:KeyValueOfstringIntegrationDataY_SkqLnhh>
  </IntegrationData>
  <IsStaging>false</IsStaging>
  <Name>String</Name>
  <OverrideAppSettings>false</OverrideAppSettings>
  <OverrideBillingSettings>false</OverrideBillingSettings>
  <ParentCustomerId>String</ParentCustomerId>
  <ReferenceId>String</ReferenceId>
  <Schedule xmlns:d2p1="http://schemas.datacontract.org/2004/07/Voice.Api.Scheduling">
    <d2p1:DefaultState>String</d2p1:DefaultState>
    <d2p1:ForceClosed>false</d2p1:ForceClosed>
    <d2p1:Inherit>false</d2p1:Inherit>
    <d2p1:Rules>
      <d2p1:SchedulingRule>
        <d2p1:ByDay>
          <d2p1:ScheduleDay>
            <d2p1:DayOfWeek>Sunday</d2p1:DayOfWeek>
            <d2p1:Offset>0</d2p1:Offset>
          </d2p1:ScheduleDay>
        </d2p1:ByDay>
        <d2p1:ByHour xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:ByHour>
        <d2p1:ByMinute xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:ByMinute>
        <d2p1:ByMonth xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:ByMonth>
        <d2p1:ByMonthDay xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:ByMonthDay>
        <d2p1:BySetPosition xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:BySetPosition>
        <d2p1:ByWeekNo xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:ByWeekNo>
        <d2p1:ByYearDay xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:int>0</d5p1:int>
        </d2p1:ByYearDay>
        <d2p1:Condition>String</d2p1:Condition>
        <d2p1:Count>0</d2p1:Count>
        <d2p1:CustomerState>String</d2p1:CustomerState>
        <d2p1:EndTime>String</d2p1:EndTime>
        <d2p1:FlowId>String</d2p1:FlowId>
        <d2p1:FlowParams xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
        <d2p1:Frequency>None</d2p1:Frequency>
        <d2p1:Id>String</d2p1:Id>
        <d2p1:Interval>0</d2p1:Interval>
        <d2p1:IsAllDay>false</d2p1:IsAllDay>
        <d2p1:Name>String</d2p1:Name>
        <d2p1:Priority>0</d2p1:Priority>
        <d2p1:SimpleRuleType>Always</d2p1:SimpleRuleType>
        <d2p1:Source>String</d2p1:Source>
        <d2p1:StartDate>String</d2p1:StartDate>
        <d2p1:StartTime>String</d2p1:StartTime>
        <d2p1:State>String</d2p1:State>
        <d2p1:UntilDate>String</d2p1:UntilDate>
      </d2p1:SchedulingRule>
    </d2p1:Rules>
    <d2p1:TimeZoneId>String</d2p1:TimeZoneId>
  </Schedule>
  <Tags xmlns:d2p1="http://schemas.datacontract.org/2004/07/Voice.Api.Settings">
    <d2p1:Tag>
      <d2p1:Color>Magenta</d2p1:Color>
      <d2p1:Id>String</d2p1:Id>
      <d2p1:Name>String</d2p1:Name>
    </d2p1:Tag>
  </Tags>
</CustomerInfo>