Export原理
普通export用法
在dialplan中經(jīng)常會用到export,如下所示:
<action application="export" data="myvar=test"/>
上面的xml在執(zhí)行后,會在本地通道中修改如下:
>myvar=test
>export_vars=<other_export_vars>,myvar
在本地變量中增加myvar,同時修改export _ vars變量,將export指定的變量附加到后面。
這樣,在bridge時候,系統(tǒng)會將export _ vars指定的變量從a腿導入到b腿上。
帶nolocal的export用法
有時候,僅僅需要將變量設置到b腿,而不需要設置到a腿,所以這里就需要參數(shù)nolocal。用法如下:
<action application="export" data="nolocal:myvar=test"/>
上面的命令在執(zhí)行后,會在本地增加的變量如下:
>nolocal:myvar=test
>export_vars=<other_export_vars>,nolocal:myvar
也就是說增加的變量名稱就是nolocal:myvar, 由于有nolocal前綴,就可以跟本地變量很好的區(qū)別開。
同樣,在bridge的時候,系統(tǒng)也會將export_vars指定的變量從a腿導出到b腿。
巧妙的是,在導出nolocal:myvar的時候,會自動將nolocal:前綴去掉,從而達到將變量只設置到b腿的目的。
而如果留意就會發(fā)現(xiàn),使用下面的命令還是可以獲取到值的:
uuid_getvar <a_leg_uuid> nolocal:myvar
而使用下面的命令是獲取不到任何值的:
uuid_getvar <a_leg_uuid> myvar
Export用法
知道了export的原理之后,即使api命令中沒有uuid_export,我們也可以模擬出來。如下:
用法1:只將指定的變量導出到b腿
originate {nolocal:sip_h_X-AutoAccept=true,export_vars='nolocal:sip_h_X-AutoAccept'}user/60400 60401
用法2:只將指定的變量設置到a腿
originate {sip_h_X-AutoAccept=true}user/60400 60401
用法3:同時將變量設置到a腿和b腿
originate {sip_h_X-AutoAccept=true,nolocal:sip_h_X-AutoAccept=true,export_vars='nolocal:sip_h_X-AutoAccept'}user/60400 60401
注意事項
這里所說的設置到b腿,是指bridge之后設置到b腿
Export示例
示例1:在呼叫前,同時設置a腿和b腿的uuid,以便后期跟蹤
originate {origination_uuid=xxxxx,nolocal:origination_uuid=yyyyy,export_vars='nolocal:origination_uuid'}user/60401 60402