2016-07-25 12 views
1

私はC#でMicrosoft Bot Framework、V3を使用してボットを構築しており、入力を開始する前にDialogを開始し、指示をユーザーに促します。また、ユーザーがフォームを完了するたびにダイアログを繰り返してください。ボットのプロンプトなしでダイアログを開始する(C#の場合)

FormFlowオプション:FormOptions.PromptInStartを使用しようとしていますが、何らかの入力があってもウェルカムメッセージが表示されたままです。これがV1で推奨されなくなったのかどうか、私は正しいことをしていません。何かアドバイス??

私のクラスは以下の通りです:あなたが使用してテストしている

public class MyClass 
{   
    public static IForm<MyClass> BuildForm() 
    { 
     OnCompletionAsyncDelegate<MyClass> processOrder = async (context, state) => 
     { 
      await context.PostAsync("We are currently filing your order....."); 
     }; 

     return new FormBuilder<MyClass>()       
        .Message("Welcome to my bot!") 
        //some actions here 
        .Confirm(//more actions here) 
        .AddRemainingFields() 
        .Message("Thanks for providing your inputs") 
        .OnCompletion(processOrder) 
        .Build(); 
    } 

}; 

答えて

0

MessagesController:

 internal static IDialog<MyClass> MakeRootDialog() 
    { 
     return Chain.From(() => FormDialog.FromForm(MyClass.BuildForm, options: FormOptions.PromptInStart)) 
      .Do(async (context, order) => 
      {//some actions here } 
      }); 
    } 

MyClass.cs:

[Serializable] 
public class MyClassDialog : IDialog<object> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     context.Wait(MessageReceivedAsync); 
    } 
    public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) 
    { 
     var message = await argument; 
     await context.PostAsync("You said: " + message.Text); 
     context.Wait(MessageReceivedAsync); 
    } 
} 

MyClassDialog.csエミュレータ?

私は似たような経験をしており、クライアントに依存しているようです。私はあなたが私の地元のエミュレータを持っている同じ経験を取得していますが、私はウェブチャットクライアントを介してそれを実行したときに、私はウェルカムメッセージがうまく見ている:Welcome message in webchat

+0

から
REFはい、私たちはいましたエミュレータでテストしましたが、WebChatでも同じ問題がありました。それがDialogクラスの問題であることを認識しました。 – kgonzal3

1

https://docs.botframework.com/en-us/support/embed-chat-control2/

私は私のウェブチャットのスクリーンダンプを追加しましたどのようにPostメソッドを実装しますか? 私はフォームではなくPostメソッドで問題があると思います。

このコードは私の仕事です。

public async Task<HttpResponseMessage> Post([FromBody] Activity activity) 
{ 

      if (activity.Type == ActivityTypes.Message || activity.Type == ActivityTypes.ConversationUpdate) 
      { 
       Conversation.SendAsync(activity, MakeRootDialog); 
      { 
} 

ユーザーが接続すると、ActivityTypeはConversationUpdateなので、メッセージは表示されません。 activity.Type == ActivityTypes.ConversationUpdateでもMakeRootDialogを呼び出す必要があります。

1

次のことが確認できmessage.Type == ActivityTypes.ConversationUpdateとmessage.MembersAdded.Any(O => o.Id == message.Recipient.Id)BotBuilder-Samples/CSharp/demo-ContosoFlowers/

private async Task HandleSystemMessage(Activity message) 
{ 
    if (message.Type == ActivityTypes.DeleteUserData) 
    { 
     // Implement user deletion here 
     // If we handle user deletion, return a real message 
    } 
    else if (message.Type == ActivityTypes.ConversationUpdate) 
    { 
     if (message.MembersAdded.Any(o => o.Id == message.Recipient.Id)) 
     { 
      var RootDialog_Welcome_Message = "welcome! i'm rainmaker"; 
      var reply = message.CreateReply(RootDialog_Welcome_Message); 

      ConnectorClient connector = new ConnectorClient(new Uri(message.ServiceUrl)); 

      await connector.Conversations.ReplyToActivityAsync(reply); 
     } 
    } 
    else if (message.Type == ActivityTypes.ContactRelationUpdate) 
    { 
     // Handle add/remove from contact lists 
     // Activity.From + Activity.Action represent what happened 
    } 
    else if (message.Type == ActivityTypes.Typing) 
    { 
     // Handle knowing tha the user is typing 
    } 
    else if (message.Type == ActivityTypes.Ping) 
    { 
    } 
} 
関連する問題