Bot框架:启用由cortana说出的PromptDialog.Text

时间:2018-06-04 11:42:21

标签: c# azure botframework cortana

我需要让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也说出这个提示?

感谢。

2 个答案:

答案 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);