How we easily created a French -speaking vocal agent with Rounded

How we easily created a French -speaking vocal agent with Rounded

Scenario, instructions, adjustment of functions, tests,. Several steps and several tools are necessary.

During a telephone call to a company, you have necessarily heard the famous “type 1, type 2”. After making your choice, you were automatically redirected to the right service. The IA vocal agents go even further. They include and respond to calls in real time, in a fluid and spontaneous way. For this, they can set up actions such as making appointments or qualification of a request.

To test the implementation of a French -speaking vocal agent, we will try to set up one on Rounded. This NO Code platform automatically connects the three essential elements of a vocal agent. Namely, a vocal transcriber, which converts the voice of the caller to text to allow content analysis, a language model to formulate the answer and a vocal synthesizer in writing. The latter transforms the answer into a natural voice to restore information to the caller. Our agent’s mission will be to check the availability of the called and make an appointment. Note that registration in Rounded benefits from 10 euros in credit. This allows you to assemble a prototype using the studio, deploy about 30 minutes of free conversations, and benefit from a free number.

Develop a scenario

Once on the IA vocal agent studio, you can rely on an existing template or set up one from zero. We are going to build a named “agent made appointment.” In order to go in the right direction, it is first advised to try to answer different questions to structure the agent. Note: what is its main objective, its target audience, what tone and personality should it take, what requests should it be answered, what information should it not be disclosed?

Once these foundations have been placed, go to the graphical interface of agent creation, in the “Global Settings” section. You can configure the general settings there. The goal is to allow the vocal agent to work well. Choose your LLM for this: the new sequence of GPT-4.1 models is particularly efficient, the Gemini 2.0 Flash-Offers model a good compromise between latency and cost of use. Also, opt for a voice, a role, a posture, develop the context and the transition between tasks. You can help yourself from Chatgpt or another assistant IA build the prompt. This gives in our example.

We note the addition of the variable {{call_start_time}} to automatically update the time of the call.

Concrete instructions

Once the general configuration is completed, it is time to create more direct instructions with the agent. We go directly to the task entitled “Take_RDV”, linked to the sections “Call Context” and “Call Starts”. The configuration of this module requires writing a specific prompt. We are going into detail here on the agent’s goal. The script consists of objectives, instructions to follow or “things to do or not to do”.

The objective is that which the agent must reach, in our example: “Reserve an appointment for the caller. Once the niche is chosen you must ask, first name, last name and email address of the appellant then confirm the appointment.”

Then, the instructions derive from the actions to be taken to access the objective. Here, in particular: “Start by asking when the person wishes to make an appointment. As a reminder, the call started to {{call_start_time}}.”

Functions require more settings

Still according to our example, we note that two of the instructions use functions: “2. Use the function ‘Get_avilabilitites’ to obtain availability. You have to fill a start, and an END. Make the END a maximum of a week after the start.” And: “5. Use the ‘Confim_appointment’ function to confirm the appointment and save it.”

The implementation of these functions is a little more technical. She deserves that we linger more on it. To configure them, we go through N8N, a workflows automation platform in open source. It allows you to develop automation scenarios, with different interconnected nodes. You can also go through Make for example.

Configure on N8N and Cal.com to find out the availability

For the ‘Get_availabilitities’ function, we create a specific flow on N8N. The goal is to go and see the availability of the called via his agenda and send the result to Rounded. For this, after having created your account on the N8N platform, which offers a free trial, we go to “Personal”. We click on the cross below “Add First Step”, then choose from the “Webhook” drop -down menu. On the webhook node, in “Settings” and “URL production”, we copied “URL production” in “Get”.

We stick it in the “Tools” section at the bottom of the “Take_DV” task on Rounded, in the “Get_avalabilities” section created. This allows N8N to be connected to Rounded.

Back to N8N. Still by pressing the arrow at the top right of the N8N Get-Avalabilitites module, we create a node “HTTP Request”. It allows HTTP requests to question Cal.com data via a REST API. This obviously requires prior registration to Cal.com to connect to its calendar, a Google Calendar in our case. We choose in this section the “GET” method and we mention as URL: https://api.cal.com/v2/slots. Note that at the level of the request parameters of this module, we mention expressions of start and end of action with the functions fx {$ json.Query.Start}} and fx {$ json.Query.end}}

