2017-04-12 136 views
1

在机器人网络聊天中,当我输入消息时,机器人先说“发送”,然后变为“无法发送,重试”。但是这条消息已发送,我正在收到答复。我怎样才能避免这种情况?我是否需要增加消息超时?如果是这样,我需要设置它?无法发送重试,但消息已发送

enter image description here

这是代码片段。我使用C#SDK在那里我有编码的MessageReceivedASync方法

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

您可以在MessageController中添加“Post”方法中的代码。 –

+0

我在发送空回复时看到过这个问题。正如Xeno-D所建议的那样,请在消息控制器中提供代码。 –

回答

0

请尝试添加Serializable属性您HRBotDialog这样的:

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

即使将该属性添加到课程中,我仍面临同样的问题。当在ResumeAfter方法中调用的对话框执行某些操作时,我在模拟器中看到这个错误。有什么办法可以告诉框架,代码正确地收到了这个消息吗? –