0

REST api 详细说明了发送消息时 POST 正文的 JSON 格式,但不清楚字段中的内容。这是格式...

{
  "id": "string",                         // ?
  "conversationId": "string",             // Conversation ID
  "created": "2016-06-22T10:45:48.618Z",  // Current time?
  "from": "string",                       // Username?
  "text": "string",                       // The message to be sent
  "channelData": "string",                // ?
  "images": [
    "string"                              // Image URL?
  ],
  "attachments": [
    {
      "url": "string",                    // Attachment URL
      "contentType": "string"             // ContentType
    }
  ],
  "eTag": "string"                        // ?
}

我已经标记了我不确定的字段。目前我发送请求并得到 500 服务器错误作为回报。该机器人使用本地机器人模拟器在本地正常工作。

此 JSON 需要在 Android 应用程序中构建。

编辑:这是截获的 JSON 和我发送的响应

POST https://directline.botframework.com/api/conversations/D0I7X8284zv/messages HTTP/1.1
Host: directline.botframework.com
Connection: keep-alive
Content-Length: 239
Authorization: BotConnector Ve7jitnSIdE.dAA.RAAwAEkANwBYADgAMgA4ADQAegB2AA.Iy0ZhjLN0QE.e9o7v6n2Xz4.8C7zj2UlOP6202jMEpHqjXVfZxexO5JxzFE7VrRgaXg
Postman-Token: dd7b4c43-84ea-7c38-bd2c-681f6c031eb0
Cache-Control: no-cache
Origin: chrome-extension://aicmkgpgakddgnaphhhpliifpcfhicfo
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6,fr;q=0.4
Cookie: XXXXXXXXXXXXXXXXXXXXX

{
  "id": "SomeId",
  "conversationId": "D0I7X8284zv",
  "created": "2016-06-23T09:05:06.718Z",
  "from": "someusername",
  "text": "annual leave",
  "channelData": "Conv1",
  "images": [],
  "attachments": [],
  "eTag": "blah"
}
HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 43
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
Set-Cookie: UserId=XXXXXXXXXXXXXXXXXXXXXXX; path=/
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000
Date: Thu, 23 Jun 2016 09:06:06 GMT

{
  "message": "failed to send message"
}
4

1 回答 1

0

在 JSON 中,文本是用户发送给机器人的消息。使用直线 API 启用网络聊天时出现 500 错误。但它会在 5 或 6 小时后自动解决。

顺便说一下根据微软的帮助,他们给了我这两个选项,Direct Line 会在两种情况下返回错误:

  1. 您的消息有问题或 Direct Line 中存在内部错误
  2. 您的机器人正在返回一条错误消息

正如您所提到的,在模拟器中它工作正常。所以这是因为你传递的信息。

Message {
id (string, optional): ID for this message ,
conversationId (string, optional): Conversation ID for this message ,
created (string, optional): UTC timestamp when this message was created ,
from (string, optional): Identity of the sender of this message ,
text (string, optional): Text in this message ,
channelData (string, optional): Opaque block of data passed to/from bot via the ChannelData field ,
images (Array[string], optional): Array of URLs for images included in this message ,
attachments (Array[Attachment], optional): Array of non-image attachments included in this message ,
eTag (string, optional)
}
Attachment {
url (string, optional): URL for this attachment ,
contentType (string, optional): Content type for this attachment 
} 

Conversation {
conversationId (string, optional): ID for this conversation ,
token (string, optional): Token scoped to this conversation ,
eTag (string, optional)
} 

在这里与我分享 C# 代码,可能会对您有所帮助,

 private async Task<bool> PostMessage(string message)
        {

            client = new HttpClient();
            client.BaseAddress = new Uri("https://directline.botframework.com/api/conversations/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", "[YOUR BOT TOKEN]");
            response = await client.GetAsync("/api/tokens/");
            if (response.IsSuccessStatusCode)
            {
                var conversation = new Conversation();
                response = await client.PostAsJsonAsync("/api/conversations/", conversation);
                if (response.IsSuccessStatusCode)
                {
                    Conversation ConversationInfo = response.Content.ReadAsAsync(typeof(Conversation)).Result as Conversation;
                    string conversationUrl = ConversationInfo.conversationId+"/messages/";
                    BotDirectLineApproch.Models.Message msg = new BotDirectLineApproch.Models.Message() { text = message };
                    response = await client.PostAsJsonAsync(conversationUrl,msg);
                    if (response.IsSuccessStatusCode)
                    {
                        response = await client.GetAsync(conversationUrl);
                        if (response.IsSuccessStatusCode)
                        {
                            MessageSet BotMessage = response.Content.ReadAsAsync(typeof(MessageSet)).Result as MessageSet;
                            ViewBag.Messages = BotMessage;
                            IsReplyReceived = true;
                        }
                    }
                }

            }
            return IsReplyReceived;
        }

我创建了一个具有相同 JSON 的类,如下所示,

public class MessageSet
    {
        public Message[] messages { get; set; }
        public string watermark { get; set; }
        public string eTag { get; set; }
    }

    public class Message
    {
        public string id { get; set; }
        public string conversationId { get; set; }
        public DateTime created { get; set; }
        public string from { get; set; }
        public string text { get; set; }
        public string channelData { get; set; }
        public string[] images { get; set; }
        public Attachment[] attachments { get; set; }
        public string eTag { get; set; }
    }

    public class Attachment
    {
        public string url { get; set; }
        public string contentType { get; set; }
    }

而对于对话,

public class Conversation
    {
        public string conversationId { get; set; }
        public string token { get; set; }
        public string eTag { get; set; }
    }

我希望这个答案能帮助你解决你的问题。干杯!

于 2016-06-22T13:41:59.083 回答