Evalgent
Back to Blog
Voice AI Testing

AI Travel Agent by Phone: Are Itinerary Changes Accurate?

Deepesh Jayal
15 min read
AI Travel Agent by Phone: Are Itinerary Changes Accurate?
On this page

This post is for the product team at a travel software company. Your platform serves travel agencies, cruise sellers or a corporate travel management company (TMC). You built a voice agent that answers when travelers call to change a trip. It moves flights, swaps cabins, adds hotel nights and changes cruise staterooms. Then it confirms, sends the new itinerary and writes the change back to the booking system or GDS.

An AI travel agent phone call is the front door to that workflow. A speech error at the door does not stay in the call. It becomes a hotel night on the wrong date, a ticket for the wrong traveler, or a fare the client never approved.

This post covers inbound itinerary changes. If your agent calls airlines on a traveler's behalf, read when AI calls airlines for travelers. If you are buying rather than building, start with how to evaluate a travel booking voice agent vendor.

16%
GPT-4 accuracy on duration questions in the Test of Time benchmark (Fatemi et al.)
68.7%
Best rate of recordings with every critical value recovered (VoiceCodeBench)
24 h
Hold or cancel window for bookings made 7+ days out (14 CFR 259.5)
3 h / 6 h
Domestic / international change that counts as significant (14 CFR 260.2)

What an itinerary change call has to get right

A change call has five stages. The agent captures the request. It prices the change. It confirms with the traveler. It commits the change and reissues the ticket. Then it writes back and sends the new itinerary.

Itinerary change: any modification to a booked trip after purchase. That includes new dates or flights, a cabin or fare class change, added or removed hotel nights, a new cruise sailing or cabin category, and name corrections.

PNR (passenger name record): the booking file in the GDS or supplier system. Travelers know it by its six-character record locator. One PNR can hold several travelers, several segments and several tickets.

The industry is moving this way. In August 2026, Travel Weekly reported that House of Travel in New Zealand is piloting an AI tool for airline ticket changes. It runs on the company's Amadeus API layer. A consultant enters a PNR and a plain-English request. The tool returns flights with the fare difference, tax difference and change fee. Mark Leadbetter, its head of IT, sees this as an early step toward AI agents handling transactional phone calls (Travel Weekly). His warning applies to every builder: "You're still responsible for the output."

Corporate platforms are adding voice input too. ITILITE describes voice trip booking that turns a spoken sentence into "live, policy-filtered flight and hotel results" (ITILITE, June 2026). Voice is becoming an input to booking systems. That raises the cost of a misheard field.

Here is what a correct change looks like at each stage:

StageWhat must be rightWhere it is checked
CaptureTraveler, segment, new date and time, cabinReadback with month names and local times
PriceFare difference, tax difference, change fee, residual valuePricing oracle, not the model
ConfirmTraveler accepts the exact total and termsRecorded "yes" to a specific number
CommitSegment confirmed, ticket reissuedSegment status and ticket number
Write-backTrip record, hotel, transfer, expense, noticeDiff of record before and after

Seven ways itinerary changes go wrong

Each failure below can pass a transcript review. The agent sounds polite and the summary reads well. The damage shows up in the record.

Failure taxonomy grid for an AI travel agent phone line: seven itinerary change failures, each with what the traveler said, what the system stored, and what breaks downstream

1. Wrong date: month/day order, time zones and overnight flights

Dates fail in three ways, and they stack.

Format order. A traveler says "zero five eleven." A US system reads May 11. A UK traveler meant 5 November. Any spoken date where both numbers are 12 or under is ambiguous. Your agent should never store one without a month name readback: "That's Thursday, November fifth?"

Time zones. A flight time is local to its airport. A hotel night is local to the hotel. Your server runs on UTC. Three clocks meet in one change.

Overnight flights. A JFK to London flight leaves in the evening and lands the next morning. The traveler says "I land on the fifth." The agent hears "the flight on the fifth" and moves the departure instead. Or it books the hotel for the departure date. Either way, one night is wrong.

Language models are weak at exactly this math. Google researchers built the Test of Time benchmark to measure temporal reasoning. On its duration questions, GPT-4 scored 16.00% and Gemini 1.5 Pro 13.50%. The most common error was "a deviation of precisely one day from the ground truth label." That is the overnight flight bug in a lab setting. Time zone questions scored higher, 88.00% for GPT-4, but that is still roughly one miss in eight.

