Files
2026-07-13 13:34:48 +08:00

103 lines
3.2 KiB
TypeScript

import { z, IntegrationDefinitionProps } from '@botpress/sdk'
import { productSchema, customerSchema, orderSchema, pageInfoSchema } from './schemas'
export const actions = {
listProducts: {
title: 'List Products',
description: 'Search and list products from the Shopify Admin API',
input: {
schema: z.object({
query: z.string().optional().title('Search Query').describe('Search query to filter products'),
first: z
.number()
.min(1)
.max(250)
.default(50)
.optional()
.title('Limit')
.describe('Number of products to return'),
after: z.string().optional().title('After Cursor').describe('Cursor for pagination'),
}),
},
output: {
schema: z.object({
products: z.array(productSchema).title('Products').describe('List of products'),
pageInfo: pageInfoSchema.title('Page Info').describe('Pagination info'),
}),
},
},
getProduct: {
title: 'Get Product',
description: 'Get a single product with its variants from the Shopify Admin API',
input: {
schema: z.object({
productId: z
.string()
.title('Product ID')
.describe('The Shopify GID of the product (e.g. gid://shopify/Product/12345)'),
}),
},
output: {
schema: z.object({
product: productSchema.title('Product').describe('The product details'),
}),
},
},
searchCustomers: {
title: 'Search Customers',
description: 'Search for customers by email, name, or phone in the Shopify Admin API',
input: {
schema: z.object({
query: z.string().title('Search Query').describe('Search query (email, name, or phone)'),
}),
},
output: {
schema: z.object({
customers: z.array(customerSchema).title('Customers').describe('List of matching customers'),
}),
},
},
getOrder: {
title: 'Get Order',
description: 'Get full order details by ID from the Shopify Admin API',
input: {
schema: z.object({
orderId: z.string().title('Order ID').describe('The Shopify GID of the order (e.g. gid://shopify/Order/12345)'),
}),
},
output: {
schema: z.object({
order: orderSchema.title('Order').describe('The order details'),
}),
},
},
listCustomerOrders: {
title: 'List Customer Orders',
description: 'List orders for a specific customer, optionally filtered by status',
input: {
schema: z.object({
customerId: z
.string()
.title('Customer ID')
.describe('The Shopify GID of the customer (e.g. gid://shopify/Customer/12345)'),
status: z
.enum(['open', 'closed', 'cancelled', 'any'])
.default('any')
.optional()
.title('Status Filter')
.describe('Filter orders by status'),
first: z.number().min(1).max(250).default(50).optional().title('Limit').describe('Number of orders to return'),
}),
},
output: {
schema: z.object({
orders: z.array(orderSchema).title('Orders').describe('List of customer orders'),
}),
},
},
} satisfies IntegrationDefinitionProps['actions']