# Play Message (/docs/workflows/reference/category/voice/playMessage)

> For the complete documentation index, see [llms.txt](https://docs.tandemcx.ai/llms.txt). Any page on this site can be fetched as Markdown by appending `.md` to its URL.

Play a sound file or TTS on the current call.

Plays a prompt on the current call — either a recorded sound file or text-to-speech in a chosen language — and can gather the caller's reply. The prompt text supports `$(name)` variables. When collecting input, the caller's response is saved to a variable you name, the prompt can be made interruptible by speech or DTMF, and it can repeat a set number of times with a delay between; exhausting the repeats takes the `repeatLimitReached` exit, otherwise the flow continues on `default`.

**Category:** Voice  
**Provider:** Core  
**Latest version:** 1.0.0

## Fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Audio File (`prompt`) | dynamicDropdown | No | The audio file to play |
| Language (`language`) | dynamicDropdown | No | The language to use for the TTS prompt |
| Voice (`voice`) | dynamicDropdown | No | The voice to use for the TTS prompt. |
| Voice Engine (`engine`) | dynamicDropdown | No | The synthesis engine (generative, neural, or standard) for the selected voice. |
| Content (`content`) | textArea | No | The content of the TTS prompt. Example: `Text to speech prompt` |
| Input Type (`inputType`) | string | Yes | How to collect caller input: NONE (no input), DTMF (keypad), SPEECH (voice recognition), or BOTH. |
| Response Variable Name (`responseVariableName`) | string · variableName | Yes | The DTMF input or speech transcript will be stored in this variable. When input type is BOTH, whichever input is resolved first will be stored. |
| interruptible (`interruptible`) | boolean | No | Whether or not to make the prompt interruptible by DTMF or speech. |
| Speech Mode (`speechMode`) | string | Yes | What the caller is expected to say, which constrains recognition. Choose "Specific words or phrases" to match a list of keywords, "Anything the caller says" to capture an open-ended answer such as a name, or one of the others to capture a spoken value of a known shape. Use the input-length settings to require an exact number of characters. |
| Repeat Count (`repeatCount`) | number | No | The number of times the prompt should be repeated. |
| Repeat Delay (`repeatDelay`) | number | No | The amount of time between repeats (in seconds) |
| Maximum Input Length (`maxDTMFLength`) | number | No | The maximum allowed length of the user's input |
| Minimum Input Length (`minDTMFLength`) | number | No | The minimum allowed length of the user's input |
| Between-Input Timeout (`betweenInputTimeout`) | number | No | The allowed amount of time (seconds) between two consecutive inputs. |
| Terminating Character (`terminatingCharacter`) | string | No | DTMF character that signals the end of input (e.g. # to finish entering a number). |
| Valid Inputs (`validDTMFInputs`) | array of strings | No | Keypad values that should be considered valid |
| Speech Grammars (`speechGrammars`) | array of strings | No | Keywords or phrases for speech recognition to listen for |

## Exits

- `default` (required)
- `repeatLimitReached` (required)
- `invalidInput` (system)
- `fallback` (system)

System exits (auto-injected, hidden when unwired): `invalidInput`, `fallback`.