The lesson is simple. Never let the model do date math. Compute arrival dates in code from IANA time zones. Python's zoneinfo module handles DST shifts for you.

2. Wrong passenger in a multi-traveler PNR

A family of four shares one PNR. The mother calls: "Move my flight to Friday. The kids stay on Thursday." The agent changes all four, or changes the first name in the record.

Multi-traveler PNRs need passenger-level actions. The agent must name the traveler being changed and the ones staying put. It must also split the PNR if the system requires it. Then it must check that each traveler still has a valid ticket.

Names carry a second risk. Under the Secure Flight rule, airlines must request each passenger's full name, date of birth and gender (49 CFR 1560.101, Federal Register). Porter Airlines tells passengers to give their "Name (as it appears on your passport)" (Porter). A voice agent that "corrects" a spelling from speech can break that match. Treat name edits as a separate, human-reviewed flow. Our post on STT accuracy for names and entities covers why names fail.

3. Fare difference misquoted

The traveler asks, "What will this cost me?" The model answers from whatever number it saw last. Often that is the raw fare difference, without taxes or fees.

Here is a worked example with illustrative numbers:

ItemAmount
New fare$798.10
Original fare−$612.40
Tax difference+$14.20
Change fee (per fare rules, assumed)+$75.00
Amount to collect$274.90

If the agent says "$185.70," it quoted only the fare line. The traveler accepts $185.70. The card is charged $274.90. That gap becomes a dispute, and the call recording proves the agent said the lower number.

The fix is a pricing oracle. The supplier or GDS pricing call returns the total. The agent may only speak a number that came from that call, in that turn. Our guide to tool-argument accuracy from speech explains how to verify what the agent passed and spoke.

4. Policy violations approved

Corporate travelers call when they are in a hurry. "Just put me on the 6 p.m., business is fine." Your client's travel policy may cap cabin by flight length or require approval above a fare limit.

The model wants to be helpful. It agrees. The TMC then owns an out-of-policy ticket, and the client's finance team sees it a month later.

Give the agent the policy as data, and check each offer in code. Out-of-policy options must route to approval. They should never get a verbal "you're confirmed." The tau-bench study is a warning here. It tested tool-using agents on policy-bound tasks, including an airline domain. Even gpt-4o succeeded on fewer than 50% of tasks, and retail pass^8 was below 25%. Consistency across repeat runs was worse than single-run success.

5. Cruise cabin category codes misheard

Cruise changes run on category codes. On Royal Caribbean's Oasis class, a Royal Caribbean Blog guide lists 1D as a midship balcony quad, 2D as a midship balcony double and 4D as a forward or aft balcony double. It notes that "a 7D tends to be cheaper than a 1D."

Now picture a phone line. "Two D" and "two B" differ by one consonant burst. "One D" and "four D" differ by a fast digit. A misheard category code moves a family of four into a room for two. Or it reprices the sailing.

Codes like these are hard for speech recognition. VoiceCodeBench tested 19 ASR systems on 1,482 audited entities. The best system recovered every critical value in only 68.7% of recordings. The authors found that word error rate had little rank agreement with critical-entity accuracy (ρ = −0.28). A good WER does not protect your category codes.

Read the code back with its meaning: "Category 2D, a midship balcony for two guests. Is that right?" The description catches what the code alone hides.

6. Change confirmed on the call but never ticketed

This is the most expensive failure. The agent says "You're all set for Friday." The segment is only waitlisted, or the new segment is confirmed but the ticket was never reissued.

GDS status codes tell the truth. In Travelport's segment definitions, HK means "Holds Confirmed," HL means "Have Waitlisted" and UC means "Unable Segment Closed." Our airline calling guide maps these codes to trip statuses in detail.

For inbound changes, add one rule. A change is complete only when every changed traveler has a confirmed segment and a reissued ticket number. Until then, the agent must say "requested," not "confirmed."

Spoken confirmation versus ticketed record: the agent says confirmed for Friday while the PNR shows a waitlisted segment and no reissued ticket, so the change is still pending

7. Refund versus credit confusion

Travelers often call to cancel part of a trip. The agent must know which outcome it is offering.

Two US rules shape this. Under 14 CFR 259.5(b)(4), carriers must let a booking made one week or more before departure be held or cancelled without penalty for at least 24 hours. Under 14 CFR part 260, a carrier "must not deem a consumer to have accepted an offer for travel credits" in place of a refund "unless the consumer affirmatively agrees" (section 260.7). A significant change means three hours or more for domestic itineraries and six hours or more for international ones (section 260.2).

