Evo Voice

<back to all web services

GetCustomer

Get a specific customer

Requires Authentication
Requires any of the roles:SystemAdministrator, Manager, Customer
The following routes are available for this service:
GET/customers/{customerId}
import Foundation
import ServiceStack

/**
* Get a specific customer
*/
// @Api(Description="Get a specific customer")
public class GetCustomer : IGet, Codable
{
    /**
    * The ID of the customer you want to get
    */
    // @ApiMember(Description="The ID of the customer you want to get")
    public var customerId:String

    required public init(){}
}

public class CustomerInfo : EntityInfo
{
    /**
    * The ID of the account associated with this customer
    */
    // @ApiMember(Description="The ID of the account associated with this customer")
    public var accountId:String

    /**
    * The parent customer ID for this customer
    */
    // @ApiMember(Description="The parent customer ID for this customer")
    public var parentCustomerId:String

    /**
    * The breadcrumb to this customer
    */
    // @ApiMember(Description="The breadcrumb to this customer")
    public var breadcrumb:[CustomerBreadcrumb]

    /**
    * The name of the account associated with this customer
    */
    // @ApiMember(Description="The name of the account associated with this customer")
    public var accountName:String

    /**
    * Is this customer staging or production?
    */
    // @ApiMember(Description="Is this customer staging or production?")
    public var isStaging:Bool

    /**
    * The name of the company
    */
    // @ApiMember(Description="The name of the company")
    public var name:String

    /**
    * The reference ID for this company
    */
    // @ApiMember(Description="The reference ID for this company")
    public var referenceId:String

    /**
    * This customer's data values
    */
    // @ApiMember(Description="This customer's data values")
    public var data:Struct

    /**
    * The list of tags for this customer
    */
    // @ApiMember(Description="The list of tags for this customer")
    public var tags:[Tag]

    /**
    * This customer's schedule
    */
    // @ApiMember(Description="This customer's schedule")
    public var schedule:Schedule

    /**
    * Integration data for this customer
    */
    // @ApiMember(Description="Integration data for this customer")
    public var integrationData:EntityIntegrationData

    /**
    * Override this customer's billing settings? Otherwise inherits from parent
    */
    // @ApiMember(Description="Override this customer's billing settings? Otherwise inherits from parent")
    public var overrideBillingSettings:Bool

    /**
    * Billing settings for this customer
    */
    // @ApiMember(Description="Billing settings for this customer")
    public var billingSettings:BillingSettings

    /**
    * Should this customer override the parent customer's app settings
    */
    // @ApiMember(Description="Should this customer override the parent customer's app settings")
    public var overrideAppSettings:Bool

    /**
    * App / Portal settings for this customer
    */
    // @ApiMember(Description="App / Portal settings for this customer")
    public var appSettings:AppSettings

    /**
    * Is international dialing enabled? This setting will only take effect if the account has international dialing settings turned on
    */
    // @ApiMember(Description="Is international dialing enabled? This setting will only take effect if the account has international dialing settings turned on")
    public var enableInternationalDialing:Bool

