1

我有以下用于播放录音的 Asterisk 13.22.0 拨号方案代码,文件名由我的外部应用程序在 AMI (AJAM) 接口的原始语句中提供:

Action: Originate
ActionID: test
Channel: SIP/3015
Exten: 7777
Context: local
Priority: 1
CallerID: 3015
Account: recordinglisten
ChannelID: abc
OtherChannelID: def
Variable: CallLimit=3600,recfile=/var/spool/asterisk/monitor/1807/25/2507180836591192526,altfile=/var/spool/asterisk/monitor/archive/1807/25/2507180836591192526
Async: true

分机 7777 是:

;listen to recording
exten=>7777,1,Answer()
exten=>7777,n,NoOp(Requesting File ${recfile})
exten=>7777,n,NoOp(Rec file set to ${recfile}) 
exten=>7777,n,NoOp(Alt file set to ${altfile}) 
exten=>7777,n,NoOp(Requesting Alt File ${altfile})
exten=>7777,n,Set(__numbertarget=7777)
exten=>7777,n,Set(haveFile=${STAT(e,${recfile}.gsm)})
exten=>7777,n,NoOp(Original File Exist ${haveFile}) exten=>7777,n,GotoIf($["${haveFile}" = "1"]?play) 
exten=>7777,n,NoOp(rec File not found using alt file)
exten=>7777,n,Set(recfile=${altFile})
exten=>7777,n(play),ControlPlayback(${recfile},20000,6,4,8,5,9)
exten=>7777,n,hangup()

但是,如果完成了上述操作,则分机 7777 将启动,并且当在 Asterisk 13.22.0 实例的拨号计划中执行此行时:

exten=>7777,n,Set(haveFile=${STAT(e,${recfile}.gsm)})

它清除变量 recfile 和 altfile - 并且即使文件确实存在于磁盘上也返回 0 - 如果你在此行下方 NoOp ${recfile} 和 ${altfile} 它们 - 都 - 作为空白字符串返回,在它上面它们用正确的数据正确填充 - 要播放的文件归档系统位置。

删除对“STAT”的调用,通道变量保持填充状态,在整个 7777 分机运行期间不会变为空。

为什么 Asterisk 13.22.0 中的“STAT”拨号计划函数显然会清除通道上设置的自定义 Asterisk 通道变量,而不是检查给定文件是否存在于文件系统中并返回 1 表示存在,0 表示不存在(就像它在以前的 Asterisk 版本)并在这样做时不理会自定义通道变量...?

不仅作为 STAT 参数传递的“recfile”(通过上面的 origin)被清除,“altfile”也被清除为空白——在扩展 7777 上调用 Asterisk 13“STAT”函数的那一刻。

如果经过测试,这个精确的拨号方案代码在 Asterisk 1.8.32.3 实例中可以完美运行。

有人可以帮忙吗?

谢谢

斯特凡

4

0 回答 0