我正在尝试使用Asterisk AMI OriginateAction方法来拨出电话。通话工作正常,但是我在设置此操作的变量时遇到问题。我将2个变量设置如下:
oc.SetVariables( new Dictionary<string, string>(){ { "SIPADD", "10001"}, { "VQWAITER", "10002" }});
但是当我尝试在Dialplan中获取变量“ SIPADD”之一时。我立即以联合形式将两个可变项作为“ Local / 10002 | _VQWAITER = 10001”
拨号计划:
exten => 999,1,NoOp((Caller ID IS: ${CALLERID(num)}))
same => n,Answer()
same => n,NoOp("Callback Agent Address: "${SIPADD})
same => n,Dial(${SIPADD})
same => n,Hangup()
关注于以上拨号方案的CLI跟踪上方:
[谁能指导我这里的问题吗?我想分别获得这些变量,而不是像这样加入。
目前,作为一项工作,我正在通过在Dialplan中执行以下setps拆分得到的连接字符串:
same => n,NoOp("Callback Agent Address: "${SIPADD})
same => n,Set(localSIPAdd=${CUT(SIPADD,|,1)})
same => n,Set(waiter=${CUT(SIPADD,|,2)})
same => n,NoOp("localSIP: "${localSIPAdd})
same => n,NoOp("waiter: "${waiter})
same => n,Set(CALLERID(num)=waiter)
以上更改的CLI:
可能您正在使用Asterisk-Java库。根据其文档,有两种方法可用于变量。 SetVariable
和SetVariables
。这两个变量都接受不同类型的输入参数,即分别为String和Map。
我不是Java开发人员,但是我认为像下面这样更新代码可以解决您的问题。
HashMap<String, String> map = new HashMap<String, String>();
map.put("SIPADD","10002");
map.put("VQWAITER","10003");
oc.SetVariables(map);