代码之家  ›  专栏  ›  技术社区  ›  IvanHid

微软休息尝试创建答复时发生ValidationException

  •  0
  • IvanHid  · 技术社区  · 7 年前

    我正在将Microsoft Bot Framework与C#结合使用,并尝试创建一条回复消息,其图像如下:

    IMessageActivity m = Activity.CreateMessageActivity();
    var images = doc.DocumentNode.SelectNodes("//img[@src]").ToList();
    var src = images[10].GetAttributeValue("src", null);
    Attachment att = new Attachment();
    att.ContentType = "image";
    att.ContentUrl = src;
    m.Attachments.Add(att);
    await context.PostAsync(m);
    context.Wait(MessageReceived);
    

    我知道正在正确提取图像源,但我仍然得到错误:

    Microsoft.Rest.ValidationException
    

    这是什么原因?我该如何解决? 我希望有一个附加了图像的消息,但我只得到默认的bot代码错误消息。 编辑:这是异常消息-“ReplyToId”不能为null。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Anita George    7 年前

    如果您正在使用 活动CreateMessageActivity() 然后,您需要指定用户帐户(ToId,ToName)、bot帐户(FromId,FromName)和会话(conversationid,channelId)的详细信息。

    例如:

    var userAccount = new ChannelAccount(toId,toName);
    var botAccount = new ChannelAccount(fromId, fromName);
    var connector = new ConnectorClient(new Uri(serviceUrl));
    
    IMessageActivity message = Activity.CreateMessageActivity();
    if (!string.IsNullOrEmpty(conversationId) && !string.IsNullOrEmpty(channelId))
    {
        message.ChannelId = channelId;
    }
    else
    {
        conversationId = (await connector.Conversations.CreateDirectConversationAsync( botAccount, userAccount)).Id;
    }
    message.From = botAccount;
    message.Recipient = userAccount;
    message.Conversation = new ConversationAccount(id: conversationId);
    message.Text = "The text you want to send";
    //You can add your attachment here
    message.Locale = "en-Us";
    await connector.Conversations.SendToConversationAsync((Activity)message);
    

    查看您的代码,您似乎可以访问 上下文 因为您正在使用上下文发布消息。PostAsync,因此更简单的方法是使用上下文发送消息,因为上下文已经包含用户、机器人和对话的详细信息。

    您可以通过使用上下文来实现这一点。MakeMessage()

    例如:

    IMessageActivity reply = context.MakeMessage();
    
    var images = doc.DocumentNode.SelectNodes("//img[@src]").ToList();
    var src = images[10].GetAttributeValue("src", null);
    Attachment att = new Attachment();
    att.ContentType = "image/png";
    att.ContentUrl = src;
    
    reply.Attachments.Add(att);
    await context.PostAsync(reply);
    context.Wait(MessageReceived);