Пакетный запрос Facebook не принимает параметр JSON

Моя цель - создать несколько рекламных объявлений с помощью пакетного API Facebook: https://developers.facebook.com/docs/marketing-api/asyncrequests/v2.9

Я отправляю запрос POST по этому URL:

https://graph.facebook.com/v2.9/act_158365238/ads

Я посылаю 2 параметра в соответствии с документацией:

1- access_token

2-партия

JSON в параметре пакета выглядит следующим образом:

{
  "method": "POST",
  "relative_url": "v2.9\/act_158365238\/ads",
  "attached_files": "test1",
  "body": "creative={\"title\":\"Test title 1\",\"body\":\"Test body 1\",\"object_url\":\"https:\/\/apps.facebook.com\/testapp\/\", \"image_file\":\"test1.jpg\"}&targeting={\"countries\":[\"US\"]}&name=test1"
}

Эта проблема

Когда я отправляю этот запрос с помощью POSTman или моего PHP-кода, он выдает следующую ошибку

{
  "error": {
    "message": "(#100) The parameter creative is required",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "Gj2sG7N8l1f"
  }
}

Однако, когда я отправляю точно такой же запрос через инструмент Graph API Facebook, он успешно создает рекламу.

2 ответа

В соответствии с документацией API, предоставленной для создания объявлений, вы должны публиковать по URL-адресу "v2.9 / act_187687683 / adcreatives"... Фрагмент показанного вами пакета используется для создания рекламы.

Если, как вы говорите, вы намерены создать AdCreative, то вам следует использовать что-то похожее на вышеприведенное, которое отличается по своему телу от того, что вы используете:

         {
          "method": "POST",
          "name": "create_creative",
          "relative_url": "v2.9/act_187687683/adcreatives",
          "attached_files": "test1",
          "body": "title=Test title&body=Test body&link_url=http://www.test12345.com&image_file=test1.jpg"
         }

С другой стороны, если то, что вы создаете, является надстройкой, то вам следует рассмотреть возможность ссылки на AdCreative по его идентификатору, как это сделано в примерах, поэтому в случае объявления, добавленного в тот же пакет, вы можете использовать относительную ссылку на имя:

         creative={\"creative_id\":\"{result=create_creative:$.id}\"}

или, если это уже созданное объявление, вы можете ссылаться на него по creative_id:

         creative={\"creative_id\":\"123456\"}

Я думаю, что сообщение представляет собой красную сельдь - оно не видит креативное поле вашего тела, потому что OAuth неправильно установлен в ваших запросах POSTman, поэтому он не анализирует тело или не видит креативное поле.

Если вы не знаете, как установить OAuth в POSTman, вот хороший учебник: https://docs.brightcove.com/en/video-cloud/concepts/postman/postman.html

Другие вопросы по тегам