- Voice Agent answers patient phone calls. See How the agent handles patients.
- SMS Agent answers patient text messages. See Text conversations.
- Web Agent answers chats in the widget on your pharmacy website. See Web Agent.
Voice options and refill configuration settings depend on which pharmacy management system (PMS) you have connected. The choices you see reflect what your PMS supports.
How the agent handles patients
Keypad entry
The agent accepts touch-tone keypad input during calls. If a caller types their prescription number on the keypad, the agent looks up the prescription from those digits without asking for a name and date of birth.- The agent allows a short pause between digits, which helps a caller reading a number off a bottle.
- A caller can press # to submit the number as soon as they finish.
- A short entry, such as a four-digit birth year, isn’t mistaken for a prescription number.
- A caller can press 0 at any time to ask for a person.
Finding the patient
The agent first looks a caller up by the number they’re calling from. If that finds no profile, it asks for the patient’s name and date of birth and searches on those. Name and date of birth lookup works on PioneerRx, Liberty RX, and BestRx and needs no setting turned on. A prescription number read off the label works at any point and is the fastest way to find a patient. Enable Search Patient Tool may still appear under Voice Settings. It doesn’t change what the agent does and is being removed from the dashboard. Names. Callers need to give both a first and a last name. A first name on its own isn’t enough to identify a profile.- Hyphenated and multi-part names, such as “Ana Maria” or “Garcia-Lopez”, are matched part by part.
- If the first attempt finds no match, the agent tries alternate spellings.
- Accents are ignored, so “Núñez” on file matches a caller heard as “Nunez”.
- The agent compares the name against both the full name your PMS holds and the patient’s first and last name, so a middle name on only one side still matches.
- It understands ordinals such as “the fifth”, month names, and two-digit years.
- If the call transcript writes a number as a word in another language, the agent still reads it as that number.
- If the transcript runs a date together into one number, such as “10282” for October 2, 1982, the agent splits it back into month, day, and year.
- When the caller says the century out loud, everything from that point on is the year. “Four twenty two thousand one” is April 20, 2001, not April 22.
- When the words could be split more than one way (“nine nineteen seventy three” could be the 9th or the 19th), the agent reads the date back the way it heard it and waits for the caller to confirm before looking up the profile.
Pet profiles
On PioneerRx, the agent recognizes pet (animal) profiles, including pets with no prescriptions on file, so a caller asking about an animal’s medications is matched to the right profile. The agent never asks for the pet’s name:- If the number the caller is calling from has one pet on it, the agent works from that profile.
- If the household has several pets, the agent reports their prescriptions as one list.
- If no pet is on the number, the agent asks for a prescription number from the label. This finds a pet profile the phone number isn’t attached to.
Requests the agent can’t handle
Some requests are outside what the agent can do: a delivery, an insurance or billing question, medical or dosage advice, a special order, a message for staff, or a medication the caller needs sooner than your pharmacy will fill it. The agent hands these off instead of improvising an answer. What happens next depends on the channel and your store hours:- On a call during business hours — the agent asks if the caller would like to be transferred to pharmacy staff. If they say yes, it transfers them right away without asking again.
- On a call outside business hours — the agent explains that staff will need to help, and offers to take a voicemail on your after-hours box.
- In chat and SMS — there’s no call to transfer, so the agent gives the patient your pharmacy’s phone number and invites them to call. This is the contact phone in your store details, not a transfer destination. The agent then asks whether there’s anything else it can help with.
When your PMS is unreachable
If the agent can’t reach your PMS during a call (for example, the connection to PioneerRx, Liberty RX, or BestRx is down), it tells the caller and transfers them to pharmacy staff. It doesn’t keep retrying or end the call with a generic error. If the agent can’t load your pharmacy’s configuration when a call starts, it asks the caller to contact the pharmacy directly and ends the call, so the caller isn’t left in silence.Text conversations
Privacy. In a text conversation, the agent never repeats a patient’s name, date of birth, or prescription number back to them, even one the patient just sent. When a lookup fails, it asks the patient to double-check what they sent without quoting it. Outbound texts are scanned for identifying numbers before they’re sent, including a number a transcript has spaced out digit by digit. A medication name caught by that scan is masked: the first three letters stay and the rest become asterisks, as inLis*******. A patient on several prescriptions can still tell which one a text is about.
Formatting. Texts are written to be read, not spoken. Numbers appear as digits, such as a phone number as 555-123-4567 and a prescription number as a single run of digits, instead of being spaced out the way the agent reads them on a call. Refill counts are still written as words (“two refills”).
Closing the conversation. When the patient has nothing else, the agent signs off with “Thanks for texting [your pharmacy]. Text us anytime you need help.” and ends the session, instead of leaving the thread open until it times out. A patient who opts out mid-conversation is thanked and the conversation is closed the same way.
Web Agent conversations
Verifying the patient. Before the agent looks up prescriptions in a Web Agent chat, it opens a secure form in the chat widget. The patient enters a prescription number and date of birth there, and VOXO checks them against your PMS. The details go straight to VOXO and never appear in the conversation. The agent doesn’t ask for them in chat. If the patient closes the form, the agent can still help with anything that doesn’t need their records. After five failed attempts, the patient has to wait 30 seconds before trying again. The wait doubles with each further failure, up to one hour. Each chat covers one patient. To ask about someone else, the patient starts a new conversation. If the prescription the patient verified with can’t be refilled, the agent tells them that first, and why. The patient can verify with an older prescription number for a prescription that has since been renumbered. The agent doesn’t ask chat visitors whether they’re asking about a pet. Verification in the transcript. Each verification step shows in the conversation’s transcript as a divider line, such as “Verification form sent” or “Patient closed the verification form”. Lines for a successful, failed, or locked attempt include the prescription number and date of birth the patient entered. A chat shows in the session list once the patient sends their first message. Opening the widget without typing doesn’t create a session. Ending the chat. When the patient has nothing else, the agent says goodbye and ends the chat. A chat also ends after 5 minutes with no messages, after 30 minutes in total, or after 100 messages. When a time or message limit is reached, the agent sends a short message that the chat is ending and the patient can start a new one. When the agent is unavailable. If the agent can’t be reached when a patient texts in, the patient gets this text: “[Your pharmacy]: Sorry, our text assistant isn’t available right now. Please call the pharmacy directly at [your number] for help.” The number is the contact phone in your store details, and it’s left out if none is set. A text session waits up to 30 seconds for the agent to pick up. Texts to an agent on a disabled account aren’t passed to the agent and get no reply. Carrier keywords such as STOP and HELP are still honored.Booking appointments
With the Appointment Scheduling add-on, the agent books appointments on inbound calls, texts, and Web Agent chats. It uses the event types on your Scheduling page. Patients don’t need to verify who they are to book.- Appointment type. The agent offers every event type at the location. If there’s only one, it offers that one. On a Web Agent chat, the types show as buttons. If the patient already named a type, the agent skips this step.
- Vaccine. For a Vaccine scheduling event type, the agent asks which of the event type’s vaccines the patient wants. With one vaccine, it uses that one.
- Day and time. The agent asks which day works and offers the open times. On a call it reads up to five. In a text it lists up to five and says more are available. On a Web Agent chat, every open time shows as a button.
- Name. On a call, the agent books under the patient profile matched to the caller’s number. In a text or chat, it asks for the patient’s full name unless the patient is already identified.
- Confirmation. The agent confirms the time, then asks if there’s anything else.
When a caller goes quiet
When a caller goes quiet, the agent waits for the silence to settle before checking in, so it doesn’t talk over someone who is still thinking or reading a label. It checks in a couple of times, a short pause apart, then says a friendly goodbye that names your pharmacy and ends the call. If the caller speaks at any point, the sequence stops.Monitoring conversations
The Conversations tab shows patient interactions as they happen. The stats bar at the top describes the sessions in the list below: it uses the same type, direction, transferred, date range, and search filters, and updates when you change one. The first card, Calls, counts every session in the filtered list. Filter the session list with the controls above the table:- Type — scope to Voice, Web Agent, SMS, or Type: All. Type: All is the default and includes every session type.
- Direction — Inbound, Outbound, or Direction: All.
- Transferred — show only sessions that were transferred to staff, only those that weren’t, or both (Transfer: All).
- Date range and Search for narrowing further. Search matches the caller’s name as well as their phone number, so you can type either.
Session list
Each row in the session list is one patient interaction, either a phone call or a chat session. Select a row to open the conversation, or right-click it for Open conversation and Open in new tab. The conversation view shows:- Call recording playback — an audio player for the recorded phone call, if there is one. Use the player controls to play, pause, and scrub through the recording.
- Tool usage tracking — a log of every action the agent took during the session, such as looking up a prescription, submitting a refill request, or transferring the caller. Use it to check what the agent did and why. Some actions finish without the agent reading a result back, because the agent handled the request itself. Those are logged as successful, not as errors. A lookup that couldn’t reach your PMS is logged as a failure with the error, so you can tell an outage from a search that found nobody.
- Quality metrics — scores and indicators for how the agent handled the interaction, including whether the patient’s question was resolved.
Configuring the agent
The Settings tab contains six sub-tabs: General, Voice, Web Agent, SMS, Call Routing, and Announcements. Web Agent and SMS are add-ons. See Web Agent and SMS. Store details, refill settings, and the Who Is Calling plugin download are on other pages. See Settings that moved. If your account can open the Settings tab but not change it, a banner at the top of the sub-tabs says you can view the settings but not edit them, and the fields are read-only. Ask an administrator at your pharmacy to give you the virtual receptionist update permission in Store settings. When Save Changes is unavailable after you’ve edited something, the reason appears beneath the button, for example “Choose a voice before saving.” Reset to Defaults sets every field on the agent config back to VOXO’s defaults: greeting, voice and call behavior, store and contact details, hours, announcements, transfer and voicemail destinations, tools, and language. Confirm the dialog to fill the form with the defaults, review them, then select Save Changes to apply them. Nothing is saved until you do, so Cancel Changes still puts the form back the way you found it.General
The General sub-tab holds the agent’s name and its language settings.
Languages are configured on this same sub-tab. See Language below.
Voice Settings
The Voice sub-tab controls how the agent sounds on calls.Call Routing
The Call Routing sub-tab sets the hours the agent works to and where it sends callers it can’t finish with. Settings are grouped into four sections.Business hours
Select the business hours schedule the agent uses to answer questions about when the pharmacy is open and to decide whether a call is after hours. You can assign an existing hours schedule, create a new one, edit the current selection, or remove it. Special hours on the selected schedule reach the agent with their name and dates, so a caller asking about your hours hears when a closure or change in hours runs. On the first and last day of a period marked Closed during this period, the agent tells callers the store is closed today and names the closure, instead of reading back the regular hours for that day.Business hours and Time of Days do different things. Business hours are recurring daily schedules the agent uses to answer “are you open?” and to route after-hours calls. Time of Days schedules continuous blocks, for example today through next week with no breaks, and lets you pick where calls route during that block. Use Time of Days for one-off closures or overrides instead of editing your regular business hours.
Transfer behavior
After hours
Special cases
VIP Custom Destinations
Use VIP Custom Destinations to send specific callers straight to a destination you choose. Calls from these numbers skip the agent and pharmacy IVRs. Neither one answers or shares information with these callers.- In Special cases, click Manage VIPs. The button shows how many VIPs you have.
- Click Add VIP.
- Enter the Caller ID, a 10-digit US number.
- Optionally, enter a Label of up to 100 characters, such as “Dr. Smith”.
- Choose a Destination: an extension, call group, queue, voicemail box, or custom destination.
- Click Add VIP.
Language
On the General sub-tab, control which languages the agent speaks and how it switches between them.
When your primary language isn’t English, or additional languages are enabled, the agent uses a multilingual speech-recognition model so it understands callers in any of your configured languages. A location set to English and locked to its primary language recognizes English only.
Sending callers to the agent in a chosen language
A phone menu can put a caller straight into the agent in a particular language. On the IVR page, point a menu key at Pharmacy Agent (<language>), for example a “para español, oprima dos” key at Pharmacy Agent (Spanish). Calls that press that key run in that language from the start, whatever the location’s Primary Language is. Fifteen languages are available: English, Spanish, French, German, Portuguese, Italian, Dutch, Polish, Russian, Swedish, Turkish, Chinese, Japanese, Korean, and Hindi. The agent speaks its fixed lines in the call’s language: the greeting, “please hold while I connect you”, what it says before handing the caller to staff, the recording disclosure, and its goodbye.Web Agent
The Web Agent widget lets patients who visit your pharmacy website ask questions, submit refill requests, and book appointments without calling. See Web Agent conversations for how the agent handles a chat. Set it up on the Web Agent sub-tab.
A live preview beside the settings shows how the widget will look on a page. You add the embed code to your site once, before the closing
</body> tag. After that, saved changes show up without touching the code. See Embedding the chat widget.
The Web Agent is a premium add-on. If your plan doesn’t include it, users who can edit agent settings see the sub-tab with a New badge and an Upgrade plan button. Other users don’t see the sub-tab.
SMS
The SMS sub-tab lets patients text your agent at one of your location’s numbers. See Text conversations for how the agent handles a text. Before you start, register the number for texting on the SMS tab in Store Settings.
If a user’s text inbox or another agent already uses the number, a warning says saving moves it to this agent. Clearing the number turns SMS off. You can’t save with SMS on and no number picked.
SMS is a premium add-on. If your plan doesn’t include it, users who can edit agent settings see the sub-tab with a New badge and an Upgrade plan button.
Announcements
Choose which announcements the agent plays to callers at the start of an interaction. You create and manage announcements on the Announcements page. This sub-tab only sets which ones are active for the agent.Settings that moved
The September 22, 2026 settings reorganization moved several agent settings to other pages. The agent works the same way. Only the place you configure it changed.Location
Your store name, website, contact phone and email, and address are on the Store Information tab of Store settings. The agent uses them when patients ask questions like “where are you located?” The business hours the agent works to are on the Call Routing sub-tab.Knowledge Base
The Knowledge Base is custom context the agent uses when answering patient questions. It’s organized into named sections, each with a Title and a Data field. Separate sections cover distinct topics, for example pharmacy policies, frequently asked questions, or notes about specific services, instead of one combined block. The agent reads every section when it answers. When you save the agent configuration, VOXO still checks your knowledge base for content that could interfere with agent behavior, such as directives, capability claims, or prompt-like instructions. If it finds any, a warning dialog lists the issues and the affected sections.Refill Config
Refill settings are on the PMS Config tab of the PMS page. This section describes how the agent handles refill requests on a call.Refills for reassigned prescriptions. If your PMS reassigns Rx numbers, enable the matching option on the PMS Config tab so the agent accepts refills filed against the new number. Without it, the agent may tell callers to contact their prescriber about a prescription that’s already filled and on hold. The available toggles depend on your connected PMS.
Matching the right prescription
On PioneerRx, Liberty RX, and BestRx, each of a patient’s medications is listed separately with its strength, so different strengths of the same drug aren’t combined into one entry.- On PioneerRx, the agent names and matches each prescription by the prescribed drug. It uses the dispensed item name only when the prescribed drug name is missing.
- If a caller names a medication that matches more than one of their prescriptions, including the same drug at two strengths, the agent names the strengths and asks which one they mean.
- A prescription number that a renewal has replaced still resolves to the current prescription, so a number read off an older bottle refills the right one.
- When a medication has more than one prescription on file and one has been transferred, the agent reports and refills the one that wasn’t transferred, even if the transferred one has the newer number.
Which status the agent reads back
On PioneerRx, a prescription’s own status and its stage in your pharmacy’s workflow are tracked separately. While the prescription is still moving through the workflow, the agent reads back the workflow stage. Once the work is finished, the caller hears the prescription’s own status.- A workflow stage your system reports but VOXO doesn’t recognize is left out instead of being read back as a status.
- A reversed prescription is reported as still being processed, not unavailable.
- A prescription your pharmacy hasn’t finished preparing is reported as not yet refillable, and no refill is filed against it.
- If the profile comes back without the details the refill check needs (an expiration date, the quantity remaining, or the days-supply and controlled-substance dates when refill-due limits are on), the agent tells the caller the prescription can’t be refilled, not that it’s still being prepared.
- If the profile has no days-supply end date, the refill check works it out from the last fill date plus the days supply. On PioneerRx, a renewed prescription that hasn’t been filled yet waits until the supply from the last fill of the same medication runs out. The refill is filed under the renewed prescription’s number. A prescription with no earlier fill isn’t held to refill-due limits.
Refilling several prescriptions
On PioneerRx, BestRx, and LibertyRx, when a caller asks for several prescriptions at once, the agent confirms the list with the caller, submits the refills together in one request, and reports the outcome for each prescription in one summary. A caller who asks to refill “everything” is asked which medications they mean. The agent doesn’t submit their whole profile. A caller who asks what they can refill hears the names of the prescriptions that are refillable now, so they can pick from that list.When a prescription can’t be refilled
When a caller asks to refill a prescription that can’t be refilled, the agent tells them why. Then it offers pharmacy staff the same way it does for requests it can’t handle: a transfer during business hours, your voicemail after hours, or your pharmacy’s phone number in chat and SMS. A prescription that’s already being filled is different. If a refill was already requested, or the prescription is being prepared, ready for pickup, or out for delivery, the agent gives its status and doesn’t offer staff. When your PMS marks a prescription refillable, the agent says it can be refilled, even if its status reads too early to refill or out of refills. If there’s a future fill date, the agent adds that the pharmacy won’t fill it until that date.Date of birth check
On PioneerRx and Liberty RX, the date of birth the caller gave is sent with each refill and compared with the one your PMS holds for that prescription. A prescription whose date of birth doesn’t match is reported back as not refillable and isn’t filed, so a refill is never submitted against someone else’s prescription. Pet (animal) profiles are the exception. Pet profiles don’t carry the owner’s date of birth, so on PioneerRx, when the date of birth doesn’t match or the caller gave none, the agent checks whether the profile is an animal one. If it is, the agent files the refill.Refills remaining and next fill date
Refills remaining. A caller who asks how many refills are left on a medication hears the count your PMS reports, for example “two refills”, not only whether it can be refilled right now. If your PMS doesn’t supply a count for that prescription, the agent says it doesn’t have it. Next fill date. Where your PMS supplies one, the agent reads the next fill date in the refill confirmation: after submitting the refill, it tells the caller the pharmacy won’t fill that prescription until that date. Prescriptions submitted together that share a date are named in one sentence. The agent doesn’t mention the date before the caller has asked for the refill, and it doesn’t read back a date that has already passed. A prescription that can’t be refilled yet is still answered with the reason why. The agent reads the next fill date only when Read future fill dates is on in the General sub-tab. If your PMS returns a promise time for the refill, the agent gives the promise time and doesn’t read the fill date.Tools
Auto Transfer Compounding is on the Call Routing sub-tab. Who Is Calling — Liberty RX locations only. The plugin download is on the Who is Calling tab of the PMS page. See Who Is Calling for install and troubleshooting steps. The agent books appointments on inbound calls, texts, and Web Agent chats, and on outbound Scheduling campaigns. It uses the calendars and event types you set up on the Scheduling page. See Booking appointments.Embedding the chat widget
Once the widget is configured on the Web Agent sub-tab, its embed code goes on your pharmacy website.1
Get the embed code
The embed code is on the Web Agent sub-tab of the agent’s Settings tab, under Embed code. The copy button copies it to your clipboard.
2
Add the code to your website
Paste the embed code into the HTML of every page on your pharmacy website where you want the widget to appear. Place it just before the closing
</body> tag. If your site uses a tag manager, you can add the snippet there instead.3
Verify the widget
Visit your website and confirm the widget appears in the correct position and opens as expected. To change a setting, use the Web Agent sub-tab. Saved changes apply without changing the code.