2017-06-09 12 views
3

FormFlowを使って最初にボットを構築してCoratanaスキルを構築しています。 LUISを使用して自分の意図とエンティティを検出し、そのエンティティをFormFlowダイアログに渡します。 1つまたは複数のFormFlowフィールドが入力されていない場合、FormFlowダイアログはユーザーに不足している情報を入力するように促しますが、このプロンプトは表示されず、コルタナ画面にのみ表示されます。 FormFlowがプロンプトを発する方法はありますか?FormFlowのプロンプトがCortanaスキルで話されていません

以下のスクリーンショットで、「空港シャトルが必要ですか?」というプロンプトが表示されます。ただ表示され、話されていなかった。

enter image description here

私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; } 
} 

答えて

3

私が話すとは思わないが、現在FormFlowでサポートされています。

回避策として、基本的にテキストを自動的に発言するように変更するIMessageActivityMapperを追加することができます。回答フォームエセキエル・Jadibは、私は私のユースケースのために必要なものを解決するために私を助け

var builder = new ContainerBuilder(); 

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

builder.Update(Conversation.Container); 
0

:として

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ファイルに登録する必要があります。テキストが質問の場合は、InputHintフィールドをExpectingInputに設定するためにいくつかの行を追加しました。この設定では、Cortanaは自動的に自分の答えを聞き、自分でマイクを起動する必要はありません。

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; 
} 
関連する問題