Skip to content

Instantly share code, notes, and snippets.

@Akurganow
Created March 10, 2020 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Akurganow/26180d8405bfe3103cc47532b93583c1 to your computer and use it in GitHub Desktop.
Save Akurganow/26180d8405bfe3103cc47532b93583c1 to your computer and use it in GitHub Desktop.
export type RuleId = number;
export type RuleStatus = 'Active' | 'Inactive';
export type RulePASType = 'BusinessHours' | 'AfterHours' | 'Custom';
export type RuleType = 'BusinessHours' | 'MailboxDefault' | 'Custom';
type GreetingType = 'Voicemail' | 'Introductory' | 'ConnectingAudio' | 'ConnectingMessage' | 'HoldMusic';
type PASAction =
| 'ForwardCalls'
| 'UnconditionalForwarding'
| 'AgentQueue'
| 'TransferToExtension'
| 'TakeMessagesOnly'
| 'PlayAnnouncementOnly'
| 'SharedLines';
type JEDIAction =
| 'Announcement'
| 'Forward'
| 'RingMe'
| 'AgentQueue'
| 'SharedLinesGroup'
| 'ConnectToExtension'
| 'TakeMessages';
type WeekdayKeys = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
type Weekday = 'Monday' | 'Tuesday' | 'Wednesday' | 'Thursday' | 'Friday' | 'Saturday' | 'Sunday';
type IntervalType = 'BusinessHours24' | 'AfterHours';
interface IntervalTimeRanges {
from: string;
to: string;
}
interface IntervalSchedule {
weeklyRanges: {[k in WeekdayKeys]: IntervalTimeRanges[]};
}
interface HoursInterval {
startDate: number | null;
endDate: number | null;
startTime: number;
startDay: Weekday;
endTime: number;
endDay: Weekday;
startDateMilliseconds: number;
endDateMilliseconds: number;
}
export interface RuleCompactPAS {
id: RuleId;
name: string;
type: RulePASType;
enabled: boolean;
}
export interface RuleCompact {
id: RuleId;
name: string;
type: RuleType;
status: RuleStatus;
intervalType: string;
}
interface RulePhone {
orderBy: number;
skipFindMeMenu: boolean;
askPIN: boolean;
playMailboxName: boolean;
phoneId: number;
forwardPhoneId: number;
phoneLineId: number;
ringCycle: number;
ringDelay: number;
addDigitsToCallerId: null;
digitsForCallerId: string;
phoneNumberInfo: {
number: string;
formattedNumber: string;
name: string;
alternate: boolean;
details: null;
internationalCanonical: string;
};
type: string;
mailboxId: MailboxIdentifier;
firstName: string;
lastName: string;
pin: string;
enabled: boolean;
forwarding: boolean;
deviceExists: boolean;
deviceType: number;
ownedByThisMailbox: boolean;
editable: boolean;
isCommonPhone: boolean;
originalMailboxId: MailboxIdentifier;
originalUserName: string;
originalPin: string;
phoneLineType: number;
voiceOnly: boolean;
}
interface RuleCaller {
number: string;
formattedNumber: string;
name: string;
}
interface RuleCalledNumber {
number: string;
areaCode: string;
formattedNumber: string;
mainNumber: boolean;
autoReceptionist: boolean;
extensionName: string;
extensionPIN: string;
paymentType: string | null;
phoneLabel: string;
}
export interface RulePAS {
id: RuleId;
type: RulePASType;
name: string;
enabled: boolean;
schedule?: IntervalSchedule & {
ranges: IntervalTimeRanges[];
ref: 'BusinessHours' | 'AfterHours';
};
greetings?: [
{
type: GreetingType;
preset: {
uri: string;
id: string;
name: string;
};
},
];
calledNumbers?: {phoneNumber: string}[];
callers?: {callerId: string; name: string}[];
callHandlingAction: PASAction;
queue?: {
transferMode: 'Rotating' | 'Simultaneous' | 'FixedOrder';
fixedOrderAgents: [];
holdAudioInterruptionMode: 'Never' | 'WhenMusicEnds' | 'Periodically';
holdAudioInterruptionPeriod: number;
holdTimeExpirationAction: 'TransferToExtension' | 'Voicemail';
agentTimeout: number;
wrapUpTime: number;
holdTime: number;
maxCallers: number;
maxCallersAction: 'Voicemail' | 'Announcement';
};
unconditionalForwarding?: {phoneNumber: string};
forwarding?: {
notifyMySoftPhones: boolean;
notifyAdminSoftPhones: boolean;
softPhonesRingCount: number;
mobileTimeout: boolean;
ringingMode: 'Sequentially' | 'Simultaneously';
rules: [
{
index: number;
ringCount: number;
forwardingNumbers: {
uri: string;
id: string;
phoneNumber: string;
label: string;
type: string;
}[];
},
];
};
voicemail?: {
enabled: boolean;
recipient: {
uri: string;
id: number;
};
};
transfer?: {};
screening: 'Off' | 'NoCallerId' | 'UnknownCallerId' | 'Always';
}
export interface Rule {
id: RuleId;
ruleName: string;
status: RuleStatus;
ruleType: RuleType;
answering: JEDIAction;
readPhoneOrder: 'Simultaneously' | 'Sequentially';
// Done
callers: RuleCaller[];
calledNumbers: RuleCalledNumber[];
interval: {type: IntervalType; level: string; intervals: HoursInterval[]};
phones: RulePhone[];
oldPhones: RulePhone[];
receiveSetting: 'Enabled' | 'Disabled';
callerPrompt: string;
notifyDefault: boolean;
agentNotify: string;
ringDelay: number;
toMailboxId: MailboxIdentifier;
toMailboxPin: string;
toMailboxName: string;
toMailboxType: number | null;
blaMailboxId: MailboxIdentifier;
blaMailboxPin: string;
blaMailboxName: string;
masterMenuAction: null;
isMaster: boolean;
interruptSeconds: number;
ringToPhone: string;
agentWaitTime: number;
limitAgentWait: boolean;
enableWrapUp: boolean;
wrapUpTime: number;
maxCallers: number;
maxCallersVM: number;
qoHoldTimeReached: null;
agents: [];
qoMailboxId: MailboxIdentifier;
qoMailboxPin: string;
qoMailboxName: string;
busyStatus: null;
qoBusyMailboxId: MailboxIdentifier;
qoBusyMailboxPin: string;
qoBusyMailboxName: string;
qoFullMailboxId: MailboxIdentifier;
qoFullMailboxPin: string;
qoFullMailboxName: string;
queueFullNumber: string;
waitTimeReachedNumber: string;
allMembersAreBusyNumber: string;
blaMailboxForwarding: number;
voiceMailTime: number;
voicemailGreetingPreset: string;
voicemailGreetingCustomId: number;
introductoryGreetingPreset: string;
introductoryGreetingCustomId: number;
mohGreetingPreset: string;
mohGreetingCustomId: number;
announcementGreetingPreset: string;
announcementGreetingCustomId: number;
unavailableGreetingPreset: string;
unavailableGreetingCustomId: number;
interruptPromptPreset: string;
interruptPromptCustomId: number;
connectPromptPreset: string;
connectPromptCustomId: number;
companyGreetingPreset: null;
companyGreetingCustomId: number;
templateId: number;
internetOutageInfo: {
enabled: boolean;
mailboxId: MailboxIdentifier;
phoneNumber: string;
destinationType: string;
errorsMask: number;
};
mobileTimeout: number;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment