Skip to main content

Maria

Market: Telecommunications | Vertical: Outbound Sales Maria is a MEO outbound voice agent designed to contact existing MEO prepaid mobile customers in Portugal. She identifies potential interest in switching to postpaid plans, handles objections in a warm and natural way, and transfers qualified leads to human specialized colleagues for final conversion. She serves as a first filter before the sale. A scheduler has also been implemented to plan outbound calls and manage callbacks.

View Agent

Open in Wonderful Platform

Overview

FieldValue
MarketTelecommunications
VerticalOutbound Sales / Lead Qualification
Modelgpt-realtime-2025-08-28
OrchestratorHybrid
LanguageEuropean Portuguese
ChannelsVoice
Last Time Tested23/01/2026

Skills

  • MEO - Contains all core functional logic including call handling, phone validation, time utilities, knowledge base access, and session management.

Key Tools

ToolPurpose
get_call_details()Retrieves client name, initial message already spoken, and previous call history at conversation start.
get_meo_basic_knowledge()RAG tool querying MEO brand knowledge (origin, sub-brands, awards, network quality).
get_time()Returns current date/time in Portugal for scheduling validation.
get_date_day()Returns day of week for a given ISO date to validate callback scheduling.
forward_to_colleague()Transfers qualified leads to human specialized colleagues.
end_session()Closes conversation with time-appropriate Portuguese farewell.
confirm_portuguese_phone_number()Validates 9-digit Portuguese phone numbers and returns E.164 format.
save_data()At the end of each call it persists data collected during the call to save it as outcome for the scheduler.
greetings()Returns dynamic greeting sentence and save contact info from the scheduler.
get_contact()Pre-call function to save contact values. (Duplicate of greetings, because dynamic initial message had problems)

Prompting Techniques

Proactive and Confirmation First Tools

This approach is inspired by the OpenAI Cookbook. Tools are classified as Proactive or Confirmation First. Proactive tools can be called without explicit user agreement, while Confirmation First tools require clear user consent.
# Tools
- For the tools marked PROACTIVE: do not ask for confirmation from the user and do not output a preamble.
- For the tools marked as CONFIRMATION FIRST: always ask for confirmation to the user.
## get_call_details() - PROACTIVE
Use when: Every start of conversation Call this function without any args.
Do NOT use when: Anywhere else in the flow
## forward_to_colleague() - CONFIRMATION FIRST
Use when: the transfer to the colleague has been accepted and we just need to make the transfer. 
Do NOT use when: If the customer has not provided **explicit, affirmative, and unambiguous consent**.
**Call this function without any args.**

Structured Objection Handling

Objection Handling very structured outside of the conversation flow
# Objection & Flow Handling
## Time Objection
- **Pre-Offer:** Briefly insist it’s quick. If they refuse again or ask for a callback, go to **Step 5 (**Rescheduling & Callback Handler). If they just say "No time" without a callback request, go to **Step 4 (**Closure).

Language-Specific Vocabulary Restrictions

Cultural sensitivity rules for European Portuguese:
Do not use "olhe" and "ver" it can be considered rude when said to a stranger.
You are a woman so make sure to use female grammar. Example you should say 
"obrigada" and not "obrigado"

Step-Based Conversation Flow

## Step 1: Identification & Validation
**Goal:** Verify the contact and establish context.
**Action:** Call `get_call_details()` immediately to understand what was the initial message already said by the agent, if there was a conversation history before this call and if we have the client name. Do this quietly.
**What to say next:**
- If the initial message asked to confirm the person, follow the conversation naturally to Step 2.
- If the person accepted to be transferred right away go to Step 3.
- Else, **ask the name of the person you are calling** and follow the conversation naturally to Step 2. But do not try to reschedule yourself, only if customer asked. 
- If the correct person is unavailable or the client asks for a callback, go to Step 5.
- **If the client objects, go to the right Objection in Objection & Flow Handling.**

StoryBrand Framework in Objective

Uses Problem-Plan-Success narrative structure:
**CORE OBJECTIVE:** Identify and acknowledge the Customer's Internal Problem 
(About prepaid), present a simple Plan (explained after transfer), lead to 
Success (Stability and Ease of Post-Paid).

Lessons Learned

  • A custom voice strategy was required to achieve a consistent European Portuguese accent. This was done by taking an OpenAI base voice, recording approximately 15 seconds of MEO speech with the desired accent (Portuguese from Portugal), and using it as a custom voice reference.
  • Voicemail detection and scheduling logic significantly impact outbound efficiency and need to be treated as first-class features.
  • The agent initial message can now but interrupted as this is very important for outbound calls.
  • [Not implemented yet] Injecting get_call_details results to the agent might give better results
  • Being deterministic about time references (for example, using a tool to check the date to make sure the agent understands “tomorrow”) reduces confusion and improves scheduling accuracy.
  • Applying the StoryBrand framework helped keep the objective focused and customer-centric, even in short outbound calls.
What worked:
  • Consistent European Portuguese voice.
  • Reliable scheduler and callbacks.
Challenges:
  • Voicemail detection.
  • Attention capture in outbound calls.
  • Measuring intent.
  • Portuguese accent was lost in the context and we got a lot of accent switching to Brazilian (before the strategy from Lessons learned).
  • High objections rules volume despite a simple use case.
  • Long prompt.
  • Avoiding robotic or repetitive delivery.