arabica.checkout_order
ChatGPTREQUIRED STEP before placing an order. Shows a structured "Order Summary" for final confirmation. This is HITL: the order is NOT submitted here. Tell the user to click Place Order in the widget. STRICT ID RULE: NEVER invent, guess, or fabricate IDs (storeId, itemId, choiceId). All IDs MUST come directly from a previous tool's output. If you do not have a real storeId, you MUST call arabica.search_stores first. If you do not have real item IDs, you MUST call arabica.get_store_menu with showFullMenu=true first. Do NOT call this tool if an order has already been successfully created (i.e., if you have an order ID). Use arabica.get_order_status for tracking instead. VEHICLE RULE: Only applies when the user has explicitly chosen "car pickup". If pickupMethod is "car pickup" and vehicleNo is not already known, you MUST call arabica.get_user_vehicles immediately — NEVER ask the user for their plate number directly. The tool returns saved plates with the most recently added one pre-selected by default. Show the widget and ask the user to confirm the selected plate or choose a different one. Only ask for a new plate number if arabica.get_user_vehicles returns an empty list. For walk-in orders, never mention or ask about vehicle plates. If required non-vehicle information is missing, ask the customer for clarification. STORE CHANGE RULE: When the user switches to a different store (e.g. "change to X store", "order from Y instead"), AUTOMATICALLY rebuild the checkout without asking for confirmation or narrating steps. Execute silently: (1) call arabica.search_stores or arabica.search_city if you need the new storeId, (2) call arabica.get_store_menu with showFullMenu=true on the new store, (3) match each previous cart item to the closest item in the new menu by name, (4) call checkout_order immediately with the new storeId and resolved IDs, preserving all other details (quantities, customizations, pickup method, payment, ETA, vehicleNo). Do NOT ask "Should I proceed?", "Shall I rebuild?", or any similar confirmation. The ONLY time you may pause and ask the user is when a specific item from the previous order cannot be found at all in the new store's menu — in that case, list only the unavailable items and ask what to do for those items only. For all available items, proceed automatically. CRITICAL UI RULE: Do NOT narrate or list the order items or customizations in your chat response. The widget displays the full cart. Use wording like "Please review the checkout summary and click Place Order." Never say "order is ready", "order confirmed", or any success wording before placement.
arabica.create_order
ChatGPTFINAL STEP to submit the order to the coffee shop API. Call this ONLY after the user has reviewed the order via checkout_order and explicitly confirmed. Triggers the actual transaction.
arabica.get_eta_options
ChatGPTUse this when you need to show the expected arrival time options (e.g., "Now", "10 min") to the user. Do not use for store searching or menu browsing. Always present options as a numbered list (1, 2, 3...) so users can choose by number. After ETA selection: for car pickup, run get_user_vehicles if vehicleNo is not already known; otherwise continue to checkout_order.
arabica.get_item_details
ChatGPTUse this to get the full profile of a specific item, INCLUDING its customization schema (Size, Milk, etc.). For any user request asking to see a photo/image/picture of an item, this is the REQUIRED tool to call (including when storeId/itemId are already known). Do not provide raw image URLs in chat. Always present customization options as a numbered list (1, 2, 3...) so users can choose by number.
arabica.get_item_option_sections
ChatGPTUse this when you need to retrieve the available customization categories (e.g., "Size", "Milk", "Toppings") for a specific item. Do not use if you already have the section ID and want to see specific choices. Always present options as a numbered list (1, 2, 3...) so users can choose by number.
arabica.get_item_options
ChatGPTUse this when you need a high-level overview of customization sections for an item. Do not use for the detailed sequential customization flow. Always present these options as a numbered list (1, 2, 3...) to make it easy for users to choose by number.
arabica.get_item_section_options
ChatGPTUse this when you need to retrieve the specific choices (e.g., "Whole Milk", "Oat Milk") within a customization category. Do not use if the user has not selected a category yet. Always present these options as a numbered list (1, 2, 3...) to make it easy for users to choose by number.
arabica.get_order_status
ChatGPTMANDATORY ACTION after order creation OR to track status. Displays the final order status receipt. Do NOT call checkout_order if you already have an order ID.
arabica.get_payment_methods
ChatGPTUse this when you need to show the available payment options (e.g., "Card on Arrival", "Cash") for a specific store. Do not use for arrival time/ETA selection. Always present options as a numbered list (1, 2, 3...) so users can choose by number.
arabica.get_pickup_methods
ChatGPTUse this when you need to show the available pickup options (e.g., "Walk-in", "Car Pickup") for a specific store. Do not use for payment selection. Always present options as a numbered list (1, 2, 3...) so users can choose by number.
arabica.get_stores_in_city
ChatGPTUse this when you need to list all coffee stores in a specific city, including status labels like (Closed) and (Busy). Do not use if you already have the store details the user is looking for. Always present these options as a numbered list (1, 2, 3...) to make it easy for users to choose by number. This tool fetches live store status by default; set forceRefresh=false only if you explicitly want cached results. The result also includes store timing data (todayStoreTiming and storeTiming) for timing-related questions.
arabica.get_user_account
ChatGPTUse this to retrieve the authenticated user’s account details (name, email, phone, loyalty points, credit balance). If the user is not connected, this tool will trigger account connection via OAuth.
arabica.get_user_order_history
ChatGPTUse this to retrieve the authenticated user’s recent orders. Optional storeId: when omitted, the tool uses the current store from private session context; if unavailable, it falls back to 0 (all stores). Always present results as a numbered list (1, 2, 3...).
arabica.get_user_vehicles
ChatGPTVehicle plate lookup — for car pickup ONLY. Do NOT call this tool unless the user has explicitly chosen "car pickup" as their pickup method. Never call for walk-in orders. When called with no query/selectVehicleId, returns saved plates with the most recently added one pre-selected by default. Show the widget and ask the user to confirm the pre-selected plate or choose another. Only ask for a new plate number if the returned list is empty. Supports selection via vehicle ID or natural query (number/index/plate text, e.g., "2", "ABCD", "same as yesterday").
arabica.iam_here
ChatGPTMarks customer as arrived at store pickup point. Widget-only action from order status.
arabica.list_cities
ChatGPTUse this ONLY when the user explicitly asks to browse/list cities. Do not call this just because store details are missing. If store/city is missing, ask the user to specify the store first. Never assume a city (for example, do not default to Dubai).
arabica.save_item_selections
ChatGPTSave selected customization options for an item so the server can reuse them during checkout if the client fails to pass selections.
arabica.search_city
ChatGPTUse this when you need to find a city by its name using fuzzy search. Do not use for browsing; use arabica.list_cities instead. Only use this when the user explicitly mentioned a city text. If no city is provided, do not guess one; ask the user to provide city/store details. Always present store results as a numbered list (1, 2, 3...) so users can choose by number. This tool fetches live store status by default; set forceRefresh=false only if you explicitly want cached results. The result includes timing data (todayStoreTiming and storeTiming) for timing-related questions.
arabica.search_stores
ChatGPTUse this when you need to find specific coffee stores by name or part of their name across all cities. Do not use if the user is already browsing a specific city. Only use this when the user provided a store/city term to search. If location is missing, do not invent a query and do not assume a city; ask the user to specify a store/city. Do not auto-call arabica.list_cities. Always present store results as a numbered list (1, 2, 3...) so users can choose by number. This tool fetches live store status by default; set forceRefresh=false only if you explicitly want cached results. For timing/opening-hours questions, use the returned todayStoreTiming and storeTiming fields to answer directly.
arabica.show_noon_payment
ChatGPTShows the Noon Payments checkout widget after an online payment order is created. Called automatically by the checkout widget when paymentMethod is "online".