VoiceXML - 如何同时提交录音文件和文本输入
VoiceXML - how to submit record file and text input together
我正在尝试获取来电者的号码和记录文件。
录制文件也会有哔声(dtmf)。
现在,我只能记录提示符+键盘输入,但无法在voice.php中输入"w"文本字符串。
在示例 voice.xml 文件中,如果我删除 "field tag" 然后它将工作,因为它将 wav 文件保存到服务器。
有谁知道同时提交记录文件和文本输入是否可行?如果可行,我该如何修改 vxml 文件?应该使用什么类型的加密类型?
如果用 Nexmo 做不到,有没有其他服务提供商可以支持用户构建这样的场景?
voice.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1">
<form id="top">
<property name="inputmodes" value="dtmf"/>
<property name="interdigittimeout" value="2s"/>
<property name="timeout" value="4s"/>
<record name="message" beep="true" maxtime="60s" dtmfterm="true">
<field name="w" type="digits?maxlength=6">
<prompt bargein="true">
Please enter 6 digit number.
</prompt>
</field>
</record>
<block>
<submit next="./voice.php" enctype="multipart/form-data" method="post"/>
</block>
</form>
</vxml>
voice.php代码
<?php
if(!isset($_FILES['message'])){
$mfile = fopen("./log/request.log", "a") or die("unable to open file!");
fwrite($mfile, date('m/d/Y h:i:s a', time())." POST:".print_r($_POST, true)."\n");
fwrite($mfile, date('m/d/Y h:i:s a', time())." GET:".print_r($_GET, true)."\n");
fclose($mfile);
return;
}
switch($_FILES['message']['error']){
case UPLOAD_ERR_OK:
move_uploaded_file($_FILES['message']['tmp_name'], './log/' . $_FILES['message']['name']);
$mfile = fopen("./log/request.log", "a") or die("unable to open file!");
fwrite($mfile, date('m/d/Y h:i:s a', time())." POST:".print_r($_POST, true)."\n");
fwrite($mfile, date('m/d/Y h:i:s a', time())." GET:".print_r($_GET, true)."\n");
fclose($mfile);
$prompt = 'Thanks.';
break;
default:
$prompt = 'Sorry, we could not save your message.';
}
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<vxml version="2.1">
<form>
<block>
<prompt><?php echo $prompt ?></prompt>
</block>
</form>
</vxml>
VoiceXML 不允许同时进行识别和录音。输入将是一个或另一个。您可以执行录音并对录音进行一些音频分析,尽管它可能会变得混乱(您需要进行 filter/signal 分析以及一些去抖动逻辑以防止混乱的音频认为单音按下是多次) .
某些平台允许独立于 VoiceXML 的通话录音。但是,大多数用于语音调谐和诊断。因此,它们并非设计为在通话期间访问。
我正在尝试获取来电者的号码和记录文件。 录制文件也会有哔声(dtmf)。
现在,我只能记录提示符+键盘输入,但无法在voice.php中输入"w"文本字符串。
在示例 voice.xml 文件中,如果我删除 "field tag" 然后它将工作,因为它将 wav 文件保存到服务器。
有谁知道同时提交记录文件和文本输入是否可行?如果可行,我该如何修改 vxml 文件?应该使用什么类型的加密类型?
如果用 Nexmo 做不到,有没有其他服务提供商可以支持用户构建这样的场景?
voice.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1">
<form id="top">
<property name="inputmodes" value="dtmf"/>
<property name="interdigittimeout" value="2s"/>
<property name="timeout" value="4s"/>
<record name="message" beep="true" maxtime="60s" dtmfterm="true">
<field name="w" type="digits?maxlength=6">
<prompt bargein="true">
Please enter 6 digit number.
</prompt>
</field>
</record>
<block>
<submit next="./voice.php" enctype="multipart/form-data" method="post"/>
</block>
</form>
</vxml>
voice.php代码
<?php
if(!isset($_FILES['message'])){
$mfile = fopen("./log/request.log", "a") or die("unable to open file!");
fwrite($mfile, date('m/d/Y h:i:s a', time())." POST:".print_r($_POST, true)."\n");
fwrite($mfile, date('m/d/Y h:i:s a', time())." GET:".print_r($_GET, true)."\n");
fclose($mfile);
return;
}
switch($_FILES['message']['error']){
case UPLOAD_ERR_OK:
move_uploaded_file($_FILES['message']['tmp_name'], './log/' . $_FILES['message']['name']);
$mfile = fopen("./log/request.log", "a") or die("unable to open file!");
fwrite($mfile, date('m/d/Y h:i:s a', time())." POST:".print_r($_POST, true)."\n");
fwrite($mfile, date('m/d/Y h:i:s a', time())." GET:".print_r($_GET, true)."\n");
fclose($mfile);
$prompt = 'Thanks.';
break;
default:
$prompt = 'Sorry, we could not save your message.';
}
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<vxml version="2.1">
<form>
<block>
<prompt><?php echo $prompt ?></prompt>
</block>
</form>
</vxml>
VoiceXML 不允许同时进行识别和录音。输入将是一个或另一个。您可以执行录音并对录音进行一些音频分析,尽管它可能会变得混乱(您需要进行 filter/signal 分析以及一些去抖动逻辑以防止混乱的音频认为单音按下是多次) .
某些平台允许独立于 VoiceXML 的通话录音。但是,大多数用于语音调谐和诊断。因此,它们并非设计为在通话期间访问。