#facebook-post-action GitHub Action for posting to a facebook page or group.
- Get a facebook permanent access token (explained below) using a facebook account that owns the page where you want to post messages.
- Find the ID of the page that you want to post messages in (explained below).
- Find the atom feed URL that contains the posts that you wish to share.
name: Facebook Post Action
on:
release:
types: [published]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: facebook-post-action
uses: ReenigneArcher/facebook-post-action@v1
with:
page_id: ${{ secrets.FACEBOOK_PAGE_ID }}
access_token: ${{ secrets.FACEBOOK_ACCESS_TOKEN }}
message: |
${{ github.event.repository.name }} ${{ github.ref }} Released
${{ github.event.release.body }}
url: ${{ github.event.release.html_url }}
fail_on_eror: True
- PAGE_ID: The page ID where you want to post
- ACCESS_TOKEN: The permanent facebook access token
- MESSAGE: The content to post
- URL: The url to embed with the post (optional)
- FAIL_ON_ERROR: Fail the workflow on error. Group posts will fail if the facebook app is not installed to the group; however the message will be posted, setting this to False will allow the workflow run to be successful.
Following the instructions laid out in Facebook's extending page tokens documentation I was able to get a page access token that does not expire.
I suggest using the Graph API Explorer for all of these steps except where otherwise stated.
If you already have an app, skip to step 1.
- Go to My Apps.
- Click "+ Add a New App".
- Set up a website app.
You don't need to change its permissions or anything. You just need an app that won't go away before you're done with your access token.
- Go to the Graph API Explorer.
- Select the application you want to get the access token for (in the "Facebook App" drop-down menu, not the "My Apps" menu).
- Click "Get Token" > "Get User Access Token".
- In the "Add a Permission" drop-down, search and check "pages_manage_posts", "pages_show_list", and "publish_to_groups".
- Click "Generate Access Token".
- Grant access from a Facebook account that has access to manage the target page. Note that if this user loses access the final, never-expiring access token will likely stop working.
The token that appears in the "Access Token" field is your short-lived access token.
Following these instructions from the Facebook docs, make a GET request to
entering in your app's ID and secret and the short-lived token generated in the previous step.
You cannot use the Graph API Explorer. For some reason it gets stuck on this request. I think it's because the response isn't JSON, but a query string. Since it's a GET request, you can just go to the URL in your browser.
The response should look like this:
{"access_token":"**ABC123**","token_type":"bearer","expires_in":5183791}
"ABC123" will be your long-lived access token. You can put it into the Access Token Debugger to verify. Under "Expires" it should have something like "2 months".
Using the long-lived access token, make a GET request to
https://graph.facebook.com/me?access_token=**{long_lived_access_token}**
The id
field is your account ID. You'll need it for the next step.
Make a GET request to
https://graph.facebook.com/**{account_id}**/accounts?access_token=**{long_lived_access_token}**
The JSON response should have a data
field under which is an array of items the user has access to. Find the item for the page you want the permanent access token from. The access_token
field should have your permanent access token. Copy it and test it in the Access Token Debugger. Under "Expires" it should say "Never".
To find your Page ID:
- From News Feed, click Pages on the left side menu.
- Click your Page's name to go to your Page.
- Click About in the left column. If you don't see About in the left column, click See More.
- Scroll down to find your Page ID below More Info.