    /**
    * The list of country codes (in addition to the account default) which will be enabled for this customer
    */
    // @ApiMember(Description="The list of country codes (in addition to the account default) which will be enabled for this customer")
    public var enabledInternationalCountryCodes:[String]

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case accountId
        case parentCustomerId
        case breadcrumb
        case accountName
        case isStaging
        case name
        case referenceId
        case data
        case tags
        case schedule
        case integrationData
        case overrideBillingSettings
        case billingSettings
        case overrideAppSettings
        case appSettings
        case enableInternationalDialing
        case enabledInternationalCountryCodes
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        accountId = try container.decodeIfPresent(String.self, forKey: .accountId)
        parentCustomerId = try container.decodeIfPresent(String.self, forKey: .parentCustomerId)
        breadcrumb = try container.decodeIfPresent([CustomerBreadcrumb].self, forKey: .breadcrumb) ?? []
        accountName = try container.decodeIfPresent(String.self, forKey: .accountName)
        isStaging = try container.decodeIfPresent(Bool.self, forKey: .isStaging)
        name = try container.decodeIfPresent(String.self, forKey: .name)
        referenceId = try container.decodeIfPresent(String.self, forKey: .referenceId)
        data = try container.decodeIfPresent(Struct.self, forKey: .data)
        tags = try container.decodeIfPresent([Tag].self, forKey: .tags) ?? []
        schedule = try container.decodeIfPresent(Schedule.self, forKey: .schedule)
        integrationData = try container.decodeIfPresent(EntityIntegrationData.self, forKey: .integrationData)
        overrideBillingSettings = try container.decodeIfPresent(Bool.self, forKey: .overrideBillingSettings)
        billingSettings = try container.decodeIfPresent(BillingSettings.self, forKey: .billingSettings)
        overrideAppSettings = try container.decodeIfPresent(Bool.self, forKey: .overrideAppSettings)
        appSettings = try container.decodeIfPresent(AppSettings.self, forKey: .appSettings)
        enableInternationalDialing = try container.decodeIfPresent(Bool.self, forKey: .enableInternationalDialing)
        enabledInternationalCountryCodes = try container.decodeIfPresent([String].self, forKey: .enabledInternationalCountryCodes) ?? []
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if accountId != nil { try container.encode(accountId, forKey: .accountId) }
        if parentCustomerId != nil { try container.encode(parentCustomerId, forKey: .parentCustomerId) }
        if breadcrumb != nil { try container.encode(breadcrumb, forKey: .breadcrumb) }
        if accountName != nil { try container.encode(accountName, forKey: .accountName) }
        if isStaging != nil { try container.encode(isStaging, forKey: .isStaging) }
        if name != nil { try container.encode(name, forKey: .name) }
        if referenceId != nil { try container.encode(referenceId, forKey: .referenceId) }
        if data != nil { try container.encode(data, forKey: .data) }
        if tags != nil { try container.encode(tags, forKey: .tags) }
        if schedule != nil { try container.encode(schedule, forKey: .schedule) }
        if integrationData != nil { try container.encode(integrationData, forKey: .integrationData) }
        if overrideBillingSettings != nil { try container.encode(overrideBillingSettings, forKey: .overrideBillingSettings) }
        if billingSettings != nil { try container.encode(billingSettings, forKey: .billingSettings) }
        if overrideAppSettings != nil { try container.encode(overrideAppSettings, forKey: .overrideAppSettings) }
        if appSettings != nil { try container.encode(appSettings, forKey: .appSettings) }
        if enableInternationalDialing != nil { try container.encode(enableInternationalDialing, forKey: .enableInternationalDialing) }
        if enabledInternationalCountryCodes != nil { try container.encode(enabledInternationalCountryCodes, forKey: .enabledInternationalCountryCodes) }
    }
}

public class EntityInfo : Codable
{
    /**
    * The ID of the object
    */
    // @ApiMember(Description="The ID of the object")
    public var id:String

    /**
    * The date the object was created
    */
    // @ApiMember(Description="The date the object was created")
    public var dateCreated:String

    /**
    * The date the object was last modified
    */
    // @ApiMember(Description="The date the object was last modified")
    public var dateLastModified:String

    /**
    * The user that created this object
    */
    // @ApiMember(Description="The user that created this object")
    public var createdBy:String

    /**
    * The user that last modified this object
    */
    // @ApiMember(Description="The user that last modified this object")
    public var lastModifiedBy:String

    required public init(){}
}

public class CustomerBreadcrumb : Codable
{
    public var id:String
    public var name:String

    required public init(){}
}

public class Struct : List<String:Value>
{
    required public init(){ super.init() }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
    }
}

public class Value : Codable
{
    public var boolValue:Bool?
    public var stringValue:String
    public var numberValue:Double?
    public var listValue:[Struct]
    public var structValue:Struct

    required public init(){}
}

public class Tag : Codable
{
    public var id:String
    public var name:String
    public var color:TagColors

    required public init(){}
}

public enum TagColors : String, Codable
{
    case Magenta
    case Red
    case Volcano
    case Orange
    case Gold
    case Lime
    case Green
    case Cyan
    case Blue
    case GeekBlue
    case Purple
}

public class Schedule : Codable
{
    public var timeZoneId:String
    public var inherit:Bool
    public var forceClosed:Bool
    public var rules:[SchedulingRule]
    public var defaultState:String

    required public init(){}
}

public class SchedulingRule : Codable
{
    public var id:String
    public var name:String
    public var priority:Int
    public var state:String
    public var source:String
    public var condition:String
    public var simpleRuleType:SimpleSchedulingRuleTypes
    public var customerState:String
    public var flowId:String
    public var flowParams:Struct
    public var isAllDay:Bool
    public var startDate:String
    public var startTime:String
    public var endTime:String
    public var bySetPosition:[Int]
    public var byMonth:[Int]
    public var byWeekNo:[Int]
    public var byYearDay:[Int]
    public var byMonthDay:[Int]
    public var byDay:[ScheduleDay]
    public var byHour:[Int]
    public var byMinute:[Int]
    public var interval:Int
    public var count:Int
    public var untilDate:String
    public var frequency:SchedulingRuleFrequency

    required public init(){}
}

