【发布时间】:2016-01-29 22:20:14
【问题描述】:
我正在开发 Windows 10 UWP 托管 Web 应用程序,并且正在尝试使用 vcd 文件添加 Cortana 支持。我有 vcd 文件、meta 标签和一个 js 文件来处理语音命令,但是当我构建和运行应用程序时,Cortana 没有获取命令参数。
vcd.xml 文件示例
<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.2">
<CommandSet xml:lang="en-us" Name="VoiceDemoCommandSet_en-us">
<AppName>VoiceDemo</AppName>
<Example>VoiceDemo search for foo</Example>
<Command Name="Search">
<Example>search {message} using VoiceDemo</Example>
<ListenFor RequireAppName="BeforeOrAfterPhrase">Search {searchTerm}</ListenFor>
<Feedback>Searching for "{searchTerm}" with VoiceDemo</Feedback>
<Navigate Target="/home/about"/>
</Command>
<PhraseTopic Label="searchTerm" Scenario="Natural Language"/>
</CommandSet>
</VoiceCommands>
当我对 Cortana 说“VoiceDemo search foo”时。 Cortana 回来了
使用 VoiceDemo 搜索“...”
在 javascript 代码中,我获取了传入的 voiceCommand 对象,但结果属性设置为“搜索 ...”。我是否遗漏了 vcd.xml 文件中的某些内容?
Javascript 代码
if (typeof Windows !== 'undefined' &&
typeof Windows.UI !== 'undefined' &&
typeof Windows.ApplicationModel !== 'undefined') {
// Subscribe to the Windows Activation Event
Windows.UI.WebUI.WebUIApplication.addEventListener("activated", function (args) {
var activation = Windows.ApplicationModel.Activation;
// Check to see if the app was activated by a voice command
if (args.kind === activation.ActivationKind.voiceCommand) {
var speechRecognitionResult = args.result;
var textSpoken = speechRecognitionResult.text;
// Determine the command type {search} defined in vcd
if (speechRecognitionResult.rulePath[0] === "Search") {
console.log("speechRecognitionResult: " + speechRecognitionResult);
console.log("textSpoken: " + textSpoken);
// Build rest of search string here
// Then invoke search
}
else {
console.log("No valid command specified");
}
}
});
} else {
console.log("Windows namespace is unavaiable");
}
Cortana 显示的内容:
【问题讨论】:
-
测试了你的vcd.xml文件,在我这边运行良好,可能是你的js代码有问题。
-
我更新了我的帖子以包含 js 代码。还添加了 Cortana 屏幕截图,以显示文本在到达 js 之前显示为“...”或 null。在您进行测试时,您是否使用了托管网络应用程序?
-
不,我没有在托管网络应用程序中测试它。但是我刚刚创建了一个名为“TestVoiceDemo”的空网络应用程序和一个名为“VocieDemo”的托管网络应用程序,并且我上传了我的测试here in GitHub,我仍然无法重现您的问题,您可以测试我的代码,请记住测试时编辑 VoiceDemo 项目清单中的“起始页”和内容 URI。
-
已设置起始页和内容 URI。 Cortana 可以工作,但不会获取 vcd.xml 文件的更改。即使应用程序被卸载。使用您创建的示例,添加一个新命令并查看 Cortana 是否识别它或将其视为现有命令的参数。
-
“将其视为现有参数的参数”是什么意思?我刚刚添加了一个新命令,并首先更新了我的 web 应用程序来监听这个新命令,一切都在我身边顺利进行。这可能是操作系统版本的问题吗?我的版本是 1511,os build 10586.63。
标签: windows-10 win-universal-app cortana hosted-app