在步骤向僵尸程序发送活动根据文档在此处
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:如果我将msg更改为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客户端上一切正常。
答案 0 :(得分: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"
}
答案 1 :(得分:0)
将字典传递给data
时,它会自动进行urlencoded,因此api会返回错误,因为它需要json数据。
您可以使用json
lib,也可以将字典传递给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"任