Prompt
(Make OpenAI module prompt) From this changelog entry, write a 2-tweet X thread. Tweet 1: the change and who it helps. Tweet 2: how to try it, with the link. Each tweet under 250 characters. Return JSON with body and thread fields. How to do it
- Mint a key Create a Make key in Connections scoped to X with the draft permission.
- Add the trigger Watch your CMS, changelog tool, or a webhook. Add a filter so only published items continue.
- Generate the text Use an AI module with the prompt above and parse the JSON it returns.
- Add HTTP > Make a request Method POST, URL https://app.socialhandoff.com/v1/posts, header Authorization: Bearer plus your key, body type raw JSON with body, thread, networks set to x, and mode set to submit.
- Review Run once. The thread shows up in the inbox as pending.
Example draft
1/ You can now export any report as CSV straight from the dashboard. Built for finance teams who were copying tables into spreadsheets by hand. 2/ Open a report, pick Export, choose CSV. Filters carry over. Details: https://example.com/changelog/csv-export
Gotchas
- Map the thread field as an array in Make, not a joined string, or X will get one long tweet that fails the 280 check.
- A router with several branches can fire twice for one item. Duplicate protection blocks identical text, but different wording from each branch creates two drafts.
- Up to 4 media per tweet. Send public image URLs; private-network addresses are refused.
- Character limit: 280 weighted characters for standard accounts. Most CJK characters and many emoji count as 2. Premium accounts can post longer, but SocialHandoff checks against 280.
- Links: Every URL is wrapped by t.co and counts as 23 characters, whatever its real length.
- Media per post: Up to 4 images, or 1 GIF, or 1 video.
- File sizes: Images up to 5 MB, GIFs up to 15 MB, video up to 512 MB (uploaded in chunks).
Frequently asked questions
Can Make read whether a post was approved?
Yes. Subscribe a Make webhook to the post.published and post.failed outbound events, or poll the post by id.
What happens if X rejects the post?
Publishing retries on transient errors. A permanent failure marks the post failed and fires the post.failed webhook.