Create a Shopify order for a given product.
export default async function main(args) { const logs = []; // Extract input variables from args const { accessToken, shopDomain, customerId, variantId, quantity } = args.inputVars; logs.push(`Extracted inputs - customerId: ${customerId}, variantId: ${variantId}, quantity: ${quantity || 1}, accessToken: ${accessToken ? 'PROVIDED' : 'MISSING'}, shopDomain: ${shopDomain}`); // Validate that the required input variables are provided if (!accessToken || !shopDomain || !customerId || !variantId) { logs.push("Error: Missing required input variables: accessToken, shopDomain, customerId, or variantId"); return { next: { path: 'error' }, }; } // Define the endpoint URL const url = `https://${shopDomain}/admin/api/2024-01/orders.json`; logs.push(`URL: ${url}`); // Request payload for creating an order, ensuring that IDs and quantities are numbers const payload = { order: { line_items: [{ variant_id: Number(variantId), quantity: Number(quantity || 1) }], customer: { id: Number(customerId) } } }; // Configure the fetch request const config = { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Access-Token': accessToken, }, body: JSON.stringify(payload) }; try { // Make the API call logs.push(`Making API call to URL: ${url} with payload: ${JSON.stringify(payload)}`); const response = await fetch(url, config); // Check if the response status is OK if (!response.ok) { const errorMsg = await response.text; logs.push(`HTTP error! status: ${response.status}, message: ${errorMsg}`); throw new Error(`HTTP error! status: ${response.status}, message: ${errorMsg}`); } // Extract the JSON body from the response logs.push("Extracting JSON from the response"); const responseBody = await response.json; // Validate the responseBody structure as expected if (!responseBody || !responseBody.order || typeof responseBody.order !== 'object') { throw new Error("Invalid or missing response body from the API"); } // Extract required order details const order = responseBody.order; const orderId = order.id; const orderConfirmationNumber = order.confirmation_number || order.name; // Shopify uses 'name' as the order number const orderEmail = order.email; const orderCreatedAt = order.created_at; const orderCurrency = order.currency; const orderSubtotalPrice = order.subtotal_price; const orderStatusUrl = order.order_status_url; logs.push(`Order created: ID - ${orderId}, Confirmation Number - ${orderConfirmationNumber}`); // Create the success return object with extracted data return { outputVars: { Orderresponse: JSON.stringify(responseBody), orderId, orderConfirmationNumber, orderEmail, orderCreatedAt, orderCurrency, orderSubtotalPrice, orderStatusUrl }, next: { path: 'success' }, }; } catch (error) { logs.push(`Error: ${error.message}`); return { next: { path: 'error' }, }; }}
A straightforward yet highly efficient lead generation framework.
Download this template to build a complete support chatbot that answers FAQs, recommends products, captures user information, and more.
How to add an AI-generated summary of a customer's chat, along with the entire transcript to Zendesk tickets automatically, using Voiceflow.
Build and submit a Template to have it featured in the community.