public enum SimpleSchedulingRuleTypes : String, Codable
{
    case Always
    case CustomerState
    case Time
}

public class ScheduleDay : Codable
{
    public var offset:Int
    public var dayOfWeek:DayOfWeek

    required public init(){}
}

public enum SchedulingRuleFrequency : String, Codable
{
    case None
    case Secondly
    case Minutely
    case Hourly
    case Daily
    case Weekly
    case Monthly
    case Yearly
}

public class EntityIntegrationData : List<String:IntegrationData>
{
    required public init(){ super.init() }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
    }
}

public class IntegrationData : Codable
{
    public var thirdPartyId:String

    required public init(){}
}

public class BillingSettings : Codable
{
    public var base:BillingItem
    public var localNumbers:BillingItem
    public var tollFreeNumbers:BillingItem
    public var inboundVoiceCalls:BillingItem
    public var outboundVoiceCalls:BillingItem
    public var inboundFaxes:BillingItem
    public var outboundFaxes:BillingItem
    public var inboundSmsMessages:BillingItem
    public var outboundSmsMessages:BillingItem
    public var aiInsights:BillingItem
    public var aiLiveMinutes:BillingItem
    public var aiMessages:BillingItem
    public var aiTranscriptions:BillingItem

    required public init(){}
}

public class BillingItem : Codable
{
    public var baseCost:Double
    public var rawUnitMultiplier:Double
    public var unitCost:Double
    public var allowance:Int

    required public init(){}
}

public class AppSettings : Codable
{
    public var enablePhoneNumberManagement:Bool
    public var enableDeviceManagement:Bool
    public var enableDialer:Bool
    public var enableCallHistory:Bool
    public var enableAssistants:Bool
    public var showFileNameInMessageCenter:Bool
    public var chakraTheme:String
    public var customCss:String
    public var pageTitle:String
    public var stringMappings:String
    public var logoutUrl:String
    public var portMyNumberUrl:String

    required public init(){}
}


Swift GetCustomer DTOs

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

HTTP + JSV

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

GET /customers/{customerId} HTTP/1.1 
Host: team.evovoice.io 
Accept: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	accountId: String,
	parentCustomerId: String,
	breadcrumb: 
	[
		{
			id: String,
			name: String
		}
	],
	accountName: String,
	isStaging: False,
	name: String,
	referenceId: String,
	tags: 
	[
		{
			id: String,
			name: String,
			color: Magenta
		}
	],
	schedule: 
	{
		timeZoneId: String,
		inherit: False,
		forceClosed: False,
		rules: 
		[
			{
				id: String,
				name: String,
				priority: 0,
				state: String,
				source: String,
				condition: String,
				simpleRuleType: Always,
				customerState: String,
				flowId: String,
				isAllDay: False,
				startDate: String,
				startTime: String,
				endTime: String,
				bySetPosition: 
				[
					0
				],
				byMonth: 
				[
					0
				],
				byWeekNo: 
				[
					0
				],
				byYearDay: 
				[
					0
				],
				byMonthDay: 
				[
					0
				],
				byDay: 
				[
					{
						offset: 0,
						dayOfWeek: Sunday
					}
				],
				byHour: 
				[
					0
				],
				byMinute: 
				[
					0
				],
				interval: 0,
				count: 0,
				untilDate: String,
				frequency: None
			}
		],
		defaultState: String
	},
	integrationData: 
	{
		String: 
		{
			thirdPartyId: String
		}
	},
	overrideBillingSettings: False,
	billingSettings: 
	{
		base: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		localNumbers: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		tollFreeNumbers: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		inboundVoiceCalls: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		outboundVoiceCalls: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		inboundFaxes: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		outboundFaxes: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		inboundSmsMessages: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		outboundSmsMessages: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		aiInsights: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		aiLiveMinutes: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		aiMessages: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		},
		aiTranscriptions: 
		{
			baseCost: 0,
			rawUnitMultiplier: 0,
			unitCost: 0,
			allowance: 0
		}
	},
	overrideAppSettings: False,
	appSettings: 
	{
		enablePhoneNumberManagement: False,
		enableDeviceManagement: False,
		enableDialer: False,
		enableCallHistory: False,
		enableAssistants: False,
		showFileNameInMessageCenter: False,
		chakraTheme: String,
		customCss: String,
		pageTitle: String,
		stringMappings: String,
		logoutUrl: String,
		portMyNumberUrl: String
	},
	enableInternationalDialing: False,
	enabledInternationalCountryCodes: 
	[
		String
	],
	id: String,
	dateCreated: String,
	dateLastModified: String,
	createdBy: String,
	lastModifiedBy: String
}