skills/customer-crm/live-chat-commerce/SKILL.md
Add real-time chat to your storefront using a platform-native app so agents can share product links, assist with cart questions, and close sales
npx skillsauth add finsilabs/awesome-ecommerce-skills live-chat-commerceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Live chat for e-commerce goes beyond basic support — agents can assist customers in finding products, adding items to their cart, and applying discount codes, directly reducing purchase hesitation. Shopify Inbox (free), Tidio, and Gorgias Chat provide this out of the box with commerce-specific features like cart visibility, product card sharing, and order status bot responses. Only build a custom chat system if your commerce-specific requirements (custom cart manipulation, proprietary bot logic, white-labeled experience) exceed what these tools offer.
| Platform | Recommended Tool | Why | |----------|-----------------|-----| | Shopify | Shopify Inbox (free) | Native Shopify tool; shows customer's cart, recent orders, and lets agents send product links with prices | | Shopify | Tidio | More advanced AI bot, integrations, and analytics than Inbox; supports product card sharing | | Shopify | Gorgias Chat | Best for teams already using Gorgias for support ticketing; unified inbox | | WooCommerce | Tidio or LiveChat | Both have WooCommerce plugins; show order history and cart contents to agents | | BigCommerce | Tidio or LiveChat | Available from BigCommerce App Marketplace | | Custom / Headless | Build with WebSocket server | Required when none of the above provide sufficient commerce API access |
Option A: Shopify Inbox (free, recommended starting point)
inbox.shopify.com or via the Shopify mobile appWhat agents see in every conversation:
Commerce features:
Setting up automated responses:
For order status bot:
/account/orders for registered customersSetting availability hours:
Tidio for WooCommerce (recommended):
Commerce features in Tidio:
Setting up order status bot:
LiveChat for WooCommerce:
Tidio from the App Marketplace:
LiveChat for BigCommerce:
For headless storefronts needing custom commerce chat actions:
// WebSocket server for real-time chat
import { WebSocketServer, WebSocket } from 'ws';
interface ChatClient {
ws: WebSocket;
type: 'customer' | 'agent';
sessionId: string;
customerId?: string;
conversationId?: string;
}
const clients = new Map<string, ChatClient>();
const wss = new WebSocketServer({ noServer: true });
wss.on('connection', async (ws, req, context: { type: 'customer' | 'agent'; sessionId: string }) => {
const socketId = crypto.randomUUID();
clients.set(socketId, { ws, ...context });
ws.on('message', data => handleMessage(socketId, JSON.parse(data.toString())));
ws.on('close', () => clients.delete(socketId));
// Send recent history on connect
if (context.conversationId) {
const history = await db.chatMessages.findMany({ where: { conversationId: context.conversationId }, take: 50, orderBy: { createdAt: 'asc' } });
ws.send(JSON.stringify({ type: 'history', messages: history }));
}
});
// Expose cart state to agents — fetch on each message to stay current
export async function getConversationContext(conversationId: string) {
const conversation = await db.chatConversations.findUnique({ where: { id: conversationId }, include: { customer: true } });
const [cart, recentOrders] = await Promise.all([
db.carts.findFirst({ where: { customerId: conversation.customerId, status: 'active' }, include: { items: { include: { product: true } } } }),
db.orders.findMany({ where: { customerId: conversation.customerId }, orderBy: { createdAt: 'desc' }, take: 3 }),
]);
return {
customer: { name: conversation.customer?.firstName, segment: conversation.customer?.segment, lifetimeValue: conversation.customer?.totalSpentCents / 100 },
cart: { items: cart?.items ?? [], totalValue: cart?.items.reduce((sum, i) => sum + i.priceInCents * i.quantity, 0) / 100 ?? 0 },
recentOrders,
};
}
// Auto-respond to order status queries
async function handleOrderStatusQuery(conversationId: string, message: string, customerId?: string): Promise<boolean> {
const orderNumberMatch = message.match(/#?(\d{5,})/);
if (!orderNumberMatch && !/order|track/i.test(message)) return false;
const order = orderNumberMatch
? await db.orders.findFirst({ where: { orderNumber: orderNumberMatch[1], customerId } })
: customerId ? await db.orders.findFirst({ where: { customerId }, orderBy: { createdAt: 'desc' } }) : null;
if (!order) return false;
const statusMsg = `Your order #${order.orderNumber} is **${order.status}**.${order.shipments[0]?.trackingUrl ? ` [Track package](${order.shipments[0].trackingUrl})` : ''}`;
await db.chatMessages.create({ data: { conversationId, senderType: 'bot', type: 'text', payload: { body: statusMsg } } });
broadcastToConversation(conversationId, { type: 'bot_message', body: statusMsg });
return true;
}
Proactive chat triggers engage visitors at key moments before they leave — increasing conversion on high-intent pages.
Shopify Inbox: Go to Inbox → Manage → Proactive chat and set triggers based on time on page or cart value.
Tidio: Go to Automation → Triggers and create rules like:
Rule of thumb for proactive triggers:
Track these metrics monthly to evaluate chat ROI:
| Metric | How to Measure |
|--------|---------------|
| Chat-to-conversion rate | Orders where a chat occurred in the previous 24 hours / total conversations |
| Average response time | Reported in Tidio, Gorgias, or Inbox dashboards |
| Revenue attributed to chat | Tag orders with source: live_chat using UTM parameters or your platform's order tagging |
| CSAT score | Enable post-chat satisfaction surveys in your chat tool settings |
| Problem | Solution | |---------|----------| | Chat widget breaks on page navigation | Use a floating persistent widget; single-page app routing should not re-initialize the chat; Tidio and Gorgias handle this correctly | | Agent sees stale cart data | Refetch cart context on each message from the customer, not once at conversation start — carts change during the conversation | | Proactive chat triggers fire on every page | Limit triggers to 2–3 high-intent pages with a per-session cap (fire at most once per session) | | Chat transcript emailed with sensitive order data | Review what's included in transcript emails; remove payment details, partial card numbers, and internal notes before the email sends |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion