Bot Framework: разрешить cortana произносить PromptDialog.Text

Мне нужно, чтобы Кортана прочитал все мои подсказки, но пока мне удалось заставить его произносить простые фразы, как в этом примере:

[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);

}

Как я могу заставить Кортану также говорить эту подсказку?

Благодарю.

2 ответа

Решение

Обновление: я отправил запрос на извлечение, чтобы добавить его в 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);

Вы можете добавить атрибут речи в опцию подсказки и использовать помощник SSML для чтения диалога подсказки.

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

Пожалуйста, обратитесь к документу для получения подробной информации и образца GitHub. Если вам нужна дополнительная помощь, спросите;)

Другие вопросы по тегам