0

向机器人发送活动的步骤中根据此处的文档,

https://docs.botframework.com/en-us/restapi/directline3/#navtitle

我应该将此作为发布请求的正文内容传递

{
  "type": "message",
  "from": {
    "id": "user1"
  },
  "text": "hello"
}

我正在使用以下参数在 python 中发出 POST 请求,但它不起作用。

msg = {"type": "message","channelId": "directline","conversation":{"id": str(convId)},"from":{"id": "test_user1"},"text": "hello"}
header = {"Authorization":"Bearer q1-Tr4sRrAI.cwA.BmE.n7xMxGl-QLoT7qvJ-tNIcwAd69V-KOn5see6ki5tmOM", "Content-Type":"application/json", "Content-Length": "512"}
send2 = "https://directline.botframework.com/v3/directline/conversations/"+str(convId)+"/activities"
rsa1 = requests.post(send2,data=msg, headers=header)

这给了我这个错误:

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

在此步骤之前,一切正常。

编辑1:即使我添加了在代码中更新的内容长度,它也会给出相同的错误

编辑2:如果我将味精更改为 json.dumps(msg)

rsa1 = requests.post(send2,data=json.dumps(msg), headers=header)

我得到回应:

{u'error': {u'message': u'Failed to send activity: bot returned an error', u'code': u'ServiceError'}}
{
  "error": {
    "code": "ServiceError",
    "message": "Failed to send activity: bot returned an error"
  }
}

直线 API 只是不工作,在 Skype 客户端上一切正常。

4

2 回答 2

0

将字典传递给data它时会自动进行 urlencoded,因此 api 会返回错误,因为它需要 json 数据。

您可以使用jsonlib,或者最好将字典传递给json参数。
使用json.dumps

rsa1 = requests.post(send2, data=json.dumps(msg), headers=header)

仅使用requests

rsa1 = requests.post(send2, json=msg, headers=header)

此外,您不必添加“Content-Length” header,如果您使用第二个示例,您也不必添加“Content-Type”。

于 2017-06-01T22:20:51.207 回答
0

根据您发布的代码,您的请求正文如下所示:

{
    "type": "message",
    "channelId": "directline",
    "conversation": {
        "id": str(convId)
    },
    "from": {
        "id": "test_user1"
    },
    "text": "hello"
}

我怀疑您的错误是由于您在请求正文中包含的对话 ID 值没有被通过网络发送的 JSON 中的双引号引起来。

为简单起见(并消除您收到的错误),我建议您尝试从请求正文中省略channelId属性和会话属性,因为我不认为这些属性中的任何一个都是必要的(即,您正在向 Direct Line URI 发出请求,因此 Bot Framework 知道 Direct Line 是通道,并且会话 ID 已在请求 URI 中指定)。换句话说,试试这个作为你的请求正文:

{
    "type": "message",
    "from": {
        "id": "test_user1"
    },
    "text": "hello"
}
于 2017-06-01T17:56:27.970 回答