Answering hours and the closed line
A call outside your schedule never reaches a language model. The runtime answers, plays your closed line in the agent's own voice, then hangs up.
Answering hours declares a window for each weekday. A call that lands outside every window never reaches a pipeline: no language model, no speech recognition, no media socket. The runtime answers the leg, plays your closed line in the agent's own voice, and hangs up. The feature is off until you turn it on, and every day starts from 09:00 to 17:00. The reason to run a schedule at all, rather than letting the agent answer around the clock, is written up at after-hours answering service.
Where these settings live
Everything here is stored on the agent, not on a version, in the same class as call handling. Reverting to an earlier version does not restore old answering-hours values.
A published version is read-only, so create a draft to change these controls. The card sits at the top of the Call handling section of the editor.
The schedule
| Field | Shape | Default |
|---|---|---|
| Days | One window per weekday, Monday to Sunday, or closed | 09:00 to 17:00, all seven days |
| Times | 24-hour HH:MM, plus the literal 24:00 for midnight at the close of the day | n/a |
| Closed message | Up to 300 characters | Empty |
| Outside hours | Play the closed message, or forward to a number | Play the closed message |
A window whose close is earlier than its open runs past midnight. A Friday set to 18:00 to 02:00 reads as open at 00:30 on Saturday, because the small hours belong to the previous day's shift.
Set a day closed rather than giving it a zero-length window. Open all day is
00:00 to 24:00.
Which timezone the window is read in
The check reads the agent's own timezone first, then the workspace's, then
Australia/Sydney. The agent's own value is the Call timezone field under
General.
What a caller hears when you are closed
The closed line is rendered once, in the agent's own voice, and stored as an
8 kHz WAV in the public agent-audio bucket. Telnyx fetches that file itself
and plays it, which is what lets a closed call run with no pipeline behind it.
With no rendered clip the caller hears Telnyx's stock text-to-speech reading the same words. The voice is worse and the caller still learns the business is shut.
Forwarding instead of a message
Set Outside hours to forward and give it a number in international format. The call rings that number for 25 seconds. If the number rings out, the caller hears the closed line instead of silence.
Closing early
Closing early shuts the line from the moment you set it until the first scheduled opening after that instant, then clears itself. There is no second write to make in the morning and no line left shut for a week because nobody reopened it.
Closing early does nothing while answering hours is off.
What the platform refuses to save
Four writes are rejected, on the editor form, the agent API and the MCP alike:
- A day whose open and close are the same time.
- Answering hours on with an empty closed message. The agent would answer and say nothing before hanging up.
- Answering hours on with every day closed. The schedule could never take a live call.
- Outside hours set to forward with no valid number.
When the check cannot run
The check fails open. A missing configuration, an unreadable timezone and an unreachable database each answer the call normally. Refusing a customer's call is worse than taking one call inside a closed window.
Where a closed call shows up
A call turned away by the schedule still writes a session, with the end reason
outside_hours and whether the caller was transferred or abandoned the call.
Closed calls appear in
calls and analytics beside answered ones.
When a rendered clip goes stale
The stored clip records the text, the voice id, the speech provider, the model and the speed it was rendered from. Change any of those five and the clip is marked stale, so you can render it again.
Three changes do not mark it stale today: an ElevenLabs tone change, an edit to the pronunciation dictionary, and a provider changing its own default model under an agent that names no model.