Set AGENT_NAME_SPOKEN=Eva (example) and document name/phone behaviour

- .env.example: add AGENT_NAME_SPOKEN=Eva.
- CLAUDE.md: note the agent-name respelling (AVA -> Eva, "EE-vuh"), that the
  caller-ID is injected pre-spelled (model mangles raw digits), and that the
  phone is confirmed near the END of the call, not led with.

(.env itself is gitignored; AGENT_NAME_SPOKEN=Eva set there and live.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
tocmo0nlord
2026-06-26 02:33:08 +00:00
parent 703c902d0f
commit 0605025113
2 changed files with 13 additions and 3 deletions

View File

@@ -55,5 +55,7 @@ KOKORO_MODEL_DIR=/home/tocmo0nlord/pipecat-run/models
# ── Call behaviour ─────────────────────────────────────────────────────────── # ── Call behaviour ───────────────────────────────────────────────────────────
AGENT_NAME=AVA AGENT_NAME=AVA
# How the name is SPOKEN (TTS only; logs/Odoo keep AGENT_NAME). "Eva" -> "EE-vuh".
AGENT_NAME_SPOKEN=Eva
# Grace pause after the goodbye before the carrier leg is dropped (seconds). # Grace pause after the goodbye before the carrier leg is dropped (seconds).
HANGUP_DELAY_SECS=4.0 HANGUP_DELAY_SECS=4.0

View File

@@ -66,8 +66,15 @@ raw digit strings as cardinals with symbols spoken aloud ("983-4969" → "nine h
eighty-three dash forty-nine sixty-nine"). This subclass normalizes the text in `run_tts` eighty-three dash forty-nine sixty-nine"). This subclass normalizes the text in `run_tts`
(which receives the full sentence) so US phone numbers and 45 digit runs (street numbers, (which receives the full sentence) so US phone numbers and 45 digit runs (street numbers,
zips) are spoken one digit at a time — country code dropped, no "dash"/parens; dates and zips) are spoken one digit at a time — country code dropped, no "dash"/parens; dates and
times left natural ("Monday the fifth", "three thirty"). Deterministic, so it's robust to times left natural ("Monday the fifth", "three thirty"). It also respells the all-caps agent
whatever the model emits. Keep it. `tts_normalize()` holds the rules. name to `AGENT_NAME_SPOKEN` (Kokoro reads "AVA" as "A-V-A"; set to "Eva" so it says
"EE-vuh"). Deterministic, so it's robust to whatever the model emits. Keep it.
`tts_normalize()` holds the rules.
> Note: don't rely on the model to read raw digits — it mangles them (it emitted
> "197-three five seven three…" once). The caller-ID is injected into the prompt **already
> spelled out** so AVA just repeats clean words; `tts_normalize` is the backstop for any
> other numbers.
--- ---
@@ -215,6 +222,7 @@ STREAM_TOKEN=
# Call behaviour # Call behaviour
AGENT_NAME=AVA AGENT_NAME=AVA
AGENT_NAME_SPOKEN=Eva # how the name is pronounced in TTS (logs/Odoo keep AGENT_NAME)
HANGUP_DELAY_SECS=4.0 # grace pause after the goodbye before dropping the carrier leg HANGUP_DELAY_SECS=4.0 # grace pause after the goodbye before dropping the carrier leg
ENABLE_TOOLS= ENABLE_TOOLS=
VAD_CONFIDENCE=0.5 VAD_CONFIDENCE=0.5
@@ -244,7 +252,7 @@ Replies are kept to one short sentence.
| Field | In-call behavior | Logged as | | Field | In-call behavior | Logged as |
|-------|------------------|-----------| |-------|------------------|-----------|
| Full name | Asks for last name if only a first is given | `patient_name` / lead `contact_name` | | Full name | Asks for last name if only a first is given | `patient_name` / lead `contact_name` |
| Phone | Reads back the caller-ID number; if the caller declines, uses the number they give | `callback_number` (+ `phone_confirmed`) | | Phone | Confirmed **near the end** (not led with); reads back the caller-ID — injected pre-spelled so it's said digit-by-digit — and if the caller declines, uses the number they give | `callback_number` (+ `phone_confirmed`) |
| Office / city | Asks city/area; when the caller names a place that matches an office, **confirms that office and moves on** — never offers/compares other offices or asks them to choose; names the nearest only if nothing matches | folded into `reason` prefix | | Office / city | Asks city/area; when the caller names a place that matches an office, **confirms that office and moves on** — never offers/compares other offices or asks them to choose; names the nearest only if nothing matches | folded into `reason` prefix |
| Reason | Captured from the conversation | `reason` | | Reason | Captured from the conversation | `reason` |
| Insurance | **Log only** — asks the plan, never promises/confirms/denies coverage or treatment (even a listed plan); staff verify on callback | `insurance` (note: "log only — staff to verify") | | Insurance | **Log only** — asks the plan, never promises/confirms/denies coverage or treatment (even a listed plan); staff verify on callback | `insurance` (note: "log only — staff to verify") |