feat: add caller connection and answer rate analytics

This commit is contained in:
hectorzhao
2026-08-31 17:21:20 +08:00
parent 8627228bbc
commit 5284d41f9a
29 changed files with 1284 additions and 0 deletions
+85
View File
@@ -960,6 +960,91 @@ model OutboxEvent {
@@map("outbox_events")
}
model CallerAnalysisCall {
id String @id @db.Char(64)
payload Json?
updatedAt DateTime @map("updated_at") @db.DateTime(3)
@@map("caller_analysis_calls")
}
model CallerAnalysisEvent {
id String @id @db.Char(64)
callKey String @map("call_key") @db.Char(64)
occurredAt DateTime @map("occurred_at") @db.DateTime(3)
payload Json
createdAt DateTime @map("created_at") @db.DateTime(3)
@@index([callKey, occurredAt], map: "caller_events_call")
@@index([createdAt], map: "caller_events_retention")
@@map("caller_analysis_events")
}
model CallerAnalysisState {
id String @id @db.Char(64)
callKey String @map("call_key") @db.Char(64)
view String @db.VarChar(16)
startedAt DateTime @map("started_at") @db.DateTime(3)
customerId String @map("customer_id") @db.VarChar(32)
customerGatewayId String @map("customer_gateway_id") @db.VarChar(32)
vendorId String @map("vendor_id") @db.VarChar(32)
vendorGatewayId String @map("vendor_gateway_id") @db.VarChar(32)
caller String @db.VarChar(64)
callee String @db.VarChar(64)
city String @db.VarChar(12)
carrier String @db.VarChar(20)
counts Json
payload Json
updatedAt DateTime @map("updated_at") @db.DateTime(3)
@@index([view, startedAt], map: "caller_states_window")
@@index([customerId, view, startedAt], map: "caller_states_customer")
@@index([view, caller, startedAt], map: "caller_states_number")
@@index([callKey], map: "caller_states_call")
@@map("caller_analysis_states")
}
model CallerAnalysisMinuteBucket {
id String @id @db.Char(64)
startedAt DateTime @map("started_at") @db.DateTime(3)
view String @db.VarChar(16)
customerId String @map("customer_id") @db.VarChar(32)
customerGatewayId String @map("customer_gateway_id") @db.VarChar(32)
vendorId String @map("vendor_id") @db.VarChar(32)
vendorGatewayId String @map("vendor_gateway_id") @db.VarChar(32)
caller String @db.VarChar(64)
city String @db.VarChar(12)
carrier String @db.VarChar(20)
counts Json
@@index([view, startedAt], map: "caller_buckets_window")
@@index([customerId, view, startedAt], map: "caller_buckets_customer")
@@index([view, caller, startedAt], map: "caller_buckets_number")
@@map("caller_analysis_minute_buckets")
}
model CallerAnalysisAccess {
userId String @map("user_id") @db.VarChar(32)
customerId String @map("customer_id") @db.VarChar(32)
@@id([userId, customerId])
@@map("caller_analysis_access")
}
model CallerAnalysisHealth {
id String @id @db.VarChar(64)
payload Json
updatedAt DateTime @map("updated_at") @db.DateTime(3)
@@map("caller_analysis_health")
}
model CallerAnalysisAlert {
id String @id @db.Char(64)
customerId String @map("customer_id") @db.VarChar(32)
view String @db.VarChar(16)
caller String @db.VarChar(64)
status String @db.VarChar(20)
payload Json
updatedAt DateTime @map("updated_at") @db.DateTime(3)
@@index([customerId, status, updatedAt], map: "caller_alerts_customer")
@@map("caller_analysis_alerts")
}
model IdempotencyKey {
id String @id @db.VarChar(40)
key String @unique @db.VarChar(128)