# Sinch Voice Application Markup Language (SVAML) SVAML is a call control markup language developed by Sinch. When your application or server receives a [callback event](/docs/voice/api-reference/voice/callbacks) from the Sinch platform, it can respond with a *SVAML object* to control the voice call. The SVAML object type is defined like this: ## SVAML Quick Reference A SVAML object is made up of Actions and Instructions. A SVAML object must contain exactly one action but can have as many instructions as necessary. ## Actions | Action | Functionality | ICE | ACE | PIE* | | --- | --- | --- | --- | --- | | [hangup](/docs/voice/api-reference/svaml/actions#hangup) | Ends the call | ☑ | ☑ | ☑ | | [continue](/docs/voice/api-reference/svaml/actions#continue) | Continues the call | ☐ | ☑ | ☑ | | [connectPstn](/docs/voice/api-reference/svaml/actions#connectpstn) | Dictates how the PSTN call will be connected | ☑ | ☐ | ☑ | | [connectMxp](/docs/voice/api-reference/svaml/actions#connectmxp) | Determines whether the app-app call will be connected | ☑ | ☐ | ☐ | | [connectConf](/docs/voice/api-reference/svaml/actions#connectconf) | Connects the call to a conference | ☑ | ☑ | ☑ | | [connectSip](/docs/voice/api-reference/svaml/actions#connectsip) | Connects the call to a SIP server | ☑ | ☐ | ☑ | | [runMenu](/docs/voice/api-reference/svaml/actions#runmenu) | Plays a menu to the callee | ☑ | ☑ | ☑ | | [park](/docs/voice/api-reference/svaml/actions#park) | Puts an incoming call on hold | ☑ | ☐ | ☐ | PIE* callbacks PIE callbacks are not available for DATA calls; only PSTN and SIP calls. ## Instructions Note: Instructions must always accompany an action and will not work standalone. | Instruction | Functionality | ICE | ACE | PIE* | | --- | --- | --- | --- | --- | | [playFiles](/docs/voice/api-reference/svaml/instructions#playfiles) | Plays Interactive Voice Response (IVR) files | ☑ | ☑ | ☑ | | [say](/docs/voice/api-reference/svaml/instructions#say) | Plays a text-to-speech message | ☑* | ☑ | ☑ | | [sendDtmf](/docs/voice/api-reference/svaml/instructions#senddtmf) | Send DTMF tones | ☑ | ☐ | ☑ | | [setCookie](/docs/voice/api-reference/svaml/instructions#setcookie) | Sets a cookie that can be accessed throughout the call | ☑ | ☑ | ☑ | | [startRecording](/docs/voice/api-reference/svaml/instructions#startrecording) | Starts call recording | ☑ | ☑ | ☑ | | [stopRecording](/docs/voice/api-reference/svaml/instructions#stoprecording) | Stops call recording | ☐ | ☐ | ☑ | | [answer](/docs/voice/api-reference/svaml/instructions#answer) | Forces the callee to answer the call. | ☑ | ☐ | ☐ | PIE* callbacks PIE callbacks are not available for DATA calls; only PSTN and SIP calls. ### `say`* in ICE callbacks When using the `say` instruction with ICE callbacks, not all providers will deliver the message to the callee. To ensure the `say` instruction is heard, use the `answer` instruction before `say`, as in the following example: ```json Example of say instruction in ICE callbacks instructions: [ { "name": "answer", }, { "name": "say", "text": "This is a say command issued from an instruction.", "locale": "en-US", }, ] ```