0

я в настоящее время с помощью facebook bulk api для отправки несколько сообщений пользователей (messenger api) со следующей просьбой (токены доступа и идентификаторы пользователя вычеркивает):Facebook Bulk API: порядок запрос не сохраняется

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?

+0

То, как ожидается. Порядок ответов, которые вы получаете, находится в правильном порядке. Порядок, в котором выполняются вызовы, случайный или параллельный. Вы не можете управлять этим – WizKid

+0

@WizKid, который я вижу, поэтому нет способа отправить несколько сообщений в одном запросе? Я думал, что это будет хороший способ уменьшить количество отправленных запросов и сократить задержки между последовательными сообщениями. – Birne94

+0

Не знаю, что я знаю – WizKid

ответ

0

По умолчанию операции, указанные в запросе API пакета, являются независимыми - их можно выполнять в произвольном порядке на сервере, а ошибка в одной операции не влияет на выполнение других операций.

Зачастую операции в запросе зависят - например, вывод одной операции может использоваться на входе следующей операции. Графический пакетный API поддерживает это с использованием формата выражения JSONPath (http://code.google.com/p/jsonpath/). Формат выражения JSONPath обеспечивает простой способ ссылки на данные в объекте JSON. Чтобы ссылаться на результаты предыдущей операции в другой операции, вам нужно указать имя предыдущей (родительской) операции, а затем ссылаться на нее в параметре строки запроса или в параметре post post с использованием формата JSONPath. Синтаксис для встраивания выражения JSONPath в строку запроса или параметр формы post: {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/