126 lines
4 KiB
QBasic
126 lines
4 KiB
QBasic
' New Session Event Handler
|
|
' This script is triggered when a new session starts with the bot
|
|
' It handles initial setup, user identification, and welcome messages
|
|
|
|
PARAM session_id AS STRING
|
|
PARAM user_id AS STRING
|
|
PARAM channel AS STRING
|
|
PARAM metadata AS OBJECT
|
|
|
|
' Initialize session context
|
|
SET session_context = {}
|
|
SET session_context.id = session_id
|
|
SET session_context.user_id = user_id
|
|
SET session_context.channel = channel
|
|
SET session_context.start_time = NOW()
|
|
SET session_context.metadata = metadata
|
|
|
|
' Check if user exists in CRM
|
|
user = FIND "contacts", "email", user_id
|
|
IF user IS NULL THEN
|
|
user = FIND "contacts", "phone", user_id
|
|
END IF
|
|
|
|
' Create activity record for new session
|
|
activity = {}
|
|
activity.type = "session_start"
|
|
activity.subject = "New " + channel + " session initiated"
|
|
activity.description = "User connected via " + channel + " at " + NOW()
|
|
activity.status = "open"
|
|
activity.assigned_to = GET "config", "default_agent"
|
|
|
|
IF user IS NOT NULL THEN
|
|
' Existing user found
|
|
activity.contact_id = user.id
|
|
activity.account_id = user.account_id
|
|
|
|
' Get user's recent interactions
|
|
recent_activities = FIND ALL "activities" WHERE contact_id = user.id ORDER BY created_at DESC LIMIT 5
|
|
|
|
' Check for open cases
|
|
open_cases = FIND ALL "cases" WHERE contact_id = user.id AND status != "closed"
|
|
|
|
' Set personalized greeting
|
|
IF open_cases.count > 0 THEN
|
|
greeting = "Welcome back, " + user.first_name + "! I see you have an open support case. Would you like to continue with that?"
|
|
SET session_context.has_open_case = TRUE
|
|
SET session_context.case_id = open_cases[0].id
|
|
ELSE IF recent_activities.count > 0 AND DAYS_BETWEEN(recent_activities[0].created_at, NOW()) < 7 THEN
|
|
greeting = "Hi " + user.first_name + "! Good to see you again. How can I help you today?"
|
|
ELSE
|
|
greeting = "Welcome back, " + user.first_name + "! It's been a while. How can I assist you today?"
|
|
END IF
|
|
|
|
' Update contact's last interaction
|
|
UPDATE "contacts", user.id, "last_interaction", NOW()
|
|
|
|
ELSE
|
|
' New user - create lead
|
|
lead = {}
|
|
lead.lead_source = channel
|
|
lead.lead_status = "new"
|
|
lead.notes = "Auto-created from " + channel + " session"
|
|
|
|
' Try to extract contact info from metadata
|
|
IF metadata.email IS NOT NULL THEN
|
|
lead.email = metadata.email
|
|
END IF
|
|
|
|
IF metadata.phone IS NOT NULL THEN
|
|
lead.phone = metadata.phone
|
|
END IF
|
|
|
|
IF metadata.name IS NOT NULL THEN
|
|
lead.contact_name = metadata.name
|
|
END IF
|
|
|
|
' Save lead
|
|
lead_id = SAVE "leads", lead
|
|
activity.lead_id = lead_id
|
|
|
|
SET session_context.is_new_lead = TRUE
|
|
SET session_context.lead_id = lead_id
|
|
|
|
greeting = "Hello! Welcome to our service. I'm here to help you. May I have your name to better assist you?"
|
|
END IF
|
|
|
|
' Save activity
|
|
SAVE "activities", activity
|
|
|
|
' Store session context
|
|
CACHE SET "session:" + session_id, session_context, 3600
|
|
|
|
' Send greeting
|
|
SEND MESSAGE greeting
|
|
|
|
' Check business hours
|
|
business_hours = GET "config", "business_hours"
|
|
current_hour = HOUR(NOW())
|
|
|
|
IF current_hour < business_hours.start OR current_hour > business_hours.end THEN
|
|
SEND MESSAGE "Please note that our business hours are " + business_hours.start + " to " + business_hours.end + ". You can still leave a message and we'll get back to you as soon as possible."
|
|
END IF
|
|
|
|
' Set up session monitoring
|
|
SCHEDULE IN 300 SECONDS DO
|
|
' Check if session is still active after 5 minutes
|
|
IF IS_ACTIVE(session_id) THEN
|
|
' Session still active, check if user needs help
|
|
last_message_time = GET_LAST_MESSAGE_TIME(session_id)
|
|
IF SECONDS_BETWEEN(last_message_time, NOW()) > 180 THEN
|
|
SEND MESSAGE "I'm still here if you need any assistance. Just let me know how I can help!"
|
|
END IF
|
|
END IF
|
|
END SCHEDULE
|
|
|
|
' Log session start for analytics
|
|
LOG "session_start", {
|
|
"session_id": session_id,
|
|
"user_id": user_id,
|
|
"channel": channel,
|
|
"user_type": user IS NOT NULL ? "existing" : "new",
|
|
"timestamp": NOW()
|
|
}
|
|
|
|
' Return session context
|
|
RETURN session_context
|