We then finish the workflow with a “respondent to webhook” module. The data sent to Rounded will be in JSON format.

Confirm the appointment

The second function to be implemented in N8N is confirm_appointment. It confirms the appointment and record it. It also requires the implementation of a webhook. The URL is obtained with the “Post” method. It is placed on the corresponding “tool” in Rounded. The creation of a “code” node then makes it possible to mention this JavaScript code, which notably manages time zones:

“Const input = $ input.first (). JSON.BODY.SLostartTime; Const Zone = $ input.first (). JSON.BODY.TIREMEZONE || Europe/Rome”; Const dt = Datetime.fromiso (INPUT, {zone}); dt.setzone (‘Utc’). Toformat (“Yyyy-Mm-Dd’T’HH: MM: SS’Z ‘”); Return ({Formatteddate: UTC}); “

The third node generated is named “HTTP Request”. With the “Post” method, we mention the URL https://api.cal.com/v2/books. The fourth node is an “If”. It makes it possible to divide the workflow conditionally according to comparison operations. We mention under the conditions: FX {$ json.status}} “is equal to” “success”. Let us indicate that in simple terms, fx {$ json.status}} means: “Evaluate this expression, then recover the value of the” status “property of the object” $ json “, and integrate this value here.”

To respond positively or negatively to the confirmation of appointments, the final node is divided into two other nodes, “responds to webhook”. The first contains the request to respond in JSON to ROUDED with the function: “{” Instructions “:” You can confirm to the celler that the complement has been booked successfully “} (with. The second, always with a JSON response to Rounded: {{

“Instructions”: “Error: The Appointment was not confirmed, you eith Mistake and Entered the Timeslot in the Wrong Format or It’s not available, Try Again with the right format, and if it’s a failure offers New Timeslots.” }

Here, the main stages of setting up calls to look at the availability and confirm the appointment have been set up. Note that the tools “Wait” and “Hang_up”, to wait or hang up, were also activated in the “Tools” of the “Take_DV” task in Rounded.

Test the agent

Once the agent is configured, testing it must make it possible to ensure that it responds correctly. This can also allow you to refine the workflow and prompt. To try it effectively, it is advisable to launch test calls with various requests and then analyze the answers. The iteration must improve the agent. To do this, click at the top right of the Rounded interface on “Talk to Agent” and “Start Call”

Authorize the use of microphones by “app.Callrounded.com.” You can then simulate the appointment. One way to observe how the agent behaves in more detail. Here, we are testing an “classic” appointment, of which here is the transcription.

We see that the call goes relatively well. The appointment is made and confirmed. The agent’s voice is pleasant, the management of the appointment is rather consistent. The note taking is not perfect for writing the email. We note on the transcription that when seeing availability, the agent calls on the “Get_avilabilitiies” function, and at the time of confirmation of the appointment, to the confirm_appointment function. Confirmation of the appointment is also sent to the mailbox of the called.

Do not forget to adjust the parameters well, in particular “Timezone” in the Confirm_appointment tool.

When you find that the agent works well enough, you can deploy it to make it operational. Click on “Deploy” at the top right of the interface for this. You can then assign a phone number to make the agent reachable by phone, by clicking on the “Phone Numbers” tab, to the left of the module. Select your agent under “incoming call agent.” You can now call it.

Of course, you can go further. For example, by connecting the agent to your CRM. Or by important Knowledge Bases to make it answer certain questions. Or by automating call campaigns with a CSV file containing information on your contacts.

Jake Thompson
Jake Thompson
Growing up in Seattle, I've always been intrigued by the ever-evolving digital landscape and its impacts on our world. With a background in computer science and business from MIT, I've spent the last decade working with tech companies and writing about technological advancements. I'm passionate about uncovering how innovation and digitalization are reshaping industries, and I feel privileged to share these insights through MeshedSociety.com.

Leave a Comment