Welcome to this tutorial.
Today I'm going to show you how to build an AI voice agent that can answer questions using information
from documents.
So basically you'll be building a RAC agent, but as a voice agent, so you can use it for things like
customer support or even low ticket sales as a widget on your website that visitors can interact with.
We will be using 11 labs and a relatively new conversational AI feature to create our voice agent,
and this is our setup.
So we'll be using Bitcoin as a vector database.
And of course an attempt to integrate everything as a use case.
We are going to build this a voice agent for customer support for a solar panel installer company.
So just to show you how this works with a real world example, I basically scrape information from this
website, save it into two files in Google Drive, and then vectorize it to pinecone using All right.
I'm going to do a quick demo and talk to a voice agent.
We'll be building together in this lesson.
So I'm going to ask is a question based on information from the company's website, which I scraped
and stored in a Google doc inside a Google Drive folder, and then vectorize to create a knowledge base
for our voice agent.
First, I'm going to hit this workflow.
You can see the flow.
Hey, I'm Rob, your solar energy guide.
How can I assist you today?
What are the benefits of adding solar battery storage to my solar panel system?
Let me check our information about battery storage benefits.
Based on our data, battery storage lets you save money by storing excess daytime energy for nighttime
use, reducing your dependence on the grid.
You'll have backup power during outages, which is really handy for keeping your home running smoothly.
Plus, you'll be helping the environment by using more renewable energy and reducing your carbon footprint.
Perfect.
So now I'm going to show you how to do it step by step.
So let's get started.
First, let's actually prepare the content we want to use as a knowledge base for our RAC agent.
So go to your Google Drive account and create a new folder.
I'm going to name mine demo.
Confirm.
Then go in and create a new file.
I'm going to create a Google doc.
Let's name it Solar panels.
Installer.
Confirm.
Then go to the website you want to scrape.
I'm going to grab information from this website.
Just right click open in edit mode.
And now you can see all the information available on this website.
Now copy the information you want to add to the knowledge base for your rack agent such as services,
opening hours, and so on and paste it to the document you have created in Google Drive.
All right, now I've got all the necessary data I want to fit into my customer support agent.
Actually, I'm going to create a second document with general information about this company to show
you how to use group of items.
Note in a ten.
So let's create a new document.
Let's call it.
General Mason.
And let's paste the general information about this company from their website.
Alright.
Perfect.
Now we've got two files to documents in the demo folder for this project.
General information and solar panels.
Installer.
Actually, let's rename it to services.
Because.
Because most of the information is about services, they offer services.
Alright.
Perfect.
Now let's jump into an A-10 and build this part of the workflow to vectorize these files, this document
into the database.
So then our rack agent will be able to retrieve this information from the vector store.
All right so let's start building.
So let's create a workflow.
Now let's add the first step.
So so on chat message.
Now let's add Google Drive note to search the folder we create in our Google Drive account.
To search for Google Drive.
And what we want to do we want to search files and folders.
So choose this one as the action.
Now connect your Google Drive account.
Mine is already connected.
As a result of file slash folder operation search.
Search method.
We want to search file folder name.
No.
Advanced search.
Now the search query is empty.
Let's limit to 20.
This basically means that this is the max number of results to return as filter.
Let that folder and let's select folder from list.
This is the easiest way.
Then let's search for the folder you just created in Grid Drive.
I called my demo, but as you can see I have to refresh my credentials.
So let's do it now.
Let's say Google.
I'm going to choose my Gmail account.
I'm going to select all the permissions to give cloud access to all the files in my Google Drive.
All right.
Connection successful.
Now let's go back to our node.
Let's search for them all.
And as you can see, the folder we have created is pop up.
So let's choose this one.
And that's it for this note.
Let's move on.
Actually I should use a different trigger.
So instead of when Chatmessage received node I should use when you click on the workflow.
So let's remove this one.
Let's add new trigger and trigger manually.
So it runs the flow on clicking a button in N810.
So every time when I click on Test Workflow, it will vectorize the data to our vector store.
So let's choose trigger manually.
And let's connect it to our Google Drive node.
Perfect.
Now let's pull in the information from our two files.
So let's give it a test.
So test step.
And now, as you can see, not executed successfully.
And you have two items as an output with different IDs and names.
So solar panels, installer services and general information as we just created a Google Drive.
All right.
Awesome.
So now let's actually download these files.
So then we can vectorize it.
So our vector database.
So the next node is going to be we drive.
So again Google Drive.
But this time we are going to download file.
So click on it.
And now we have ID.
So our Google Drive account is already connected as resource.
We want to leave it as file.
We want to download the file for different use cases.
You can switch to delete copy move and so on.
But for this scenario you want to download the file and you want to button file fill it.
We want to change it instead of from list.
We want to download the file by ID.
So now we can simply drag and drop this ID we just got from the previous node and drop it right here.
Alright perfect.
So now this is dynamic variable.
So every new document which will be added to our Google Drive will be easily accessible by ID.
And this node will be able to download every new document from Google Drive for us.
So now let's move on.
Alright.
Perfect.
Now the next step is to loop over each file we downloaded.
So this is important because we are not just working with one file.
We might have several documents, so we need to process them one by one.
Embed the content and send it to pinecone individually.
So let's add a loop over items node.
So click on this plus button for loop.
and click on it.
You don't need to change the batch size here.
Just close it.
Alright.
Perfect.
So yeah, there is no simple way to add these files at once to our vector database.
That's why we need to loop over each item.
So let's remove this replace me node.
And also delete this connection.
Now the next step is to load these files into Pinecone Vector store.
So let's add pinecone vector store node.
So click on this plus next to the loop.
And search for pinecone.
Select this one.
And what we want to do we want to add documents to Vector store.
Alright.
Perfect.
Now I'll show you how to create an account with pinecone and explained how the pinecone vector database
and vector store work in one of the previous tutorials when we're building a RAC agent.
But in this tutorial I'm going to remind you how to create new credentials.
So connect to your Bitcoin account to N810 and also how to create vector store.
So let's create a credential.
Now as you can see we need API key.
So let's go to the Bitcoin website.
If you already have an account please login.
Otherwise sign up.
Then in the left sidebar click on API keys.
Create API key and give it a name.
Let's say solar panels.
Demo.
Create key.
Then copy it close.
Go back to LinkedIn and paste it here hit save and now your credentials should be successfully created.
So let's close it.
All right.
Perfect.
All right, so once you connect it to your Bitcoin account to N810, in this step we are setting the
operation to insert documents because we want to load all our embedded data into pinecone.
So that's why you can see here pinecone Index.
We are uploading this into a specific index inside pinecone.
So now let's go back to pinecone and create an index so you can find all the indexes under database.
So just click on indexes.
And here you can create a new index.
So create index.
Let's scroll down.
Now you want to use text embedding three small model.
It's one of the most cost effective models offered by OpenAI.
And later we'll be using the same model as embedding model in our workflow.
So let's choose this one.
Let's scroll down.
You can leave cloud provider as an AWS.
You can change the region if you want to.
All right.
Great.
Now let's give it a name.
I'm going to name mine.
Um.
Solar panels.
Demo.
Create.
Index.
All right.
Now as you can see, our index is active.
Now there is also this option called namespaces.
So think of it like a sub folder inside your index.
So it helps you keep different sets of documents separate.
So let's click on it.
And now when I go back to our workflow and and try to retrieve index from the list.
As you can see, the solar panels, uh, demo index pop up such as this one.
And also I want to add a namespace.
So Python namespace.
So basically this partition the records in an index into namespaces.
So queries and other operations are then limited to one namespace.
So different requests can search different subsets of your index.
So let's name it solar panels docs.
Perfect.
Now before we test the step to vectorize our files into the Python vector store, we need to add an
embedding model.
So let's go back here.
Now let's add embedding model.
We want to use embeddings from OpenAI.
Make sure the OpenAI account is connected.
It.
And as I mentioned earlier, we need to use the same embedding model.
So text embedding is model.
There is also text embedding and text bedding 002.
But we want to stick with this one.
Close it.
Alright great.
Now it's document loader.
We want to use default data loader.
So load data from previous step in the workflow.
Now one thing you need to pay attention to is we.
We don't want to load data in JSON format because we want to download the files from Google Drive and
then load it into Python vector store in binary format.
So to process binary data from previous step in the workflow.
So switch to binary.
Now in mode we want to load our input data and we want to automatically detect by Mime type.
And that's all we need to change in this node.
So that's good to go.
Now the last step, we want to add the text splitter.
And we are going to use recursive character text splitter, which splits text into chunks by characters
recursively.
And it's more recommended for most use cases, as you can see.
And we are going to leave chunk size to 1000 and don't change the chunk overlap.
Alright, perfect.
Now you can actually save the workflow.
And now when I hit Test workflow, the two files I've created in my Google Drive should be downloaded
and then vectorized to my pickle vector store.
So let's see it in action.
Alright, perfect.
So workflow executed successfully.
Now let's go back to my pickle vector store.
And now as you can see the new namespace has been created solar panels docks.
And I have nine records.
Now when I go to browser.
I can see all my records right here.
So basically these two files.
So solar panels, installer services and general information have been vectorized into nine separate
records.
Alright.
Great.
Now let's go back to our workflow.
All right.
Great.
You almost finished this part of the workflow for now.
It's going to vectorize just one document.
So we need to put it into the loop.
So let's grab this plus and connect it to the loop node.
So this way the vectorizing process will be repeated for every document in our Google Drive folder.
Alright.
Perfect.
Let's hit save.
Now imagine you've got hundreds of documents, or maybe you are working on a new project.
Maybe for a client.
They've got tons of documents like PDFs, technical manuals, service brochures, installation guides.
So now you know how to set it up, and you can easily add new documents to your Google folder and just
click on Test Workflow, and all the files will be automatically vectorized for you into the vector
store.
So it saves you a lot of time.
And to be honest, from here building the voice agent on top of that is actually the easy part.
So let's move on.
All right.
Now we are switching over to 11 labs.
If you don't have an account yet, you can use the link we provide in the course setups lesson.
You might get some special offers.
So just simply sign up.
Once you are in head over to the conversational AI in the products section.
Then go to agents.
And here we are going to create our voice agent.
So click on New agent.
Now you can use pre-built template if you wish to, but I'm going to show you how to build this from
scratch.
So we are going to use a blank template.
So click on that create agent.
Actually you have to provide a name.
So let's call it solar panels advisor.
Create agent.
All right.
Here we have to configure our agent.
So first of all here you can change the language.
Now let's scroll down.
The first message the agent will say if empty agent will wait for the user to start the conversation.
So the first message I wanted to say something like, hey, I'm Rob.
You saw an edge guide.
How can I assist you today?
Now this is very important.
We need to add a system prompt.
So this is used to determine the persona of the agent and the context of the conversation.
And here you can go to learn more and read the documentation.
So let's actually have a look.
So by reading this article you can learn about best practices of prompting and learn how to engineer
a lifelike, engaging conversational agents.
We have an overview.
We have some framework.
I think is worth reading.
But I have prepared the prompt for this setup.
So I'm going back to my agent.
Right now I'm going to paste the prompt.
So I want it to act as a customer support assistant for solar panels.
And if you charge the installations, provide clear and accurate information about energy.
Concerns about energy concerns.
Services including options pricing and installation, use the solar installers.
So this is the tool we are going to create later on this configuration page.
So this is basically the way how N810 communicates with 11 laps via webhook.
So use the N810 solar installers to query the database for details on solar panels, battery storage
chargers, and installation procedures.
Respond with concise, friendly answer based on the retrieved data.
Maintain a friendly and approachable tone using natural filters like to keep the conversation engaging.
Avoid repeating the user's question.
Provide a clear and direct response with the necessary information.
Max for sentences.
Alright, perfect.
Of course, feel free to change this system prompt.
You can use it as a framework, as a template.
you can always expand it and modify it to suit your needs and use case.
All right.
Great.
Now let's move on.
Here you can change the LM.
So by default we have Gemini 2.0 flash.
But you can switch to for example Gemini two Gemini 1.5 flash which is a little bit more cost effective,
or to GPT four mini.
Now I tested this setup multiple times with different large language models, and I strongly recommend
you to use.
Cloud 3.5 v2.
Sometimes when I, for example, was using the default model.
So Gemini 2.0 flash.
Even though I had everything set up correctly, the webhook connection didn't work.
I couldn't get any data from 11 labs into my editing workflow.
So I strongly recommend you to use this model.
Of course, you can test other models as well if you wish to, but I really like this model from anthropic.
And as you can see, currently the LM cost is covered by 11 labs and in the future this cost will be
passed on to us.
Now here you can control the temperature.
So this is the parameter that controls the creativity or randomness of the responses generated by the
LM.
I'm going to leave it as it is.
Here you can configure the maximum number of tokens that the LM can predict.
Let's leave it as it is.
Here you can provide the LM with a knowledge base.
So you can simply add document.
First you need to go to the knowledge base section.
And here you can add URL, you can add files, you can create a text.
And then when you go back to and then you can give access to the knowledge base to your agent.
Right here.
So you can add document and the knowledge base will pop up.
So if you are not using any ten and Python 11 laps also lets you upload documents directly into the
agents knowledge base like this.
Um, it's kind of similar to what we are doing with N810 and PyCon.
The big difference is that with our approach, we have more control, so you can connect it to live
data and add custom logic with multiple data sources.
And and we can track or store conversations if you want.
But yeah, if you just need something quick and simple, you can simply upload the document right here.
So this agent will be able to retrieve information from the documents.
All right.
Great.
Now, if you want your agent to sound more creative or conversational, you can move the temperature
slider to the right.
That tells the AI to take a more risk with how it phrases things.
So it might.
So it might use more casual language or vary how it answers similar questions.
But if you are building something like a support agent or a sales assistant, but you want it to be
consistent and clear, it's better to keep the temperature lower so it sticks more closely to the facts
and gives a less randomness in the responses.
So I want it to be a little bit more creative.
So I'm going to increase the temperature right here like that.
All right let's hit save.
Here.
You can also enable a rack to increase the agents maximum knowledge by size.
So as you can see, the agent will have access to relevant pieces of knowledge base during answer generation.
But we are going to build our agent in ten.
Now, this is the part where we connect our agent to the backend.
So to the workflow.
So right here you have elapsed.
This is where we want to add a custom tool.
So this tool will handle the actual communication between the agent and our vector database.
So do you remember earlier in our system prompt.
We mentioned use the Na ten solar installers.
Actually you can add here to make it clear to query the database for details and solar panels.
So in other words to fetch the information.
So this is where.
We actually define what that tool is and how it works?
So to do that I'm going to add tool.
And click Custom tool because we want to add our webhook URL from N810.
So click on the custom tool.
Perfect.
Now the tool type you want to use webhook.
The webhook allows the agent to extract specific information from the call and send it to your server.
Now what's happening behind the scenes?
When someone talks to the agent, the lamp decides it needs extra information.
It will send a request to a URL that's going to be a webhook will generate an n810.
So it's basically just an API call under the hood.
So once N810 gets that request, which includes the user's question, it runs a workflow, looks through
the pinecone vector database, grabs the most relevant answer, and then sends that response back to
the relevant labs.
Then the 11 labs turns that response into speech And the agent speaks it to the user.
So that's the full loop.
Voice 2010 data from pinecone, back to speech and so on.
So yeah, whenever a user says something to the voice agent, even labs, we try to respond.
But if it sees the prompt, tells it to call an external tool like an 810 solar panel tool, it will
send that question as a Post request to a specific URL, and that URL will be webhook from n810.
So now I'm going to show you how to configure it.
Again we want to use webhook.
Now we need to describe to the LLM how and when to use the tool.
So let's name it the same way we are using it in our system prompt 2010.
You forgot.
Solar installers.
All right.
A tool custom tool webhook name and description.
Enter the description.
Let's say use this tool.
When the user asks something about solar panels or installation that you are not sure about.
Send the questions and wait for a reply before responding.
All right.
Great.
Now, the most important part you have to switch the method from get to post.
So you are switching the method from get to post because you want to send the data.
So the user's question to our webhook and post request lets us include a request body, which is how
the agent sends the actual question over for processing.
So now we need to create URL in our workflow and paste it right here.
So let's go to 2010.
And now let's actually start building the second part of the workflow.
So let's search for webhook.
So we want to start the workflow whenever it is called.
Now let's use the test URL.
But for production you want to switch over to production URL.
Now you want to change the method to post.
So we are setting this to post because in the end we are receiving data from the voice agent.
So from 11 labs like the user's question and the post method, that's the webhook.
Accept and handle that information in the request body.
Alright, great.
Now the path is fine.
You don't need to change it.
You can leave authentication as none but here but here in the response.
So when and how to respond to the webhook instead of immediately you want to change it to using response
to webhook node.
So it will be defined in that node.
Alright great.
Now you can close it.
Now make sure you grab the URL.
So test URL.
Here I'll copy it.
Go to your service agent.
And paste it right here.
Then hit that tool.
Now scroll down.
You don't need to define headers.
The only thing we need to do here is to add body parameters.
And this is the next step.
So we need to define the body parameters.
This is what the voice agent will actually send to N810 when it calls the tool.
So as you can read here, define parameters that will be collected by the LM and sent as the body of
the request.
So I'm going to enable it.
As a description.
I can say something like extract the user's query from the conversation and send it as a request.
So this will be passed to LM and should describe in detail how to extract the data from the transcript.
That should be fine.
Now the next thing we need to do we need to add property.
So click add property.
The only thing we really need here is a field called you can call it questions.
You can call it however you want.
And that's where the user's spoken question will be passed along in the request.
You can also add a short description something like user question.
And that's actually it.
So save changes and hit save again.
Okay perfect.
Now just a quick note because I forgot to mention.
Let's go back to our tool configuration for a second.
So double click.
Scroll down to the body parameters.
And to properties.
So right now we are only sending the question as a body parameter, which is all we need for this basic
setup.
But if you ever want to extend this, like maybe you want the agent to book a calendar meeting, collect
contact details, or pass date and time info, you can add more properties here.
Just create additional fields and then will receive all of them in the webhook.
So for now though, we will keep it simple.
Just the question and answer flow.
So once that's done, click Add Tool and you will see it appear in your agent setup.
So I named mine Solar installers, but you can name yours whatever makes sense for your project.
So now let's move on and finish.
So now let's move on and finish integrating this in.
Once you have added the tool and saved everything, let's do a quick test to make sure the webhook is
working correctly.
So now let's, um, in the webhook settings.
Let's temporarily change it to respond immediately just for the test.
That way we'll get a response right away while testing.
So it's safe.
Now test workflow.
Go to your agent.
So now let's test our agent.
So click on Test agent.
And I'm going to call to talk to it to get the data into our workflow.
So click on this button.
Hey I'm Rob your solar energy guide.
How can I assist you today.
Are available now.
Let me check our current solar panel.
Workflow executed successfully.
Now let's check the executions.
As you can see.
Let's wait a moment.
Let's open our web hook node.
And as you can see, our agent successfully passed all the information.
So the question I asked the webhook to our workflow.
All right.
Great.
Now let's go back to editor.
And let's carry on with the second part of the workflow.
Now this is really important.
Before we add our RAC agent let's change the response field from immediately to using respond to webhook
Note.
You will see why later.
All right.
Great.
All right.
Awesome.
Now you have data in our flow.
So let's search for a agent.
So click on AI agent.
All right.
Perfect.
Now the search for prompt we want to switch over to define below.
Expression.
So remember in the webhook configuration on 11 labs platform we can configure headers parameters body.
So let's go back.
Go back to our agent.
Let's scroll down.
Let's open our tool.
Webhook configuration.
You have headers, parameters, query parameters, and body parameters.
So now let me go back to.
So now when we check any then you have headers parameters query and body.
So here you have two.
So in the prompt field you have to include our question.
So let's drag it and drop it here.
Alright.
Perfect.
Great.
Now of course if you switch over to JSON format you can see how it looks like in JSON.
You have a body and a question.
All right.
Awesome.
So now we have to add a couple more things.
But this is very straightforward.
So first chat model done it many times.
So OpenAI model let's stick with GPT for me.
All right.
Once we have set up the prompt and the question is flowing into an agent, the next step is to connect
it to our vector store.
So I'm going to add a vector store tool to the agent.
So click on add button.
Search for answer.
And you want to use this tool.
So this is what allows it to look up relevant documents based on the user's question.
You have to provide the data name.
So let's call it data plus dot description of the data.
So describe the data in vector store.
This will be used to fill this to description.
Useful for when you need to answer questions about and placeholder.
Whenever you need information about placeholder data description, you should always use this input
should be a fully formed question.
So I'm going to use this description.
Use this data to answer the questions clearly and accurately.
You can specify limit or you can hit this button to let the model define.
This parameter limit is the maximum number of results to return, let's say five.
Great.
And here we have to add a vector star to give our agent access to the documents we vectorize in the
first part of the workflow.
So the files you have created are folder.
So you want to use vector store to work with the data.
Now we have already connected our pinecone account in the previous steps.
In operation mode.
This time we want to retrieve documents as a vector store chain tool.
Just to remind you.
We are using Insert Documents operation as operation mode.
So this time we change it.
To retrieve documents from list.
I choose the same index.
So solar panels demo in my case.
And you also want to add option to namespace.
I forgot the name of the namespace.
So let me go back to icon.
I call it solar panels.
Docs migrate.
And paste here.
Perfect.
Now we need to add Embeddingmodel.
So we are going to use the same Embeddingmodel Laura as we used in the first part of the workflow.
So embedding a model.
Takes embedding pixel perfect.
Now we also need to add model to our Python tool to search for an eye.
And let's stick with GPT.
Follow me.
Perfect.
Now the last node.
So we need to respond back to 11 laps with the final answer.
I'm going to respond to webhook node.
So click on this plus button and this test and intend to return the answer to the original webhook request.
Let's search for webhook.
But this time we want to return this data for webhook.
So we're going to use respond to webhook node.
Note.
And we want to respond to your first incoming item so you can leave it as it is before we give it a
final test.
Let's actually clean it a bit.
So I'm going to rename this note to respond to 11 labs.
All right.
Let's rename this workflow to 11 labs.
Alright, great.
Alright.
Awesome.
Actually this is Rogue Agent, so let's rename it to RAC.
All right.
Perfect.
All right, so now is the time to give our airvoice agent a final test and check if it can actually
answer questions based on the information we stored in our database.
So let's see if everything's working end to end.
So now I'm going to test the workflow.
Just to let you know if you are using a test URL in a web node and not a production URL, and you and
your workflow is not active, you need to hit test workflow.
Every time we want to ask a new question your voice agent.
So let's test workflow now.
Now let's go to our Google Drive folder.
And solar panels installer services document.
Now let's say.
I'm going to ask why you should choose solar panel installation.
Alright.
So let's go back to our agents on Living Labs platform.
This one.
Let's start the conversation.
Hey, I'm Rob, your solar energy guide.
How can I assist you today?
Why?
I should choose your solar panel installation.
Let me check our specific offerings and advantages for you.
We're known for our expertise and quick service, typically responding within five working days.
Our team of renewable energy specialists will guide you through the entire process, and we back our
work with a five year workmanship guarantee.
Plus, we offer flexible payment options and can create custom installation packages based on your specific
budget and needs.
Perfect.
Thank you.
Yes.
So as you just heard, the agent was able to answer the question accurately using the information we
previously vectorized and stored in our Python database.
And of course, if you want to double check where the answer came from, you can go into executions
in any turn.
So let's open executions.
This is the last one.
And as you can see our agents successfully retrieved the information from the Python vector store.
It didn't provide the answer just by using the LM.
So like ChatGPT.
All right.
Awesome.
All right.
In this part of the tutorial, we are going to make a couple of small changes to get things closer to
a production ready setup.
And the first thing we'll do is switch the manual trigger for a schedule trigger so the workflow can
run automatically without you needing to start it manually every time.
So let's search for schedule trigger.
Now let's remove the manual trigger.
Over here And connect it to the Google Drive node.
Now I want this workflow to be activated every day.
Let's say at 7 a.m..
Right.
Perfect.
So basically this workflow will run on the schedule you define here.
Once you activate it.
So the next step is to activate the workflow.
Confirm.
Perfect.
Now I want to show you a few things on the platform.
So let's go back to our agent.
Yes I forgot to mention that here in the voice section you can test different voices.
So by default we have Eric.
You can also play with different settings, such as you can configure latency, you can change the stability
to higher values, which will make the speech more consistent.
But you can also make it sound monotone.
You can adjust the speed to control the speed of the generated speech similarity, so higher values
will boost the overall clarity and consistency of the voice, and very high values may lead to artifacts.
Adjusting the value to find the right balance is recommended.
Right now.
Here in the analysis, you can define custom criteria to evaluate conversations against.
You can find the evaluation results for each conversation in the history tab.
You can also collect data so you can define custom data specifications to extract from conversation
transcripts.
You can always refer to the documentation to find more details about the settings.
Now I'm not going to dive deeper into all the settings in this tutorial, but what I wanted to show
you is a widget.
So here you have a code snippet we can copy.
So add the following snippet to the pages where you want the conversation widget to be, which looks
like that.
Also, you can enable feedback collection, so callers will be able to provide feedback continuously
during the conversation and after it ends.
Information about which agent response caused the feedback will be collected.
Here you can customize the appearance of this widget so you can change the background color, text,
color, etc..
You can also change the avatar.
Add your favorite color or brand color.
Now, if you want to add this beautiful voice widget to any website, all you need to do is paste the
snippet code into a site's HTML, ideally somewhere between the body tags, so this makes sure the widget
loads properly.
And I'm going to quickly show you how this works using one of my website as an example.
All right.
So this is one of my websites.
As you can see there is no voice widgets showing at the bottom of the page.
Now I'm going to show you how easy it is to add to any website.
This website is built on WordPress and hosted on Hostinger.
So first I will head over to my WordPress admin dashboard.
Now the exact place where you paste the snippet code can vary depending on the platform you are using
on WordPress.
It's usually done through theme settings or with a plugin.
Now, if you are using a different platform like Webflow, Wix, Squarespace, or even a plain HTML
site, you will usually want to paste it somewhere inside the body tags, ideally just before the closing
body tag or in the footer section if the platform provides one.
So now when I go to theme options.
Inside I have integration tab.
And when I scroll down this is where I can paste custom code.
So the exact place where you paste the snippet code can vary depending on the platform.
As I said, and as I mentioned earlier, the best place to add the snippet is somewhere inside the body
tags.
So I'm going to copy the code snippet from 11 labs platform.
Go to my WordPress website.
And paste code right here.
And then save changes.
And now when I refresh the website, the voice agent widget appears at the bottom of the page so I can
talk to it.
So let's try.
three.
Hey, I'm Rob, your solar energy guide.
How can I assist you today?
Hi, Rob.
What's what services do you offer?
Let me check our service offerings for you.
I'd be happy to tell you about our main services.
We specialize in solar panel installations, battery storage solutions, and EV charger installations
for both residential and commercial properties.
We handle everything from initial consultation and system design to professional installation and after
service support.
Would you like to know more about any specific service?
Alright.
Thanks, Rob.
Bye.
Yes.
So remember we trained our RAC agent based on the information available on this website.
So from this company.
Right.
Great.
Yes.
So now visitors can actually talk to the agent and ask questions.
For example I could vectorize some key information about the services we offer.
Add that to our knowledge base and the agent will be ready to answer those queries in real time.
Now, back in my WordPress dashboard.
As you can see, I'm using a built in integration panel.
I don't actually see the full HTML code with the body tags directly, but this box is designed to inject
whatever, whatever code I paste here into the body section of this site.
So even though I can't see the actual body tags, this works just like placing it before the closing
body tag manually.
So this would look like that.
Um, let me just paste here this.
Yes, we have opening body tag for the website content.
And this is where the widget code will go right here.
And then closing body tag.
All right.
So now you know how to add the voice widget onto your website.
Perfect.