transfer
Transfer the execution of the script to a different SWML section, URL, or Relay application. Once
the transfer is complete, the script will continue executing SWML from the new location.
| Name | Type | Default | Description |
|---|---|---|---|
transfer Required | object | - | An object that accepts the transfer parameters. |
transfer Parameters
| Name | Type | Default | Description |
|---|---|---|---|
dest Required | string | - | Specifies where to transfer to. The value can be one of:
|
params Optional | object | - | Named parameters to send to a section, URL, or application. |
Valid Destination Values
The destination string can be one of:
"section_name"- section in the current document to execute. (For example:execute: main)"relay:<relay application>"- relay application to notify (currently not implemented)"https://example.com/sub-swml.yaml"- URL pointing to the document to execute. An HTTP POST request will be sent to the URL. Authentication can also be set in the url in the format ofusername:password@url. Theparamsobject is passed, along with the variables and theCallobject.
Examples
Basic transfer to a URL
- YAML
- JSON
version: 1.0.0
sections:
main:
- transfer:
dest: "https://example.com/next"
{
"version": "1.0.0",
"sections": {
"main": [
{
"transfer": {
"dest": "https://example.com/next"
}
}
]
}
}
Basic transfer to a section
- YAML
- JSON
version: 1.0.0
sections:
main:
- play:
url: 'say:Transferring you to another section'
- transfer:
dest: subsection
- play:
url: 'say:Back!'
subsection:
- play:
url: 'say:inside a subsection'
{
"version": "1.0.0",
"sections": {
"main": [
{
"play": {
"url": "say:Transferring you to another section"
}
},
{
"transfer": {
"dest": "subsection"
}
},
{
"play": {
"url": "say:Back!"
}
}
],
"subsection": [
{
"play": {
"url": "say:inside a subsection"
}
}
]
}
}
Named parameter with sub-parameters
- YAML
- JSON
version: 1.0.0
sections:
main:
- transfer:
- dest: "https://example.com/next"
- params:
- foo: "bar"
{
"version": "1.0.0",
"sections": {
"main": [
{
"transfer": [
{
"dest": "https://example.com/next"
},
{
"params": [
{
"foo": "bar"
}
]
}
]
}
]
}
}
Transfer to a SWML script hosted on a server
- YAML
- JSON
version: 1.0.0
sections:
main:
- prompt:
play: >-
say: Press 1 to be transfered to the Sales department, 2 for marketing
department or anything else to listen to some music.
- switch:
variable: prompt_value
case:
'1':
- transfer:
dest: 'https://<YOUR_NGROK_UUID>.ngrok-free.app'
params:
where: sales
'2':
- transfer:
dest: 'https://<YOUR_NGROK_UUID>.ngrok-free.app'
params:
where: marketing
- play:
url: 'https://cdn.signalwire.com/swml/April_Kisses.mp3'
{
"version": "1.0.0",
"sections": {
"main": [
{
"prompt": {
"play": "say: Press 1 to be transfered to the Sales department, 2 for marketing department or anything else to listen to some music."
}
},
{
"switch": {
"variable": "prompt_value",
"case": {
"1": [
{
"transfer": {
"dest": "https://<YOUR_NGROK_UUID>.ngrok-free.app",
"params": {
"where": "sales"
}
}
}
],
"2": [
{
"transfer": {
"dest": "https://<YOUR_NGROK_UUID>.ngrok-free.app",
"params": {
"where": "marketing"
}
}
}
]
}
}
},
{
"play": {
"url": "https://cdn.signalwire.com/swml/April_Kisses.mp3"
}
}
]
}
}
A minimal server for this SWML script can be written as follows:
- Python/Flask
- JavaScript/Express
from flask import Flask, request
from waitress import serve
app = Flask(__name__)
@app.route("/", methods=['POST'])
def swml():
content = request.get_json(silent=True)
print(content)
return '''
version: 1.0.0
sections:
main:
- answer: {}
- play:
url: 'say: Welcome to the {} department.'
'''.format(content['params']['where'])
if __name__ == "__main__":
serve(app, host='0.0.0.0', port=6000)
const express = require("express");
const app = express();
app.use(express.json());
// note the POST method
app.post("/", (req, res) => {
const data = req.body;
console.log(data);
res.send(`
version: 1.0.0
sections:
main:
- answer: {}
- play:
url: 'say: Welcome to the {} department.'
`);
});
const port = 6000;
app.listen(port);
This server (running on localhost) can be made accessible to the wider web (and thus this SWML script) using forwarding tools like ngrok.
You can follow our Testing webhooks with ngrok guide to learn how.
The server will be sent the payload in the following format:
{
"call": {
"call_id": "<call_id>",
"node_id": "<node_id>",
"segment_id": "<segment_id>",
"call_state": "answered",
"direction": "inbound",
"type": "phone",
"from": "<address>",
"to": "<address>",
"from_number": "<address>",
"to_number": "<address>",
"headers": [],
"project_id": "<your Project UUID>",
"space_id": "<your Space UUID>"
},
"vars": {
"answer_result": "success",
"prompt_result": "match_digits",
"prompt_value_raw": "2",
"prompt_value": "2"
},
"params": { "where": "marketing" }
}
The call object is described in detail in the introduction.
All variables created within the SWML document are passed inside vars,
and the params object contains the parameters defined in the params parameter of transfer.