@@ -0,0 +1,100 @@
|
||||
export type AutomationTriggerType = 'schedule' | 'event' | 'price'
|
||||
export type AutomationChannel = 'sms' | 'in_app'
|
||||
export type AutomationConditionCr = 'and' | 'or'
|
||||
|
||||
export interface AutomationCondition {
|
||||
cr?: AutomationConditionCr
|
||||
field: string
|
||||
op?: string | null
|
||||
value?: unknown
|
||||
}
|
||||
|
||||
export type AutomationAudienceMode = 'all' | 'filter'
|
||||
export type AutomationPriceWindow = 'calendar_day' | 'from_last'
|
||||
|
||||
export interface AutomationTriggerConfig {
|
||||
event?: string
|
||||
delay_hours?: number
|
||||
every_days?: number
|
||||
step_toman?: number | string | null
|
||||
direction?: 'up' | 'down' | 'both'
|
||||
product_id?: number | null
|
||||
price_window?: AutomationPriceWindow
|
||||
}
|
||||
|
||||
export interface Automation {
|
||||
id?: number
|
||||
name: string
|
||||
code?: string
|
||||
is_active: boolean
|
||||
starts_at?: string | null
|
||||
ends_at?: string | null
|
||||
sms_send_hour?: number | null
|
||||
in_app_send_hour?: number | null
|
||||
trigger_type: AutomationTriggerType
|
||||
trigger_config?: AutomationTriggerConfig
|
||||
audience_mode?: AutomationAudienceMode
|
||||
conditions?: AutomationCondition[]
|
||||
channels: AutomationChannel[]
|
||||
title: string
|
||||
body: string
|
||||
cooldown_hours?: number
|
||||
max_sends?: number | null
|
||||
sent_count?: number
|
||||
failed_count?: number
|
||||
}
|
||||
|
||||
export interface AutomationCatalogOption {
|
||||
key: string | number
|
||||
name: string
|
||||
}
|
||||
|
||||
export interface AutomationFieldInput {
|
||||
key: string
|
||||
type: 'number' | 'select' | 'operator'
|
||||
label: string
|
||||
options?: AutomationCatalogOption[]
|
||||
}
|
||||
|
||||
export interface AutomationField {
|
||||
key: string
|
||||
group: string
|
||||
name: string
|
||||
inputs: AutomationFieldInput[]
|
||||
}
|
||||
|
||||
export interface AutomationCatalog {
|
||||
triggers: AutomationCatalogOption[]
|
||||
events: AutomationCatalogOption[]
|
||||
channels: AutomationCatalogOption[]
|
||||
operators: AutomationCatalogOption[]
|
||||
fields: AutomationField[]
|
||||
products: Array<{ id: number; name: string }>
|
||||
hours: AutomationCatalogOption[]
|
||||
price_windows?: AutomationCatalogOption[]
|
||||
audience_modes?: AutomationCatalogOption[]
|
||||
}
|
||||
|
||||
export function emptyAutomation(): Automation {
|
||||
return {
|
||||
name: '',
|
||||
title: '',
|
||||
body: '',
|
||||
is_active: true,
|
||||
trigger_type: 'schedule',
|
||||
audience_mode: 'all',
|
||||
trigger_config: {
|
||||
delay_hours: 0,
|
||||
every_days: 1,
|
||||
direction: 'both',
|
||||
price_window: 'calendar_day',
|
||||
},
|
||||
conditions: [],
|
||||
channels: ['sms'],
|
||||
sms_send_hour: 10,
|
||||
in_app_send_hour: 10,
|
||||
cooldown_hours: 24,
|
||||
starts_at: null,
|
||||
ends_at: null,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user