0

我目前正在使用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方面的错误吗?

4

1 回答 1

0

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

通常,请求中的操作是相互依赖的——例如,一个操作的输出可以用于下一个操作的输入。图形批处理 API 使用 JSONPath 表达式格式(http://code.google.com/p/jsonpath/)。JSONPath 表达式格式提供了一种简单的方法来引用 JSON 对象中的数据。为了在另一个操作中引用上一个操作的结果,您需要为上一个(父)操作命名,然后使用 JSONPath 格式在查询字符串参数或表单 post 参数中引用它。在查询字符串或表单发布参数中嵌入 JSONPath 表达式的语法是 {result=(parent operation name):(JSONPath expression)}。请注意,出于安全原因,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/
于 2017-07-27T09:38:11.877 回答