Facebook批量API:请求订单未保留

时间:2017-01-03 16:51:36

标签: facebook facebook-graph-api facebook-messenger facebook-messenger-bot

我目前正在使用facebook bulk api向用户发送多条消息(messenger api)并发出以下请求(访问令牌和用户ID已被审查):

curl \                                                                   
-F "access_token=XXXXXXX" \
-F 'batch=[{"method":"POST", "relative_url":"me/messages","body":"message=%7B%27text%27%3A+%27AAA%27%7D&recipient=%7B%27id%27%3A+XXXXXXX%7D"}, {"method":"POST", "relative_url":"me/messages","body":"message=%7B%27text%27%3A+%27BBB%27%7D&recipient=%7B%27id%27%3A+XXXXXXX%7D"}, {"method":"POST", "relative_url":"me/messages","body":"message=%7B%27text%27%3A+%27CCC%27%7D&recipient=%7B%27id%27%3A+XXXXXXX%7D"}]' \                                            
https://graph.facebook.com/

我期望的是三条消息,顺序为" AAA"," BBB"," CCC"。多次执行查询时,消息以随机顺序传递,这使得使用批量api向一个用户发送多条消息非常无用。

如果我理解下面引用的段落,请求应按顺序执行,显然情况并非如此。

  

响应的顺序与请求中的操作顺序相对应,因此开发人员应相应地处理响应,以确定哪些操作成功,哪些操作应在后续操作中重试。

我有什么问题,或者这是Facebook的错误吗?

1 个答案:

答案 0 :(得分:0)

默认情况下,批处理API请求中指定的操作是独立的 - 它们可以在服务器上以任意顺序执行,并且一次操作中的错误不会影响其他操作的执行。

通常,请求中的操作是相关的 - 例如,一个操作的输出可以用于下一个操作的输入。图形Batch API使用JSONPath表达式格式(http://code.google.com/p/jsonpath/)支持此功能。 JSONPath表达式格式提供了一种在JSON对象中引用数据的简单方法。为了在另一个操作中引用先前操作的结果,您需要为先前(父)操作指定名称,然后使用JSONPath格式在查询字符串参数或表单post参数中引用它。在查询字符串或表单post参数中嵌入JSONPath表达式的语法是{result =(父操作名称):( JSONPath表达式)}。请注意,出于安全原因,JSONPath表达式中不允许使用过滤器和脚本JSONPath构造。

实施例

curl \
   -F 'access_token=...' \
   -F 'batch=[{ "method":"GET","name":"get-friends","relative_url":"me/friends?limit=5",},{"method":"GET","relative_url":"?ids={result=get-friends:$.data.*.id}"}]' \
   https://graph.facebook.com/