Spaces:
Sleeping
Sleeping
File size: 10,260 Bytes
59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 a95c8d9 59533fa 29f6ac5 a95c8d9 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 a95c8d9 29f6ac5 59533fa 29f6ac5 a95c8d9 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 a95c8d9 29f6ac5 a95c8d9 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 59533fa 29f6ac5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
import streamlit as st
import re
import random
# Page configuration
st.set_page_config(
page_title="Customer Support Assistant",
page_icon="💬",
layout="centered"
)
# Customer support context
SYSTEM_INFO = """
This is a customer support assistant that helps with common inquiries about products, services,
policies, and general information. It provides accurate and helpful responses to assist customers.
"""
# Sample company information and policies
COMPANY_INFO = {
"return_policy": "Our return policy allows returns within 30 days of purchase with original receipt. Items must be unused and in original packaging.",
"tracking_order": "You can track your order by logging into your account or using the tracking number provided in your confirmation email.",
"account_issues": "For account login issues, try resetting your password. If problems persist, please provide your email address so we can investigate.",
"subscription": "Yes, you can cancel your subscription at any time through your account settings. There are no cancellation fees.",
"support_hours": "Our customer support team is available 24/7 via this chat. For phone support, our hours are 9 AM - 8 PM Monday through Friday, and 10 AM - 6 PM on weekends.",
"contact": "For complex issues, you can reach our human support team at support@example.com or call 1-800-123-4567.",
"shipping": "Standard shipping takes 3-5 business days. Express shipping takes 1-2 business days. International shipping may take 7-14 business days.",
"payment": "We accept all major credit cards, PayPal, and Apple Pay. Payment information is securely processed and encrypted.",
"refund": "Refunds are processed within 5-7 business days of receiving your returned item. The refund will be issued to the original payment method.",
"warranty": "Our products come with a standard 1-year warranty that covers manufacturing defects. Extended warranties are available for purchase."
}
# Response templates with variations for more natural conversation
RESPONSE_TEMPLATES = {
"greeting": [
"Hello! Welcome to our customer support. How can I assist you today?",
"Hi there! I'm here to help with any questions you might have. What can I do for you?",
"Welcome! How may I assist you with our products or services today?"
],
"thanks": [
"You're welcome! Is there anything else I can help you with?",
"Happy to help! Do you have any other questions I can assist with?",
"My pleasure! Is there something else you'd like to know?"
],
"goodbye": [
"Thank you for contacting our support. Have a great day!",
"I appreciate your time today. If you need anything else, don't hesitate to reach out!",
"Thanks for chatting with us. Feel free to return if you have any other questions!"
],
"unclear": [
"I'm not sure I understand your question. Could you please provide more details?",
"I'd like to help, but I need a bit more information. Could you clarify what you're asking about?",
"I'm sorry, but I don't have enough information to answer that. Could you be more specific?"
],
"human": [
f"I understand you'd like to speak with a human representative. {COMPANY_INFO['contact']}",
f"For more complex issues, our human support team is available. {COMPANY_INFO['contact']}",
f"I'd be happy to connect you with one of our human agents. {COMPANY_INFO['contact']}"
]
}
# Patterns for matching different types of queries
PATTERNS = {
"greeting": r"\b(hi|hello|hey|good morning|good afternoon|good evening)\b",
"thanks": r"\b(thanks|thank you|appreciate it)\b",
"goodbye": r"\b(bye|goodbye|see you|farewell)\b",
"return_policy": r"\b(return|return policy|send back|give back|exchange|bring back|refund policy)\b",
"tracking": r"\b(track|track order|tracking|shipping status|where is|delivery status|package|when.*arrive|where.*order)\b",
"account": r"\b(account|log in|login|sign in|password|forgot password|reset password|username|can\'?t log in|trouble logging in)\b",
"subscription": r"\b(subscription|cancel|cancellation|unsubscribe|stop.*subscription|end.*subscription|pause)\b",
"hours": r"\b(hours|time|availability|when are you|schedule|open|closed|available|support hours|customer service hours)\b",
"human": r"\b(human|person|agent|representative|speak to someone|talk to someone|real person|live agent|customer service rep)\b",
"shipping": r"\b(shipping|delivery|ship|deliver|how long|how soon|when will it arrive|shipping time|delivery time|express shipping)\b",
"payment": r"\b(payment|pay|credit card|debit card|paypal|apple pay|billing|payment method|transaction|purchase|buying)\b",
"refund": r"\b(refund|money back|reimburse|reimbursement|get.*money back|return.*money|credit back|refund process)\b",
"warranty": r"\b(warranty|guarantee|broken|defective|repair|fix|not working|doesn\'?t work|stopped working|damaged|replacement)\b"
}
def get_response(user_input):
"""Generate a response based on the user's input"""
if not user_input or user_input.strip() == "":
return "Hello! How can I help you today? Feel free to ask about our return policy, shipping, account help, or any other questions."
# Convert input to lowercase for easier matching
input_lower = user_input.lower()
# Check for greetings, thanks, or goodbyes first
if re.search(PATTERNS["greeting"], input_lower):
return random.choice(RESPONSE_TEMPLATES["greeting"])
if re.search(PATTERNS["thanks"], input_lower):
return random.choice(RESPONSE_TEMPLATES["thanks"])
if re.search(PATTERNS["goodbye"], input_lower):
return random.choice(RESPONSE_TEMPLATES["goodbye"])
# Store all matching responses and pick the most relevant
matched_responses = []
# Check for specific product/policy queries
if re.search(PATTERNS["return_policy"], input_lower):
matched_responses.append(f"Here's our return policy: {COMPANY_INFO['return_policy']}")
if re.search(PATTERNS["tracking"], input_lower):
matched_responses.append(f"To track your order: {COMPANY_INFO['tracking_order']}")
if re.search(PATTERNS["account"], input_lower):
matched_responses.append(f"For account-related issues: {COMPANY_INFO['account_issues']}")
if re.search(PATTERNS["subscription"], input_lower):
matched_responses.append(f"Regarding subscriptions: {COMPANY_INFO['subscription']}")
if re.search(PATTERNS["hours"], input_lower):
matched_responses.append(f"Our support hours are: {COMPANY_INFO['support_hours']}")
if re.search(PATTERNS["shipping"], input_lower):
matched_responses.append(f"Shipping information: {COMPANY_INFO['shipping']}")
if re.search(PATTERNS["payment"], input_lower):
matched_responses.append(f"Payment methods: {COMPANY_INFO['payment']}")
if re.search(PATTERNS["refund"], input_lower):
matched_responses.append(f"Our refund process: {COMPANY_INFO['refund']}")
if re.search(PATTERNS["warranty"], input_lower):
matched_responses.append(f"Warranty information: {COMPANY_INFO['warranty']}")
if re.search(PATTERNS["human"], input_lower):
matched_responses.append(random.choice(RESPONSE_TEMPLATES["human"]))
# Return a matched response if any were found
if matched_responses:
return matched_responses[0]
# Try broader keyword matching if no specific pattern matched
for key, info in COMPANY_INFO.items():
keywords = key.replace("_", " ").split()
for word in keywords:
if word in input_lower and len(word) > 3: # Only match significant words
return f"Regarding {key.replace('_', ' ')}: {info}"
# Check if asking a general question
if any(q in input_lower for q in ["what", "how", "when", "where", "why", "who", "can", "do", "is", "are"]):
general_response = "Based on your question, you might be interested in one of these topics:\n"
general_response += "• Return policy\n• Order tracking\n• Account issues\n• Subscriptions\n"
general_response += "• Support hours\n• Shipping information\n• Payment methods\n• Refunds\n• Warranty"
return general_response
# If no specific pattern is matched, respond with a general answer or ask for clarification
return random.choice(RESPONSE_TEMPLATES["unclear"])
# App title and intro
st.title("Customer Support Assistant")
st.markdown("Welcome to our customer support chat! How can I help you today?")
# Initialize session state for chat history
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
# Sidebar with information and options
with st.sidebar:
st.title("Customer Support")
st.markdown("### About")
st.info(SYSTEM_INFO)
if st.button("Clear Conversation"):
st.session_state.chat_history = []
st.rerun()
# Company info quick links
st.markdown("---")
st.markdown("### Quick Information")
if st.button("Return Policy"):
st.info(COMPANY_INFO["return_policy"])
if st.button("Shipping Info"):
st.info(COMPANY_INFO["shipping"])
if st.button("Support Hours"):
st.info(COMPANY_INFO["support_hours"])
if st.button("Contact Information"):
st.info(COMPANY_INFO["contact"])
# Display chat history
for user_msg, bot_msg in st.session_state.chat_history:
with st.chat_message("user"):
st.write(user_msg)
with st.chat_message("assistant", avatar="🧑💼"):
st.write(bot_msg)
# Input for new message
user_input = st.chat_input("Type your message here...")
if user_input:
# Display user message
with st.chat_message("user"):
st.write(user_input)
# Get bot response
with st.chat_message("assistant", avatar="🧑💼"):
with st.spinner("Thinking..."):
bot_response = get_response(user_input)
st.write(bot_response)
# Add to chat history
st.session_state.chat_history.append((user_input, bot_response)) |