Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在拨号计划中获取dtmf值_Php_Sip_Asterisk - Fatal编程技术网

Php 如何在拨号计划中获取dtmf值

Php 如何在拨号计划中获取dtmf值,php,sip,asterisk,Php,Sip,Asterisk,我有一个dialplan,其中我想要的是,如果用户按下任何键,然后再次播放文件,但我不知道如何在dialplan中获取dtmf值。 这是我的计划: [callme] exten => s,1,Answer exten => s,n,Playback(demo/${FILENAME1}) 首先,如何获取DTMF值,如果用户按任意键,则播放应执行2次。但我想使用拨号计划管理所有这些内容您可以使用WaitExten[1]来完成: [callme] exten => s,1

我有一个
dialplan
,其中我想要的是,如果用户按下任何键,然后再次播放文件,但我不知道如何在dialplan中获取dtmf值。 这是我的计划:

[callme]  
exten => s,1,Answer 
exten => s,n,Playback(demo/${FILENAME1})

首先,如何获取DTMF值,如果用户按任意键,则播放应执行2次。但我想使用
拨号计划管理所有这些内容

您可以使用WaitExten[1]来完成:

[callme]  
exten => s,1,Answer 
exten => s,n,Playback(demo/${FILENAME1})
exten => s,n,WaitExten(3)
exten => s,n,Goto(s,1)
exten => 1,1,Noop(user pressed 1)
exten => 1,n,Goto(however-shall-go-to-when-pressed-1)
exten => 2,1,Noop(user pressed 2)
exten => 2,n,Goto(however-shall-go-to-when-pressed-2)
使用扩展模式[2]:

[callme]  
exten => s,1,Answer 
exten => s,n,Playback(demo/${FILENAME1})
exten => s,n,WaitExten(3)
exten => s,n,Goto(s,1)
exten => X,1,Noop(user pressed ${EXTEN})
exten => X,n,Goto(however-shall-go-to-when-pressed-${EXTEN})
这正是您所要求的:

[callme]  
exten => s,1,Answer 
exten => s,n,Playback(demo/${FILENAME1})
exten => s,n,WaitExten(3) 
exten => s,n,NoOp(going on - no dtmf detectd)
exten => X,1,Noop(user pressed ${EXTEN})
exten => X,n,Goto(s,1)
还要看一下背景星号应用程序[3]

参考资料:

[1]

[2]


[3] 您还可以使用应用程序读取。它确实要求多次,结果就不那么复杂了

[test]
;Read(variable[,filename[&filename2[&...]][,maxdigits[,options[,attempts[,timeout]]]]])
exten => s,1,Read(response,file_to_play,3,,4,10)
;will read into response variable,upto 3 digits and ask upto 4 times, timeout 10 sec

exten => s,2,GotoIf($[ "${response}" == "123"]?pin_ok,s,1)

谢谢你回复我的解决方案,但我得到了这个解决方案,它对我有效

[callme]
exten => s,1,Answer
exten => s,n,DumpChan()
exten => s,n,Playback(sclbrd/welcome)
exten => s,n,Wait(2)
exten => s,n,Set(i=1)
exten => s,n,While($[${i} != 3])
exten => s,n,Playback(sclbrd/${FILENAME1})
exten => s,n,Read(digit|sclbrd/press|1)
exten => s,n,Wait(1)
exten => s,n,GotoIf($["${digit}x" = "x"]?done:again)
exten => s,n(again),Wait(1)
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,EndWhile()
exten => h,n(done),Wait(1)

下面是一个读取DTMF值的简单示例上下文

[readDTMF]
exten => 113,1,Answer()
same  => n,Read(NUMBER,vm-toenternumber)
same  => n,Verbose(${NUMBER})
same  => n,SayNumber(${NUMBER})
same  => n,Hangup()
读取(用于存储读取编号的变量,[读取前播放的文件名][,其他选项])

  • 参考文献1:
  • 参考2: