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



我目前正在使用facebook批量api向用户发送多条消息(信使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向一个用户发送多条消息变得非常无用。

如果我正确理解下面引用的段落,请求应该按顺序执行,但事实显然并非如此。

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

是我做错了什么,还是这是脸书方面的错误?

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

通常,请求中的操作是依赖的——例如,一个操作的输出可能用于下一个操作。图形Batch API使用JSONPath表达式格式对此提供支持(http://code.google.com/p/jsonpath/)。JSONPath表达式格式提供了一种简单的方法来引用JSON对象中的数据。为了在另一个操作中引用上一个操作的结果,您需要为上一个(父)操作指定一个名称,然后使用JSONPath格式在查询字符串参数或表单后参数中引用它。在查询字符串或表单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/

最新更新