Пакетный запрос 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