首页 > 解决方案 > Salesforce LiveAgent REST API 400:请求不是有效的 ChatEnd - ChatEnd 需要原因属性上的非空值

问题描述

我实现了一些 Python 代码,让我的前端与 SF LiveAgent REST API 交互,如此处所述:https ://developer.salesforce.com/docs/atlas.en-us.live_agent_rest.meta/live_agent_rest

一切正常,除非我向/Chasitor/ChatEnd端点发出 POST 请求。在这里,我得到一个 400 标题中的响应。

对我来说,这个端点似乎没有完整记录。它的文档(https://developer.salesforce.com/docs/atlas.en-us.live_agent_rest.meta/live_agent_rest/live_agent_rest_ChatEnd.htm)说ChatEndReason正文是必需的,但在“Live Agent REST API 的请求正文”下没有记录在案的此类机构。reason仅通过端点文档中建议的 as传递字典是ChatEnd行不通的。

这是我对此请求的代码:

import requests  

response = requests.post(
    endpoint + '/Chasitor/ChatEnd',
    headers={
            'X-LIVEAGENT-SESSION-KEY': session_info['key'], 
            'X-LIVEAGENT-AFFINITY': session_info['affinityToken'],
            'X-LIVEAGENT-API-VERSION': '46'
    },
    data=json.dumps({'reason':'client'})
)

endpoint只是我的 SF 实例的 url。session_info包含必要信息的字典。对端点的相同请求/Chasitor/ChatMessage工作正常(见下文),我提出的所有其他请求也是如此。我怀疑身体需要看起来不同,但我不知道如何。

response = requests.post(
    endpoint + '/Chasitor/ChatMessage',
    headers={
            'X-LIVEAGENT-SESSION-KEY': session_info['key'], 
            'X-LIVEAGENT-AFFINITY': session_info['affinityToken'],
            'X-LIVEAGENT-API-VERSION': '46'
    },
    data=json.dumps({'text': message})
)

标签: pythonrestsalesforce

解决方案


最后我通过反复试验发现问题是由有效负载引起的。文档中有一个提示,但我认为它没有得到很好的记录:

请求正文:

ChatEndReason - 在请求的请求正文中包含 ChatEndReason 参数以指定聊天结束的原因。此参数是必需的。例如:{原因:“客户”}。

该类型ChatEndReason需要包含在有效负载中。因此{'type':'ChatEndReason', 'reason':'client'}工作。


推荐阅读