0

私は現在、Facebook バルク 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」の順に 3 つのメッセージです。クエリを複数回実行すると、メッセージはランダムな順序で配信されるため、一括 API を使用して 1 人のユーザーに複数のメッセージを送信することはほとんど役に立ちません。

以下に引用されている段落を正しく理解していれば、リクエストは順番に実行する必要がありますが、明らかにそうではありません。

応答の順序は、リクエスト内の操作の順序に対応しているため、開発者はそれに応じて応答を処理し、成功した操作と後続の操作で再試行する必要がある操作を判断する必要があります。

私が間違っていることはありますか、それともFacebook側のエラーですか?

4

1 に答える 1

0

デフォルトでは、バッチ API リクエストで指定された操作は独立しています。サーバー上で任意の順序で実行でき、1 つの操作でエラーが発生しても、他の操作の実行には影響しません。

多くの場合、リクエスト内の操作は依存しています。たとえば、ある操作の出力が次の操作の入力に使用される場合があります。Graph Batch API は、JSONPath 式形式 ( http://code.google.com/p/jsonpath/ ) を使用して、これをサポートしています。)。JSONPath 式形式は、JSON オブジェクト内のデータを参照する簡単な方法を提供します。前の操作の結果を別の操作で参照するには、前の (親) 操作に名前を付けてから、クエリ文字列パラメーターまたはフォーム ポスト パラメーター内で JSONPath 形式を使用して参照する必要があります。クエリ文字列またはフォーム ポスト パラメーターに 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/
于 2017-07-27T09:38:11.877 に答える