Publishing Lifecycle
A post has one status for each channel it goes to (its targets), and an overall status worked out from them.
What happens when a post is due
Section titled “What happens when a post is due”- Every 30 seconds (see Configuration), the server that sends posts looks for targets that are due, on enabled channels.
- It claims each one, marking it Publishing. Only one server can claim a target.
- It resolves the image to its public URL, and starts the channel’s automation in Automate with the post’s details. The run is keyed by the target and its attempt number, so the same attempt never runs twice, whatever replays it.
- The automation posts through the network’s action, then records the result.
- When the run finishes, Social reads what the network’s step did and sets the target’s status.
If the image can’t be resolved (media.unresolvable) or the channel has no automation (channel.no_automation), nothing is sent and the target is Failed. If the post can’t be handed to Automate at all, it goes back in the queue and is tried again at the next check.
Statuses on a channel
Section titled “Statuses on a channel”| Status | Meaning |
|---|---|
| Pending | Waiting for its time (or for publishing to be switched on, or its channel to be enabled). |
| Publishing | Claimed and handed to the channel’s automation. |
| Published | Live on the network. The live post’s URL is kept when the network returns one. |
| Failed | Definitely not posted. Safe to retry. |
| Unknown | May be live. The network didn’t confirm the outcome. Check the account before retrying. Never retried automatically. |
| Paused | Its channel is beyond the free edition’s channel allowance. It carries on when the allowance returns. |
Failed or Unknown?
Section titled “Failed or Unknown?”Social decides from what the network’s post step did, never from the wording of an error:
| What happened in the run | Status |
|---|---|
| The post step completed | Published, even if recording the result failed afterwards |
| The network refused the request: a validation, authentication or rate-limiting failure | Failed |
| The post step never ran, was rejected or skipped, or the run failed before it | Failed |
| Automate couldn’t start the post step: it has no input and took no time (for example, the connection’s secret isn’t configured) | Failed (run.not_started) |
| The post step failed any other way: a timeout, a server error, an unclassified failure | Unknown |
| The run completed but the post step isn’t in it | Unknown |
| The target has been Publishing for 15 minutes with no result (checked every 5 minutes) | Unknown (dispatch.stale) |
A step that started always has its input recorded, so only a step Automate never handed to the network’s action counts as “couldn’t start”. Nothing was sent, so it is Failed. Fix the connection in Automate (the run shows which setting or secret is missing), then retry.
A timeout or a server error after the request was sent can mean the post went out anyway. Most networks have no way to ask “did my last request work?”, so Social treats it as Unknown rather than risk a duplicate public post. If a run marked Unknown after 15 minutes does finish and the network says the post is live, the target becomes Published.
The managed automation never retries the post step itself: it is set to no retries and to stop on error.
Resolving a failed or unknown post
Section titled “Resolving a failed or unknown post”Only a person decides to send a post again. Social never does it on its own. Both actions need the Resolve permission, and work only on a Failed or Unknown target:
- Retry sends it again as a new attempt: its attempt number goes up and it goes out at the next check. Retries are rate limited (10 per user per minute).
- Mark as published records that the post is in fact live, optionally with its URL (an absolute https URL). Use it after checking the account and finding the post there.
For a Failed target, you can also edit the post: on saving, the failed channels are sent again as a new attempt.
For an Unknown target, check the account first. If the post is there, mark it as published. If it isn’t, retry. While any channel is Unknown, the post can’t be edited (post.outcome_unknown).
The post’s overall status
Section titled “The post’s overall status”| Post status | When |
|---|---|
| Draft | Saved as a draft, not scheduled. |
| AwaitingApproval | Submitted for approval. Pro. |
| Scheduled | Waiting to go out on at least one channel. |
| Publishing | Any channel is Publishing. |
| Published | Published on every channel. |
| PartlyFailed | Published on some channels and Failed or Unknown on others. |
| Failed | Failed or Unknown on every channel. |
| Paused | Waiting, with at least one channel paused by the channel allowance. The channels that aren’t paused still go out. |
Hearing about outcomes
Section titled “Hearing about outcomes”Your code can react to each outcome with the SocialPostTargetPublishedNotification and the SocialPostTargetFailedNotification, for example to email someone when a post needs checking. Each run is also visible in Automate’s run history.