New to Kestra?
Use blueprints to kickstart your first workflows.
List Facebook Page posts, alert Slack when the Page has gone quiet past your cadence threshold, and log the result for marketing teams.
A brand's Facebook Page going quiet is easy to miss: there is no outage, no error, just silence that looks identical to a slow week until a customer or a manager notices the last post is a month old. Facebook's own Page Insights show engagement trends, not a schedule violation alert. This blueprint reads the newest post's real timestamp and reports exactly how many days the Page has gone without a new post.
This blueprint was created by Mohit Jeswani.
list_recent_posts (io.kestra.plugin.meta.facebook.posts.List) fetches the newest few
posts from facebook_page_id's feed, requesting only id and created_time. Read-only;
nothing on the Page is changed. allowFailure: true covers an API or token error without
failing the flow outright.evaluate (io.kestra.plugin.core.output.OutputValues) finds the newest
created_time with a jq filter and computes how many days have passed since then.route (io.kestra.plugin.core.flow.If):summary logs the silence duration and severity, closing the governance cycle.errors alerts Slack if the flow itself fails, for example an expired access token.facebook.posts.List used
as a standing cadence check, distinct from this repo's existing Meta blueprint, which
sends WhatsApp failure notifications rather than reading Facebook Page content.The Graph API reports each post's timestamp on request; it does not decide what cadence is
expected, compare the newest post against it, or notify a Slack channel when the Page goes
quiet. Kestra keeps max_silence_days as a flow input, turns the check into a Slack page
naming the exact silence duration, and keeps a full execution history of every run.
pages_read_engagement permission.This flow calls the Facebook Graph API directly over HTTPS; there is no official local
Graph API emulator, so list_recent_posts cannot be exercised against a local Docker
container.
FACEBOOK_ACCESS_TOKEN: the Page access token used by list_recent_posts. In Kestra OSS,
provide it as the base64-encoded environment variable SECRET_FACEBOOK_ACCESS_TOKEN.SLACK_WEBHOOK_URL: used by alert and the errors block. In Kestra OSS, provide it as
the base64-encoded environment variable SECRET_SLACK_WEBHOOK_URL.| Input | Default | Purpose |
|---|---|---|
facebook_page_id |
<your-facebook-page-id> |
Facebook Page to audit |
max_silence_days |
14 |
Days since the newest post past which the alert fires |
{{ outputs.list_recent_posts.rows }}: the fetched posts (id, created_time).{{ outputs.evaluate.values.newest_post_created_time }} / .silence_days: the newest
post's timestamp and how many days old it is.{{ outputs.evaluate.values.severity }}: OK, PAGE_SILENT, or CRITICAL.created_time reflects when the post was published, not when it was last edited; an old
post that was recently edited does not reset the silence clock, which is the correct
behavior for a posting-cadence check.limit: 5 only looks at the five newest posts; this is enough to find the single newest
created_time, but is not a full publishing history if you also want post-by-post
auditing./feed endpoint returns posts the access token's permissions allow it to
see; a token missing pages_read_engagement can return an empty or partial feed that
looks identical to a genuinely silent Page.FACEBOOK_ACCESS_TOKEN and SLACK_WEBHOOK_URL secrets.facebook_page_id to a real Page.compliant logs the newest post's real timestamp.max_silence_days below that real post's age to confirm alert fires.daily trigger once max_silence_days matches your real posting policy.facebook_page_id values with io.kestra.plugin.core.flow.Loop to
cover more than one Page's cadence in a single scheduled run.io.kestra.plugin.meta.instagram.media.List alongside this check for a combined
cross-platform silence gate, since both plugins live in the same Meta package.permalink_url to include a direct link to the newest
post in the compliant log, not just its timestamp.