Подсказки FormFlow не произносятся в Cortana Skills

Я развиваю навык Coratana, сначала создавая бота с помощью FormFlow. Я определяю свои намерения и объекты с помощью LUIS и передаю их в диалоговое окно FormFlow. Если одно или несколько полей FormFlow не заполнены, диалоговое окно FormFlow предлагает пользователю заполнить недостающую информацию, но это приглашение не произносится, а отображается только на экране Кортаны. Есть ли способ для FormFlow озвучивать подсказки?

На приведенном ниже снимке экрана подсказка «Вам нужен трансфер от/до аэропорта?» просто отображалось и не произносилось:

введите здесь описание изображения

Мое определение formFlow выглядит так:

 [Serializable]
public class HotelsQuery
{
    [Prompt("Please enter your {&}")]
    [Optional]
    public string Destination { get; set; }

    [Prompt("Near which Airport")]
    [Optional]
    public string AirportCode { get; set; }

    [Prompt("Do you need airport shuttle?")]
    public string DoYouNeedAirportShutle { get; set; }
}

person user2202866    schedule 09.06.2017    source источник


Ответы (2)


Я не думаю, что Speak в настоящее время поддерживается в FormFlow.

Что вы можете сделать в качестве обходного пути, так это добавить IMessageActivityMapper, которые в основном автоматически продвигают текст.

namespace Code
{
    using Microsoft.Bot.Builder.Dialogs;
    using Microsoft.Bot.Builder.Dialogs.Internals;
    using Microsoft.Bot.Connector;

    /// <summary>
    /// Activity mapper that automatically populates activity.speak for speech enabled channels.
    /// </summary>
    public sealed class TextToSpeakActivityMapper : IMessageActivityMapper
    {
        public IMessageActivity Map(IMessageActivity message)
        {
            // only set the speak if it is not set by the developer.
            var channelCapability = new ChannelCapability(Address.FromActivity(message));

            if (channelCapability.SupportsSpeak() && string.IsNullOrEmpty(message.Speak))
            {
                message.Speak = message.Text;
            }

            return message;
        }
    }
}

Затем, чтобы использовать его, вам нужно зарегистрировать его в своем файле Global.asax.cs как:

 var builder = new ContainerBuilder();

 builder
   .RegisterType<TextToSpeakActivityMapper>()
   .AsImplementedInterfaces()
   .SingleInstance();

 builder.Update(Conversation.Container);
person Ezequiel Jadib    schedule 09.06.2017

Форма ответов Ezequiel Jadib помогла мне решить, что мне нужно для моего варианта использования. Я просто добавил несколько дополнительных строк, чтобы установить для поля InputHint значение ExpectingInput, если текст представляет собой вопрос. В этой конфигурации Кортана автоматически слушает мой ответ, и мне не нужно самостоятельно активировать микрофон.

public IMessageActivity Map(IMessageActivity message)
{
    // only set the speak if it is not set by the developer.
    var channelCapability = new ChannelCapability(Address.FromActivity(message));

    if (channelCapability.SupportsSpeak() && string.IsNullOrEmpty(message.Speak))
    {
        message.Speak = message.Text;

        // set InputHint to ExpectingInput if text is a question
        var isQuestion = message.Text?.EndsWith("?");
        if (isQuestion.GetValueOrDefault())
        {
            message.InputHint = InputHints.ExpectingInput;
        }
    }

    return message;
}
person berhir    schedule 13.07.2017
comment
Была такая же проблема. InputHints.ExpectingInput отсутствовал - person tatigo; 11.12.2018