45 lines
1.2 KiB
QBasic
45 lines
1.2 KiB
QBasic
PARAM customer_id AS STRING
|
|
PARAM time_period AS INTEGER DEFAULT 30
|
|
|
|
# Gather customer communications
|
|
emails = CALL "/storage/json", ".gbdata/communication_logs",
|
|
"to = '${customer_id}' OR from = '${customer_id}' AND timestamp > NOW() - DAYS(${time_period})"
|
|
|
|
support_tickets = CALL "/crm/tickets/list", {
|
|
"customer_id": customer_id,
|
|
"created_after": NOW() - DAYS(time_period)
|
|
}
|
|
|
|
meeting_notes = CALL "/crm/meetings/list", {
|
|
"customer_id": customer_id,
|
|
"date_after": NOW() - DAYS(time_period)
|
|
}
|
|
|
|
# Combine all text for analysis
|
|
all_text = ""
|
|
FOR EACH email IN emails
|
|
all_text = all_text + email.subject + " " + email.body + " "
|
|
NEXT
|
|
|
|
FOR EACH ticket IN support_tickets
|
|
all_text = all_text + ticket.description + " " + ticket.resolution + " "
|
|
NEXT
|
|
|
|
FOR EACH meeting IN meeting_notes
|
|
all_text = all_text + meeting.notes + " "
|
|
NEXT
|
|
|
|
# Analyze sentiment
|
|
sentiment = CALL "/ai/analyze/text", all_text, "sentiment"
|
|
|
|
# Generate insights
|
|
insights = CALL "/ai/analyze/text", all_text, "key_topics"
|
|
|
|
RETURN {
|
|
"customer_id": customer_id,
|
|
"time_period": time_period + " days",
|
|
"sentiment_score": sentiment.score,
|
|
"sentiment_label": sentiment.label,
|
|
"key_topics": insights.topics,
|
|
"recommendations": insights.recommendations
|
|
}
|