我需要让Cortana阅读我的所有提示,到目前为止,我设法让它说出这个例子中的简单短语:
[LuisIntent("Thanks")]
public async Task Thanks(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
{
await context.SayAsync(text: Phrases.YOURE_WELCOME, speak: Phrases.YOURE_WELCOME);
context.Wait(this.MessageReceived);
}
但我无法在PromptDialogs.Text上执行此操作 我有这段代码:
private async Task OnCustomerSet(IDialogContext context, IAwaitable<string> result)
{
string name = await result;
PromptDialog.Text(context, OnNIFSet, Phrases.ASK_CUSTOMER_NIF);
}
我怎样才能让Cortana也说出这个提示?
感谢。
答案 0 :(得分:1)
您可以在提示选项中添加speak属性,并使用SSML Helper读出提示对话框。
var promptOptions = new PromptOptions<string>(
Resources.ChooseSides,
choices: choices,
descriptions: descriptions,
speak: SSMLHelper.Speak(Utils.RandomPick(Resources.ChooseSidesSSML))); // spoken prompt
PromptDialog.Choice(context, this.DiceChoiceReceivedAsync, promptOptions);
有关详细信息和doc,请参阅GitHub Sample。 如果您需要其他帮助,请询问;)
答案 1 :(得分:1)
更新:我已经提交了pull request以将其添加到C#SDK中,并且在下一个版本中它将成为bot.builder包的一部分。目前的版本是3.15.2.2(在撰写本文时)所以任何高于它的东西应该有它。它将在SDK中,因此您不必使用此答案中的方法。
在深入研究之后,我能够提出一个解决方案,无需更改SDK就可以工作,我已经确认这已经在开箱即用的节点中工作了。我仍然会在拉取请求中添加更改,但这对您现在应该有帮助。
你可以创建一个将继承自PromptDialog
的类,并为这样的PromptDialog.text创建一个构造函数:
public class PromptDialogTextSpeak:PromptDialog
{
public static void Text(IDialogContext context, ResumeAfter<string> resume, IPromptOptions<string> promptOptions)
{
var child = new PromptString(promptOptions);
context.Call<string>(child, resume);
}
}
我能够通过简单的提示来实现这一点,例如:
var text = "this is a prompt";
PromptOptions<string> qwerty = new PromptOptions<string>(text, speak: text);
PromptDialogTextSpeak.Text(context, AfterPrompt, qwerty);