Posts tagged with facebook-graph-api

I'm using Meta Graph Api Explorer to test the Meta Ads API.

And the results look like this:

Request For First Page

When I add the after token into the request as a parameter, it doesn't return the token for the previous page:

Request For Second Page

here's the URL endpoint:

ads_archive?ad_reached_countries=['GE']&search_terms="A"&after= c2NyYXBpbmdfY3Vyc29yOk1UY3pNek0yTURRd01EbzRNakUyTnpZAMU9UTXpNVFl6T1RNPQZDZD 

I'm creating an app to use the Facebook Graph API to load posts from an Instagram Business Profile onto a website. Following Facebook's OAuth guidelines, it opens a dialog where you select your account, select your businesses, select your pages, and then grant all the permissions to the app. (I may have gotten those steps wrong, either way it's not simple.) Some of our clients use Flockler for their Instagram feeds, and connecting their account to the app only requires a single click on a "Continue as YOUR_NAME" button. After clicking the button everything else takes place within Flockler.

How are they doing that? The only info I can find on Meta for Developers is the same method I'm using: https://developers.facebook.com/docs/facebook-login/guides/advanced/manual-flow/ The URL that Flockler uses for auth is facebook.com/privacy/consent/gdp/ and searching for the terms in the URL isn't turning up anything either.

I'm using Airbyte to extract data from Facebook Marketing. I need to add a custom field to the API requests to better manage the data extraction process. The main problem is that the returned campaigns data does not include a way to map the adsets to the campaigns, so i want to add the "adsets" field to the campaigns request to then map them.

I have reviewed Airbyte documentation and forums but couldn't find clear instructions. I have also tried to use the Custom Insights but no luck.

I tried to get total_video_views_by_country_id from the Facebook Graph API and have some error

I tried to get total_video_views_by_country_id from the Facebook Graph API using the endpoint

GET /v20.0/{video-id}/video_insights HTTP/1.1  

via the Graph API Explorer 510171338137924/video_insights/metric=total_video_views_by_country_id However, when I attempted this on the Graph API Explorer, the result was

{   "error": {     "message": "(#100) The value must be a valid insights metric",     "type": "OAuthException",     "code": 100,     "fbtrace_id": "AA1wczXhtw-h7XE8msmeQgY"   } } 

Description
I've been working on processing leads through our system and encountered an issue. I've enabled webhooks on my app, subscribed to leadgen, and provided my callback redirect URL. However, whenever I create a lead, it should be sent to my server, but when I track the status, it shows "failed" with the message "webhook.delivery.rejected." I've looked in the logs of my application but the request is not entering my server at all. I'm trying to understand why this is happening and how to ensure my configuration is correct for receiving leads.

Previously, I completed the process manually by subscribing to each webhook with a seperate app, and it worked fine. Now, I want to programmatically do this using Facebook’s API and one app. Here's the request I'm using to subscribe to the webhook for leads: curl -X POST "https://graph.facebook.com/{page_id}/subscribed_apps?subscribed_fields=leadgen&access_token={page_token}" -H "Content-Type: application/json" -d '{ "override_callback_uri": "https://api-development.recrubo.app/facebook/webhooks/{organization_id}", "verify_token": "{verify_token}" }'

Debugging
Here are my debugging steps so far: I've used the Facebook sharing debugger tool with my callback URL, which returns a 200 status. You can check the results here: Debugging Results..

I've used the Lead Ads RTU Debug Tool to send a test lead to our server but it isn't arriving at my server.

Question
Is there any place to see more error logging in the developer app?

Code
The perform method calls all subsequent calls . It first fetches the user_id which is used to check what pages the user has given us access to. It then fetches the page_access_tokens for all the accessible pages. It then loops through the pages and subscribes to the webhooks.

 def perform   @user_id = get_user_id   @pages = get_page_access_tokens   @pages.each do |page|     @facebook.subscribe_to_webhook(page[:id], page[:token])     token = @facebook.get_long_lived_access_token(page[:token])     options = {       ad_account_id: @ad_account_id     }     @access_token ||= @organization.access_tokens.create!(token: token, options: options, name: 'Meta', user_id: @user_id)   end   @access_token end def get_page_access_tokens(user_id, access_token)   response = Faraday.get("#{ENV.fetch('FACEBOOK_GRAPH_API')}/#{user_id}/accounts") do |req|     req.headers['Content-Type'] = 'application/json'     req.params['access_token'] = access_token   end   raise "Unable to get page access token server responded with #{response.body} and status #{response.status}" unless response.success?   data = JSON.parse(response.body)   page_data = data['data']   page_data.map { |page| { id: page['id'], name: page['name'], token: page['access_token'] } } end def subscribe_to_webhook(page_id, page_token)   response = Faraday.post("#{ENV.fetch('FACEBOOK_GRAPH_API')}/#{page_id}/subscribed_apps?subscribed_fields=leadgen") do |req|     req.headers['Content-Type'] = 'application/json'     req.params['access_token'] = page_token     req.body = {       override_callback_uri: "#{ENV.fetch('API_URL')}/facebook/webhooks/#{@organization['id']}",       verify_token: {local_token}     }.to_json   end   raise "Unable to subscribe to leadgen webhook server responded with #{response.body} and status #{response.status}" unless response.success?   response end def get_user_id(access_token)   response = Faraday.get("#{ENV.fetch('FACEBOOK_GRAPH_API')}/me") do |req|     req.headers['Content-Type'] = 'application/json'     req.params['fields'] = 'id'     req.params['access_token'] = access_token   end   raise "Unable to get user id server responded with #{response.body} and status #{response.status}" unless response.success?   JSON.parse(response.body)['id'] end 

Edit 1

After the comment of CBroe we have looked further in to the subscription and have added validation for these subscriptions. We see the following data:

  • graph.facebook.com/v20.0{page_id}/subscribed_apps

  • graph.facebook.com/v20.0{app_id}/subscriptions