So an agent that says "I've put the value on a travel credit for you" may be making a choice the traveler had a right to refuse. Make "refund," "credit" and "24-hour void" three separate tools with separate confirmations. This is general information as of October 2026, not legal advice.

Guards in code: dates, travelers, fares and tickets

Here is a simplified, framework-neutral sketch. It assumes your agent calls tools for pricing and commit. Wire it to your own booking API.

# Simplified sketch. Not tied to any GDS or voice framework.
from datetime import date, datetime, timedelta
from zoneinfo import ZoneInfo

def date_candidates(a: int, b: int, year: int) -> set[date]:
    """'05/11' could be May 11 or Nov 5. Return every valid reading."""
    out = set()
    for m, d in ((a, b), (b, a)):
        try:
            out.add(date(year, m, d))
        except ValueError:
            pass
    return out  # more than one -> confirm with a month name

def local_arrival(dep_local: datetime, dep_tz: str,
                  block_min: int, arr_tz: str) -> datetime:
    dep = dep_local.replace(tzinfo=ZoneInfo(dep_tz))
    return (dep + timedelta(minutes=block_min)).astimezone(ZoneInfo(arr_tz))

def quote_ok(spoken_total: float, oracle_total: float) -> bool:
    return abs(spoken_total - oracle_total) < 0.01  # speak only oracle numbers

def change_complete(changed_pax: list[str], pnr: dict) -> bool:
    for pax in changed_pax:
        segs = [s for s in pnr["segments"] if pax in s["pax"]]
        if any(s["status"] != "HK" for s in segs):
            return False
        if not pnr["tickets"].get(pax, {}).get("reissued"):
            return False
    return True

Example: `date_candidates(5, 11, 2026)` returns May 11 and November 5, so the agent must ask. For a JFK departure at 7:30 p.m. on November 4, 2026, with a 415-minute block, `local_arrival` returns 7:25 a.m. on November 5 in London. The hotel check-in is the fifth, not the fourth. `change_complete` stays false until each changed traveler holds HK segments and a reissued ticket.

The hard part is making sure the agent calls these guards every time. That is a testing problem.

How to test an AI travel agent phone line before changes ship

Every prompt or flow change on an AI travel agent phone line reaches every client at once. Test against fixtures, not live bookings.

1. Build itinerary fixtures. Create sandbox PNRs that mirror real trips: one-way, round-trip, open-jaw, overnight long-haul, air plus hotel, and a cruise with a pre-cruise hotel. Give each a hidden truth record of what a correct change looks like.

2. Write a date and time zone matrix. Cover spoken formats ("the fifth," "zero five eleven," "next Friday," "a week from Thursday"). Cover arrivals across midnight and the date line, and departures on a DST change weekend. Pass means the stored date matches the truth record in local time.

3. Seed multi-traveler PNRs. Use families and group bookings where only one or two travelers change. Pass means unchanged travelers keep their segments and tickets untouched.

4. Run a fare oracle check. For each change, compare the total the agent spoke with the pricing call's total. Pass means an exact match, including taxes and fees.

5. Probe policy limits. Request options just inside and just outside each cap: cabin, fare ceiling, advance purchase, preferred hotel rate. Pass means every outside option routes to approval.

6. Stress cruise codes and names. Play category codes and spelled names over 8 kHz phone audio with accents and background noise. Pass means a readback with the category meaning, and no silent name edits.

7. Check the commit. After each test call, read the PNR. Pass means segment status, ticket numbers, hotel dates and the sent itinerary all match the truth record.

8. Set a release bar. Use the rule of three for zero-tolerance cells. Zero failures in 300 runs puts the true failure rate below about 1% at 95% confidence.

Test matrix for itinerary changes: scenario rows such as overnight arrival, multi-passenger split, fare difference and cruise category, crossed with clean, noisy, accented and interrupting caller conditions, with pass rules

Why test whole changes instead of single fields? Errors compound. Say each of five fields is right 98% of the time. The full change is right only 0.98^5 ≈ 90.4% of the time. That is about one bad itinerary in ten. These numbers are illustrative, but the math is not.

Size the matrix honestly. Six date forms times four time zone cases times three caller profiles gives 72 cells. Five runs per cell means 360 calls per release. That is too many to make by hand, which is why most teams skip it.

