【问题标题】:Invalid or missing activities in HTTP body - error as a response toHTTP 正文中的活动无效或缺失 - 作为对以下内容的响应的错误
【发布时间】:2018-05-18 16:57:56
【问题描述】:

我们正在尝试使用 https://github.com/tompaana/bot-direct-line-for-unity 将 Unity 应用程序与聊天机器人连接起来。与 bot 开始新的对话工作正常,但是当我尝试向它发送消息时,我最终没有得到响应,而是在下面附加了错误。 Bot 在 web/skype 上正常工作,唯一的问题是我们的统一实现。

我想知道我们在 POST 中缺少什么以便从机器人接收正确的响应。

由于 Unity 缺少浏览器开发工具包中的 Network/XHR 等功能,我们使用 Fiddler 来获得这些结果:

这是发送到聊天机器人的 POST:

POST https://directline.botframework.com/v3/directline/conversations/CRar7Qz6VaEmIeMR6UmUC/activities HTTP/1.1
Host: directline.botframework.com
User-Agent: UnityPlayer/2017.3.1f1 (UnityWebRequest/1.0, libcurl/7.51.0-DEV)
Accept: */*
Accept-Encoding: identity
Transfer-Encoding: chunked
Authorization: Bearer XXX.edited_out.XXX
Content-Type: application/json
X-Unity-Version: 2017.3.1f1

76
{ "type": "message", "channelId": "directline", "from": { "id": "default-user", "name": "User" }, "text": "message text" }
0

这是回复:

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 116
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
Request-Context: appId=cid-v1:91e46abb-4ce5-4d98-9375-02378f649011
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000
Date: Tue, 15 May 2018 10:21:11 GMT

{
  "error": {
    "code": "MissingProperty",
    "message": "Invalid or missing activities in HTTP body"
  }
}

我想知道我们在这篇文章中缺少什么。

【问题讨论】:

  • 我想知道你被提琴手76{ "type": "message", "channelId": "directline", "from": { "id": "default-user", "name": "User" }, "text": "message text" }0捕获的请求正文是否真的包含760。显然它不是一个有效的活动实体。您可以检查生成请求正文的代码是否有问题。
  • 是的,这些数字是提琴手 POST 的一部分。最后我们发现 Unity 在 2017.3.X 版本中改变了他们的 POST 实现,他们开始使用 Transfer-Encoding: chunked Header,这导致这些数字出现在我们的 JSON 周围。为了防止这种行为,我们需要做的就是在创建 UnityWebRequest 之后添加这行代码: webRequest.chunkedTransfer = false;

标签: botframework direct-line-botframework


【解决方案1】:

2017.3.X 版本中的 POST 实现发生了一些变化,他们开始使用 Transfer-Encoding: chunked Header,这导致这些数字出现在我们的 JSON 周围。为了防止这种行为,我们需要做的就是在创建UnityWebRequest: webRequest.chunkedTransfer = false;之后添加这行代码

【讨论】:

    【解决方案2】:

    older version API中,UnityWebRequest.chunkedTransfer属性的默认值为true,正如你所说,为了防止它,我们可以显式设置:

    UnityWebRequest.chunkedTransfer = false;
    

    另外,在the latest version 中,UnityWebRequest.chunkedTransfer 属性的默认值为false。所以如果升级并使用最新版本,它可能不会导致这个问题。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 2019-03-29
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      相关资源
      最近更新 更多