2017-04-12 15 views
1

ボットのWebチャットで、メッセージを入力すると、ボットは最初に「送信」と表示してから「送信できませんでした。しかし、メッセージが送信され、私は返信を取得しています。どうすればこれを避けることができますか?メッセージのタイムアウトを増やす必要がありますか?もしそうなら、私はそれを設定する必要がありますか?は再試行を送信できませんでしたが、メッセージが送信されました

enter image description here

これは、コードスニペットです。私は

namespace Bot_Application1.Dialogs 
{ 
    public class HRBotDialog : IDialog<object> 
    { 
     public static string dialogcontext = ""; 
     public async Task StartAsync(IDialogContext context) 
     { 
      context.Wait(MessageReceivedAsync); 
     } 

     private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) 
     { 
      // Get the text passed 
      var message = await argument; 
      string typedText = message.Text.ToLower(); 
      string answer = "My Answer"; 
      if ((typedText == "hi") || (typedText == "hello")) 
      { 
       answer = message.Text; 

      } 
      else if ((typedText == "how many personal days do i have left") || (typedText.Contains("personal days"))) 
      { 
       answer = "Looks like you have 2 remaining for this year"; 
      } 

私はここに、コントローラコード

//[BotAuthentication] 
public class MessagesController : ApiController 
{ 
    /// <summary> 
    /// POST: api/Messages 
    /// Receive a message from a user and reply to it 
    /// </summary> 
    public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
    { 
     if (activity.Type == ActivityTypes.Message) 
     { 
      await Conversation.SendAsync(activity,() => new HRBotDialog()); 
     } 
     else 
     { 
      ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); 
      var reply = HandleSystemMessage(activity); 
      if (reply != null) 
       await connector.Conversations.ReplyToActivityAsync(reply); 
     } 
     var response = Request.CreateResponse(HttpStatusCode.OK); 
     return response; 
    } 

    private Activity 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) 
     { 
      string replyMessage = string.Empty; 
      if (message.MembersAdded.Any(o => o.Id == message.Recipient.Id)) 
      { 
       replyMessage += $"How can I help you? \n"; 
       return message.CreateReply(replyMessage); 
      } 
     } 
     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) 
     { 
     } 

     return null; 
    } 
} 
+0

これは一貫していますか?どのようにボットを作ったのですか? (Botサービス、ノードまたはC#SDK)? –

+1

MessagesControllerの "Post"メソッドからコードを追加できますか? –

+0

nullの返信を送信したときにこの問題が発生しました。 Xeno-Dが示唆するように、メッセージコントローラにコードを入力してください。 –

答えて

0

を追加していMessageReceivedASync方法でコーディングされているC#のSDKを使用しています。このようなあなたのHRBotDialogにSerializableの属性を追加してみてください。

[Serializable] 
public class HRBotDialog : IDialog<object> 
{ 
//...code... 
} 
+0

その属性がクラスに追加されても、私はまだ同じ問題に直面しています。 ResumeAfterメソッドで呼び出されているダイアログが実行されると、エミュレータでこのエラーが表示されます。メッセージがコードによって正しく受信されたことをフレームワークに伝える方法はありますか? –

関連する問題