This is where synthetic callers earn their keep. Evalgent generates test scenarios from your agent's prompt and flows, including policies and hard constraints. Its caller profiles vary accent, pace, interruptions, response delay and background noise. It reaches your agent over PSTN, SIP or WebRTC. It judges calls from the audio, not only the transcript. That matters when the question is whether the traveler said "two D" or "two B."

If one agent serves hundreds of agencies with different policies, see how to QA one agent across many customer setups. Gate each release using voice agent prompt versioning.

Monitoring: ticketed itinerary vs spoken confirmation

Tests catch what you thought of. Production shows the rest. The core monitor compares what the agent said with what the record shows.

Track these per client and per week:

MetricFormulaAlert when
Spoken-vs-ticketed mismatchCalls where confirmed fields differ from the PNR ÷ calls with a confirmed changeAbove 0 for any traveler-facing field
Unticketed confirmationsCalls saying "confirmed" with no reissued ticket within 1 hour ÷ confirmed changesAny occurrence
Quote driftCalls where spoken total ≠ charged total ÷ priced changesAbove 0
Out-of-policy commitsChanges committed outside the policy envelope ÷ corporate changesAny occurrence
Wrong-traveler editsChanges touching travelers not named on the call ÷ multi-traveler changesAny occurrence
Credit without consentCredits issued with no recorded "yes" to a credit ÷ cancellationsAny occurrence

Most of these need two sources: the call audio and the booking record after the call. A transcript alone cannot tell you whether the traveler heard "November fifth" or "May eleventh."

Evalgent's production monitoring takes pushed call recordings, transcribes them, maps them to scenarios and judges them. It flags tool-call failures, policy failures, PII leakage and latency spikes, with fix recommendations. Pair that with a nightly job that diffs PNRs against confirmed changes. For the general setup, see how to monitor voice agents in production.

Hotel nights fail the same way when dates drift; see hotel AI reservation errors. Scheduling agents share the date problem too; our appointment scheduling testing guide covers relative dates.

Frequently asked questions

Can an AI travel agent change my flight by phone?

An AI travel agent can change a flight by phone if the platform connects it to the booking system and lets it price, commit and reissue tickets. Some setups only capture the request for a human to finish. Travelers should hear a month-name date readback, an exact total and a "ticketed" confirmation, not just "you're all set."

How accurate are AI travel agents at itinerary changes?

Itinerary change accuracy depends on guards, not the model alone. Google's Test of Time benchmark found GPT-4 at 16% on duration questions, often off by one day. VoiceCodeBench found even the best ASR missed a critical value in nearly a third of recordings. Accurate agents compute dates in code, quote from a pricing oracle and verify the ticket.

How do you test date and time zone handling in a voice agent?

Test date handling with a matrix of spoken formats, ambiguous numeric dates like 05/11, overnight arrivals, date-line crossings and DST weekends. Compute expected local dates with IANA time zones in code. Pass means the stored departure, arrival and hotel dates all match a hidden truth record in local time, across several caller accents.

What happens if the AI changes the wrong passenger on a booking?

A wrong-passenger change can move a child off a family's flight, void the wrong ticket or break the name match to a passport. The fix is passenger-level actions: the agent names who changes and who stays, splits the PNR when required, and verifies each traveler's segments and tickets after the commit.

How do you check a fare difference quoted by an AI agent?

Check a quoted fare difference against the pricing call's total for that change. The total should include the new fare minus the old fare, the tax difference and any change fee. The agent should speak only numbers from the current pricing response. Monitor production for any gap between the spoken and charged totals.

How do you stop an AI agent approving out-of-policy travel?

Stop out-of-policy approvals by giving the agent the travel policy as data and checking each offer in code before it speaks. Options over a cabin, fare or advance-purchase limit must route to an approver. Test with options just inside and just outside each limit, and alert on any out-of-policy commit in production.

How do you know an itinerary change was actually ticketed?

An itinerary change is ticketed when every changed traveler has a confirmed segment, such as status HK, and a reissued ticket number. A waitlisted HL segment or a missing ticket means the change is pending. Re-read the PNR after the call and compare it with what the agent told the traveler.

What should an AI travel agent confirm before ending the call?

Before ending the call, an AI travel agent should confirm the traveler's name, each new date with a month name and local time, the cabin or category with its meaning, and the exact total. It should state whether the outcome is a refund, credit or void, and say when the updated itinerary will arrive.

The bottom line

An AI travel agent phone line is only as accurate as the booking record it leaves behind. Compute dates in code, quote from a pricing oracle, act per passenger, and say "confirmed" only after the ticket is reissued.

Related Articles