Skip to main content

Manipulating Channel Variables

Basic Dialplan Usage

It's easy to use the pre-existing value of a variable to change call flow, an example, found in the default configuration:

 <condition field="${call_debug}" expression="^true$" break="never">
<action application="info"/>

This will run the info app anytime a call hits this extension with the call_debug variable set to true.

Trimming and Substrings

You can select a portion of a variable's value, (just like a substr function) like this:

 var = 1234567890
${var:0:1} // 1
${var:1} // 234567890
${var:-4} // 7890
${var:-4:2} // 78
${var:4:2} // 56

Using anything <= 0 as the length will return from the specified position to the end of the string.

Search and replace

Using an inline Lua command, you can perform a search and replace against a text string:

From the dialplan:

<action application="set" data="RETURN_STRING=${lua(~stream:write(tostring(string.gsub('STRING_TO_SEARCH', 'STRING_TO_FIND', 'REPLACEMENT_STRING'))))}"/>

From the CLI:

 lua ~stream:write(tostring(string.gsub("STRING_TO_SEARCH", "STRING_TO_FIND", "REPLACEMENT_STRING")))

Setting a variable as undefined

You can set a variable to _undef_.

by default you might see

From: "sipp" <sip:199098@>;tag=c8BKQ1ta440Hj.
Remote-Party-ID: "sipp" <sip:199098@>;party=calling;screen=yes;privacy=off.

if you set

<action application="set" data="effective_caller_id_name=_undef_"/>

you get

From: <sip:199098@>;tag=c8BKQ1ta440Hj.
Remote-Party-ID: <sip:199098@>;party=calling;screen=yes;privacy=off.

FYI: in Version 1.0.4 (exported) this will result in

From: <sip:199098@>;tag=c8BKQ1ta440Hj.
Remote-Party-ID: "_undef_" <sip:199098@>;party=calling;screen=yes;privacy=off.