Order Data Sync
Pulls customer orders and shipping status from Shopify on a schedule so the bot always has current tracking data to reference.
Build a chat widget that lives on the storefront and retrieves order history and product details from Shopify in real time. When a customer asks "where's my order," the bot pulls that data, generates an answer, and logs the conversation. Route unresolved or complex inquiries to the support team via tags and Klaviyo events. Keep agent handoff clean and contextual.
Pulls customer orders and shipping status from Shopify on a schedule so the bot always has current tracking data to reference.
A chat widget on the storefront that listens for customer messages, retrieves matching orders and products, and generates answers without routing to an agent.
{% comment %}
Minimal chatbot embed snippet for storefront.
Paste into theme/snippets/support-chatbot.liquid and render it in your theme.
{% endcomment %}
<div id="support-chatbot-root" data-shop="{{ shop.permanent_domain }}" data-customer-id="{{ customer.id | default: 'anon' }}"></div>
<style>
#support-chatbot-root {
position: fixed;
bottom: 20px;
right: 20px;
width: 380px;
max-height: 600px;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
z-index: 999;
}
</style>
<script src="https://your-app-domain.com/chatbot.js" defer></script>
When a chat ends, send the summary and customer details to Klaviyo so support context is visible in one place.
Trigger: Chatbot conversation marked as resolved (webhook from your app)
Condition: If escalation_flag = true, skip; otherwise proceed
Then:
1. Call Shopify Flow HTTP action to POST to Klaviyo
2. Send payload:
- customer email
- conversation summary
- products mentioned (SKUs)
- order numbers referenced
- timestamp
3. Klaviyo receives event 'support_chat_resolved'
4. Your team sees message in Klaviyo customer profile
When the bot cannot answer a question, tag the conversation and route it to your support team in Shopify or email for review.
# Admin GraphQL
mutation TagCustomerForSupport($customerId: ID!, $tags: [String!]!) {
customerUpdate(input: { id: $customerId, tags: $tags }) {
customer {
id
email
tags
}
userErrors {
field
message
}
}
}
query FetchEscalatedCustomers($query: String!) {
customers(first: 50, query: $query) {
edges {
node {
id
email
firstName
lastName
orders(first: 5) {
edges {
node {
id
name
}
}
}
}
}
}
}
Sketch your build in 30 seconds — voice, type, or attach a screenshot.
Sketch the build →