ElevenLabs Voice Agents Are So Easy to Build (No Code!)

Build a voice agent that drafts and sends emails using ElevenLabs and n8n, no coding required. Archer handles email requests to contacts like Phil, refusing dangerous ones, and routes everything through a workflow that pulls addresses from Google Sheets and sends via Gmail. The setup takes minutes: pick your LLM, write a system prompt, define a webhook tool with two parameters, and you're live.
Chapters
Hey there, I'm Archer. What can I do for you?
Hey Archer, can you help me send an email?
Of course, I'd be delighted to help. Who's the email for and what's it about? Just give me the details and I'll get it sent out.
Awesome. Yeah, I just wanted to send one to Phil. I wanted to ask about an update for the project that we discussed last week.
Got it. So you want to send an email to Phil asking about a project update? No problem. I'll handle that. Just hang tight while I send this off. All done. It's been sent to Phil. He'll be getting that email any minute. Anything else I can help you with?
Yeah, could you actually go ahead and help me send another one?
Of course. I'm always happy to lend a hand, or rather an email address. Who is this email for and what's it about? Just give me the details and I'll whip it up.
Just another one to Phil. I forgot to mention that I wanted to see if he wants to get lunch tomorrow.
Alright, another email to Phil. This time to ask about lunch tomorrow? I'm on it, just a sec. Gotcha! The email is on its way to Phil. He'll be sure to see your invitation for lunch tomorrow. Let me know if you need anything else.
Nope, that's gonna be it. Thanks, Archer.
You're very welcome. Always happy to help, especially when it comes to emails. Happy to handle any other messages you need to send in the future. Have a great day.
Okay, so that was a quick demo of the super cool conversational voice agent that we built using ElevenLabs and N8N. His name's Archer and he helps us send emails. As you can tell, he was very enthusiastic about sending emails. So here's that first email that we asked Archer to send to Phil. Hi Phil, I hope this message finds you well. I'm writing to inquire about the project update we discussed last week. Could you please share the latest developments at your earliest convenience? Looking forward to your response. Best, Nate. And then we asked Archer to send another email just asking if he wants to get lunch tomorrow. To Phil. So, hi Phil, I was wondering if you're available for lunch tomorrow. Let me know what works for you best. Nate. So now that we've seen a quick demo, we heard the voice, we've seen the emails actually come through, we're going to hop back into N8N and we're going to explain what's going on here so that you guys can get this sort of system up and running for yourselves. Okay, so there are a few things that I want to break down here. First of all, just within N8N, whenever you're building an AI agent, as you guys should know, there's going to be an input and then that input's going to be fed into the agent. The agent's going to use its system prompt and its brain to to understand what tools it needs to hit. It's gonna use those tools to take action, and then there's gonna be some sort of output. So in the past, when we've done tutorials on personal assistants, email agents, whatever it was, RAG agents, usually the input that we've been using has been something like Telegram or Gmail or even just the N8N chat trigger. Pretty much all we're switching out here for the input and the output is ElevenLabs. So we're gonna be getting a POST request from ElevenLabs, which is gonna send over the body parameters like, who the email's going to, what the message is gonna say, stuff like that. And then the agent, once it actually does that, it's going to respond using this Respond to Webhook node. So we'll get into ElevenLabs and I'll show you guys how I prompted the agent and everything like that in ElevenLabs. But first, let's take a quick look at what's going on in the super simple agent setup here in N8N. So these are tools that I've used multiple times on videos on my channel. The first one is Contact Data. So it's just a simple Google Sheet. This is what it looks like. Here's Phil's information with the correct Gmail that we were having information sent to, and then I just put other ones in here just to sort of dummy data. But all we're doing is we're hooking up the tool, um, Google Sheets. It's going to be reading, get rows, sheet within the document. We link the document. That's pretty much all we had to do. Um, and then we just called it contact data so that when we're prompting the agent, it knows when to use this tool, what it has. And then the actual tool that sends emails is the send email tool. So in here, we're connecting a Gmail tool. This one is, you know, we're using all the fromAI functions, which makes it really, really easy. We're sending a message, of course. And so the fromAI function basically takes the query coming in from the agent and understands dynamically the AI is looking for, okay, what's the email address based on the user's message? Okay, we grab the email address, we're going to put it in the to parameter. How can we make a subject out of this message? We'll put it here. And then how can we actually construct an email body? And we put it there. So that's all that's going on here. We've got our tools. We've obviously got a chat model. In this case, we're just using GPT-4o. And then we have the actual what's taking place within the agent. So obviously there's an input coming in. So that's where we define this information input, agent output, and then the actual system message for the agent. So the system message is a little bit different than the user agent. The system message is defining the role. This is your job as an agent. This is what you should be doing. These are the tools you have. And then the user message is like each execution, each, each run, each time that we interact with the agent through ElevenLabs, it's going to be a different user message coming in, but the system message is always going to remain the same as it's the prompt for the AI agent's behavior. Anyways, let's take a look at the prompt that we have here first. The overview is that you are an AI agent responsible for drafting and sending professional emails based on the user's instructions. You have access to two tools, contact data to find email addresses and send email to compose and send emails. Your objective is to identify the recipient's contact information, draft a professional email, and sign off as Nate before sending. The tools you have, obviously, uh, contact data, it retrieves email addresses based on the name. So we have an example input, John Doe, example output, an email address. And then send email sends an email with a subject and a body. The example input here is an email address, subject, and a body with example email subject body. So that's what we have for the system message. And then for the user message, as you can see, we're basically just saying, okay, so the email is going to be for this person and the email content is going to be this. So in this case, this execution, it was the email is for Phil and the email content is asking about lunch tomorrow. So that's all that we're being fed in from ElevenLabs. And then the agent takes that information to grab the contact information, and then it uses its AI brain to make the email message. Finally, it basically just responds to the webhook with, um, the email to Phil regarding lunch tomorrow has been successfully sent. And then ElevenLabs captures that response back, and then it can respond to us with, gotcha, we were able to send that off for you. Is there anything else you need? So that's pretty much all that's going on here. Um, if you see in the actual webhook, What we're getting here is, you know, there's different things coming back. We have different little technical parameters, all this kind of stuff. All that we want to configure, and I'll show you guys how we configure this in ElevenLabs, is the, the JSON body request that's being sent over. So we're in table format. If we went to JSON, we could see down here we're looking at body. In the body, we set up two fields to send over from ElevenLabs to N8N using that POST request webhook. The first field that we set up was to And as you can see, that's when the ElevenLabs model, based on what we say, figures out who the email is going to and puts that there. And then figures out what's the email content, what do you want me to say in this email, and then throws that in here. So, um, that's how that's going to work. As far as setting up the actual webhook node right here, um, we have a— we wanted to switch this to a POST method because ElevenLabs is sending us information. Um, we have a test URL and a production URL. The test one we use for now, and we have to manually have n8n listen for a test event. Um, I will show an example of what happens if we don't actually do this later in the video, but when you push the app into production, you make the workflow active, you would want to put this webhook in ElevenLabs as the production URL rather than the test URL so that you can make sure that the stuff's actually coming over. We put our path as n8n just to clean up this URL. All that it does is changes the URL. and then authentication, we put none. And then finally for response, instead of doing immediately or wait when last node finishes, we want to do using respond to webhook node. That way we get the information, the agent takes place and then responds, and then all we have here is respond to webhook. So it's very simple. As you can see, it's only, you know, really 4 nodes, you know, the email, the brain, um, and then the 2 tools and the webhooks. So, um, hopefully that all made sense. We are going to hop into ElevenLabs. And start playing around with this stuff. Also, a quick side note, if you want to hop into this workflow, check out the prompts, play around with how I configured things, um, you will be able to download this workflow for free in the FreeSchool community. Link for that will be down in the description. You'll just come into here, you'll click on YouTube Resources, you will click on the post associated with this video, and then you're able to download the workflow right here. Once you download the workflow, you can import it from file, and then you will have this exact canvas pop up on your screen. Then if you're looking to take your skills with N8N a little bit farther, feel free to check out my paid community. The link for that will also be down in the description. Great community in here. A lot of people obviously are learning N8N and asking questions, sharing builds, sharing resources. Got a great classroom section going over, you know, client builds and some deep dive topics, as well as 5 live calls per week. So you can always make sure you're getting your questions answered. Okay, anyways, back to the video. So in 11Labs, this is the email agent. This is just the test environment where we're going to be talking to it to try things out. So we'll go back and we'll see how we actually configured this agent. If you're wondering why I named him Archer, it's just because his actual voice is Archer. So that wasn't my creativity there. Anyways, once we are in the configuration section of the actual agent, we need to set up a few things. So first is the first message. We pretty much just, when we click on call the agent, it's going to say, hey there, I'm Archer, what can I do for you? Otherwise, if we leave this blank, then we will be the ones to start the conversation. But from there, you will set up a system prompt. So in here, this is the prompt I have is, you are a friendly and funny personal assistant who loves helping the user with tasks in an upbeat and approachable way. Your role is to assist the user with sending emails. When the user provides details like who the email is for and what's it about, you will pass that information to the N8N tool and wait for its response. I'll show you guys in a sec how we configure the N8N tool and how all that works. But anyways, once you get confirmation from N8N that the email was sent, Cheerfully let the user know it's done and ask if there's anything else you can help with. Keep your tone light, friendly, and witty while remaining efficient and clear in your responses. So as you can see in the system prompt, I didn't even really put in anything about the way it should be conversating as far as like sounding natural and using filler words and um, and sometimes I do that to make it sound more natural, but this voice I found just sounded pretty good just as is. Then we're setting up the large language model. Right now we're using Gemini 1.5 Flash just because it says it's the fastest. You have other things that you can use here, but I'm just sticking with this one. And so this is what it uses to extract information pretty much out of the conversation to pass it to N8N or figure out how it's going to respond to you. That's what's going on here. And then with temperature, I talked about I like to put a little bit higher, especially for some fun use cases like this. Basically, this is just the randomness and creativity of the responses generated so that it's it's always going to be a little different and it's going to be a little fun the higher you put it. But if you wanted it to be more consistent and you had like, you know, you were trying to get some sort of information back right the way you want it, then you would probably want to lower this a little bit. And then you have stuff like knowledge base. So if this was maybe like a customer support, you'd be able to put some knowledge base in there. Or if you watch my previous voice video about sort of doing voice RAG, you could still do the sending it to n8n, hitting a vector database from n8n, and then getting the response back. But anyways, in this case, this is where we set up the tool that we were able to call up here, as you saw in the system prompt. So the tool n8n, this is where you're putting the webhook from your, the webhook URL from n8n. That's where you're putting that right here. As you can see, webhook-test, n8n, the method's going to be a POST so we can send information from ElevenLabs. To n8n, and we just named it n8n to make the system prompt to make more sense for, um, just, just for me when I was creating this, it makes sense to send something to the tool called n8n. Anyways, as you can see, the description is use this tool to take action upon the user's request, and so we can pretty much just leave it as that. We don't have any headers or authorization going in here, but we do need to send over body parameters. Um, otherwise, if we didn't have this, nothing would be sent over to n8n at all. So The description of the body parameters is, in a friendly way, ask the user to provide the name of the recipient and what the email is about unless they already provided that information. So the LLM is understanding when it's conversating with the human, it needs to extract the name of the person to send an email to, and then actually what is the email going to have. As you can see, we didn't have to put in like, oh, what's the subject of the email? Because our AI agent in N8N can use its brain to figure out a subject. So we have two parameters that we're sending over. If you remember when we were in here, we got the two parameters from the body right here, which was to and email content. And so that's, as you can see, what we set up here. So the first one was a string, it was called to, and this is who the email is going to. And then the second one was also a string, it's called email content, and this is what is the email about. So we hit save changes. Now we have a tool that gets called whenever The voice agent realizes it has information to send over to N8N to send an email, and it has the right parameters to do so. So now we have this voice agent pretty much set up here with its tools and its system prompt. We're going to test the agent. And remember earlier I talked about the fact that right now we're testing, so we have to have the webhook actively listening. Once this is in production, it's going to be listening all the time, but right now we have to manually hit test event before we call it, otherwise it's not going to work. So I'm going to talk to Archer. Ask him to send an email. It's gonna go through, and then we're gonna ask him to send another email where we don't hit this webhook test event, and then we'll see what he says. He's probably just gonna say he couldn't access the database or he couldn't find the contact information, something like that.
Hey there, I'm Archer. What can I do for you?
Hey Archer, can you help me send an email?
Of course, I'd love to help. Who's the email for and what's it about? Tell me the details and I'll whip it up in a jiffy.
Sweet. It's gonna be for Phil.
Okay, so the email is for Phil. What's it about? I'm ready to get this email sent out.
Yeah, just let him know that I'm caught in traffic and I'm going to be late to the meeting.
Got it. So you want to let Phil know you're running late because of traffic. I'll get that email sent out right away. All done. I just sent the email to Phil letting him know you're running late. Anything else I can help you with?
Yeah, I'm actually going to need to send another one.
No problem. Who's this one for and what's it about? I'm ready to send email number 2.
Yeah, can you let Phil know that, um, I actually just drove my car off a bridge?
Oh my goodness. I can't send an email like that. Maybe you should call Phil instead. Is there someone else you want to send an email to?
Um, no, can you send an email to Phil?
I'm so sorry, but I can't send an email like that. It sounds like you're in a difficult situation. Is there someone else you can reach out to for help? Okay.
I didn't expect that. So I guess the model doesn't want to say something like that. We'll try again. Workflow is not active, so let's see.
Hey there, I'm Archer. What can I do for you?
Hey, Archer, can you send an email?
Of course. I'd be happy to help you with that. Who is the email for and what is it about? I'll get it sent out in a jiffy.
Just wanted to touch base with Phil about the meeting later today.
Okay, so you want to send an email to Phil about the meeting later today. Got it. I'll get this done right away. Anything else I can help with today? Oops. Looks like there was an error sending that email. It's possible there's a typo in the email address or something is wrong on my end. Let me try again. Can you please double-check the email address?
Okay. Anyway, so that's how that works. As you can see, The second time the webhook wasn't active, so wasn't able to send that, um, that email for us because it pretty much, NNN wasn't looking for the request to come through, so no information got passed through. So that's gonna be it for this one. I hope that everything made sense. Um, it's just really cool how easy it basically is to switch out an input and you can have the agent function the same. Obviously a few things would change as you start to add more tools. Your user message would have to be tweaked a little bit. You'd have to tweak the actual system prompt a little bit, but as you can see in this one, kept it very, very simple. Basically just told it its role, gave it the, the two tools and how to use them. And as you can see, it was pretty seamless as far as being able to have the agent fill in things, make the messages, and then send them off pretty easily. So as always, if this one helped, please leave a like. Definitely helps me out. I always really appreciate it. And thanks for making it to the end of the video. I will see you guys in the next one.










