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. Если вам нужна дополнительная помощь, спросите;)