I wanted to build an AI receptionist that could actually do something useful after talking to a customer.
Not just answer questions.
The flow I had in mind was simple.
A customer calls a real phone number, asks for a product, gets recommendations from the Shopify store, picks one, and receives the checkout link on WhatsApp.
That meant connecting a few systems together:
Twilio for the phone number
ElevenLabs for the voice agent
n8n for the workflows
Shopify for products and checkout
WhatsApp for sending the final link
The final system could answer a call, understand what the customer wanted, search Shopify, recommend products, create a checkout, and send it back to the caller.
Starting With the Voice Agent
I used ElevenLabs for the actual conversation.
The agent talks to the customer and figures out what they are looking for.
For example, someone might say they want flowers for an anniversary but don't know exactly what to buy.
Instead of loading the whole Shopify catalog into the prompt, I gave the agent tools.
When it needs products, it calls an n8n workflow.
That workflow talks to Shopify, gets the products, cleans up the data, and sends it back.
So the flow becomes:
Customer → ElevenLabs → n8n → Shopify
The agent now has real store data to work with.
This also means that if I change something in Shopify, I don't need to update the agent manually.
Product Selection
Once the agent has the products, it can talk through them with the customer.
This part stays conversational.
The customer does not need to know product IDs, variants, or anything technical.
They can just say something like:
"I like the red one."
The agent handles the messy part of understanding what they mean.
Eventually, I reduce that conversation down to something concrete.
A Shopify variant_id.
Now I don't need AI anymore for the next part.
I just need to create the checkout.
Creating the Checkout
I made another tool for this called:
send_checkout_to_customer
The agent sends the selected variant and the caller's phone number to n8n.
Then the workflow:
Creates a Shopify cart
Gets the checkout URL
Formats the customer's phone number
Sends the checkout through WhatsApp
The final WhatsApp node simply sends the generated checkout URL back to the customer.
So the customer starts on a phone call and finishes on WhatsApp.
I actually like that split.
Voice is good for talking through what you want.
WhatsApp is much better when I need to send you something clickable.
The Full Flow
The complete system ended up looking like this:
Customer calls
↓
AI answers and understands the request
↓
Agent checks Shopify
↓
Customer chooses a product
↓
Agent sends the variant to n8n
↓
Shopify creates the checkout
↓
WhatsApp sends the checkout link
There is no person sitting between those steps, copying product information or sending links manually. The system handles the movement between the call, Shopify, and WhatsApp.
The Part I Found Most Useful
The main thing I learned here was not really about voice AI.
It was about where I should use AI at all.
The customer might say:
"I need something nice for an anniversary. Maybe roses. Around $300."
That needs interpretation.
But once I know the exact Shopify variant, I don't need an LLM deciding what happens next.
Creating a cart is an API call.
Getting a checkout URL is an API call.
Sending a WhatsApp message is an API call.
So I kept the AI around the uncertain parts and used normal workflows for everything deterministic.
That made the whole system much easier to build and debug.
If the agent misunderstands the customer, I look at the prompt and conversation.
If Shopify fails, I look at the workflow.
If WhatsApp fails, I look at the messaging step.
Each problem stays in its own place.
Takeaway
This started as an AI receptionist, but the useful part was giving the receptionist access to real business tools.
Talking alone is not enough.
The agent becomes useful when the conversation can actually lead somewhere.
In this case:
Call → Product → Checkout
I understood that I don't need AI everywhere in the system.
I need it where human input is messy.
Then I can let normal software handle the rest.