“Do you have this in stock?” sounds like a conversation, but the answer is usually a sequence of lookups. Identify the customer and item, check the right location, account for existing commitments, inspect incoming supply, then translate the result into a promise the customer can understand. The interruption is expensive because it lands on sales or operations all day in small pieces.
This composite map covers email and phone enquiries in a distributor with more than one stocking location. It deliberately separates on-hand quantity from available-to-promise quantity. Showing a customer a number that has already been committed is a faster answer and a worse service.
The workflow as it usually runs
- 1A customer asks for a product using a description, old SKU or part number.
- 2A rep identifies the account and intended delivery location.
- 3They find the item in the ERP.
- 4They check stock across warehouses and existing allocations.
- 5If short, they inspect open purchase orders and supplier lead time.
- 6They search for a substitute or partial-shipment option.
- 7They write the answer and sometimes reserve stock manually.
The seven opportunities
1. Classify the request before interrupting someone
Detect stock and lead-time enquiries in the shared inbox and create a work item. Free-text classification is a sensible small AI step; it should not answer the question. The result is a visible queue that can be prioritized by customer and urgency instead of whichever message somebody opened first.
2. Resolve the product identity
Match explicit SKUs first, then customer-specific aliases, manufacturer numbers and purchase history. Use semantic matching only to suggest candidates when exact methods fail. An ambiguous product should reach a person with the likely matches, not trigger an invented availability answer.
3. Calculate available-to-promise, not merely on hand
Read inventory, reservations, open orders and location rules through the ERP. The calculation is deterministic and should use the same definition operations uses. If nobody agrees whether quarantine, transfers or safety stock count, settle that definition before exposing the answer.
4. Add incoming supply and a confidence level
Open purchase orders can support an expected date, but supplier dates vary in reliability. Separate confirmed availability from projected availability and show the source. A promised date should not be produced from a stale purchase order without making that uncertainty visible.
5. Suggest known substitutes and fulfilment options
Use approved substitute relationships, compatible products, alternate locations and partial shipments. This is primarily catalogue and fulfilment logic. A model may help rank options from product text, but commercial suitability and customer-specific restrictions remain explicit checks.
6. Draft the answer with its conditions
Populate the product, quantity, location, expected date and alternatives into a response. The draft must distinguish “available now,” “expected” and “can be transferred.” A person reviews high-value, ambiguous or unusual requests; clean lookups can be sent automatically after the wording is proven.
7. Turn interest into a reservation or quote
The answer should offer the next controlled action: reserve for a defined period, create a quote, or hand off to sales with the structured request attached. Otherwise the business answers quickly and still loses the context when the customer replies.
What we would build first
Start as an internal assistant, not an autonomous customer channel. Give staff one search that resolves aliases and shows available-to-promise, incoming supply and substitutes with sources. Measure answer time and correction rate. Only automate outbound replies for exact product matches and unambiguous availability.
The metric that matters
Do not optimize only response time. Track how often the answer is later corrected, because a fast promise based on the wrong stock definition creates more work than it removes.
Return to the seven distributor workflows and choose the next process to inspect.