This is the working manual for the person who runs the site: exact clicks for connecting Slack, Telegram, SMS, and the rest, wiring up your own AI for Key Highlights, and switching on sponsors, moderation, and stats. Bookmark it — you'll set most of these up exactly once.
Five minutes of groundwork makes every other section smoother.
The core liveblog works the moment you activate the plugin. Everything in this guide is optional and independent — connect only what you'll use.
Every credential you paste into OnCue is encrypted at rest. Out of the box it derives the encryption key from your WordPress security keys, which works with zero setup — but if you ever rotate your salts, stored credentials become unreadable and must be re-entered.
The sturdier option takes one line in wp-config.php, above the “That's all, stop editing” comment:
define( 'ONCUE_ENCRYPTION_KEY', 'a-random-string-of-32-or-more-characters' );
Do this before connecting anything and you'll never think about it again. Generate the string with any password manager.
OnCue adds three places to the WordPress admin:
The pattern throughout: connect once per site (this guide), then pick per event (a channel, a group, a number) on the event's setup screen.
Worth doing once before you connect anything, so you can see updates land.
[oncue id="123"] shortcode). The event also has its own permalink that works out of the box.That's the whole core loop. Everything below adds ways in (your team's chat apps), ways out (their other channels and Bluesky), and extras (AI highlights, sponsors, stats).
The recommended anchor: your team posts from a channel, and the liveblog can post back into other channels. You never hand-build a Slack app — OnCue creates it for you with a one-time setup code.
One time, per site. You'll need to be a member of the Slack workspace (any member can do this; you don't need to be a workspace owner to generate the token, though installing the app may need approval in locked-down workspaces).
#general can never hit your liveblog./invite @OnCue in the channel), then it appears in the picker.From then on, every message in that channel becomes a liveblog update — text, photos, and video included. Editing the Slack message updates the entry.
Need to chat without publishing? Start a message with // and OnCue skips it. Great for “// holding until we confirm” asides in the coverage channel.
On the event's setup screen, choose a channel to receive published updates. Everything that publishes — from the console, SMS, Telegram, anywhere — posts into that channel with the author's name inline, so the channel becomes the team's live wire. OnCue never posts an update back into the channel it came from, so there are no duplicates.
The lightest connection: a free bot and about three minutes with @BotFather. Telegram is a posting channel — messages flow in; it doesn't receive the feed back.
/newbot. Name it something your team will recognize (“Newsroom Live Bot”), and copy the bot token it returns./setprivacy, pick your bot, choose Disable. This lets the bot read all group messages, not just commands — without it, nothing will come through./setdomain, pick your bot, and enter your site's domain (e.g. example.com). This enables one-click account linking for your team later.Every message in the bound chat — text and photos — becomes a liveblog update.
Want remote contributors to see everything that publishes, not just their own group's messages? Share the event into a Slack channel, Signal group, or a Teams/Google Chat space — Telegram itself doesn't receive the feed.
Reporters text updates to a phone number — no app, no data plan, no login. Ideal for the field.
Texts only publish from people you've verified. The sender's phone number must be linked to a contributor on your site (see People & moderation) — an unknown number can't post to your front page.
Messages sent to your Facebook Page become updates. The most involved setup of the chat channels, because Meta requires an app.
Once connected, texts and photos sent to your Page publish as updates from verified contributors, just like SMS.
Two things in one connection: thread chosen updates onto your publication's Bluesky account, and search public Bluesky posts to embed into your coverage.
yourpub.bsky.social) and the app password.During an event, tick “Send to Bluesky” on any update in the live console. You choose exactly what goes; chosen posts chain into one growing thread per event, so followers can read the coverage natively. Links post as proper link cards, and deleting an entry removes its Bluesky post too.
From the composer's search, editors can find public Bluesky posts about the event and embed the best ones straight into the stream. This part needs no account at all — it searches Bluesky's public index — so it works even before you connect anything.
Search public videos and Shorts about your event and embed picks without leaving the composer.
Google's free quota allows roughly 100 searches a day. OnCue caches repeat searches for about ten minutes to stretch it, which is plenty for editorial use — but it's why search results during a fast-moving event can lag a few minutes behind the newest uploads.
A running, cited TL;DR at the top of your coverage — grounded only in what your team actually published. You bring the model: four provider options, one of which can be entirely your own hardware.
Everything lives in OnCue → Connections, on the AI card: pick who runs the model, pick the model, paste that provider's API key. The key is a spend credential, so it's encrypted like every other secret and used only to generate summaries.
Models offered: Claude Opus 4.8 (recommended), Claude Sonnet 4.6, Claude Haiku 4.5.
Haiku is the budget pick if your events are long and frequent; Opus writes the sharpest summaries.
Models offered: GPT-4o (default), GPT-4o mini, GPT-4.1.
GPT-4o mini keeps costs near-zero for smaller events.
Models offered: Gemini 2.5 Flash (default), 2.5 Flash-Lite, 2.5 Pro.
Flash is fast and generously priced — a good fit for high-frequency refreshes.
Run highlights on any server that speaks the OpenAI API shape: Ollama, LM Studio, vLLM on your own hardware, or hosted services like Together and Groq.
http://localhost:11434/v1 for Ollama).On your own hardware, summaries cost nothing and nothing leaves your network.
Readers never trigger a model call — the reader page only ever serves stored text. Your bill scales with your posting pace, not your traffic.
Bylines stay honest because every chat identity maps to a real WordPress user — and you decide what happens to messages from anyone unrecognized.
Each contributor does this once, from their own WordPress profile (Users → Profile):
/setdomain step) connects their Telegram account.Once linked, their messages publish under their own byline. The identity cards only appear on profiles for services you've connected site-wide — no clutter for channels you don't use.
The moderation module holds updates for review before they go live, and it's scoped the way real coverage works: per event, or per source. A common setup — auto-publish the newsroom Slack channel, hold everything arriving over SMS, and hold messages from any sender who hasn't linked their identity (or attribute them to a house account instead — your choice in settings).
Live coverage is premium attention. The sponsor module lets you sell it without faking updates.
Cards are clearly labeled “Sponsored” and slotted between updates at render time. They are never real entries — so they stay out of your feeds, your shared channels, the AI highlights, and your archive.
Already run an ad stack? A developer can hand OnCue's computed slot positions to Google Ad Manager, AdSense or any ad plugin via a filter — OnCue decides where, your stack decides what, and no ad code is ever stored in your database.
Per-event Stats works out of the box. OnCue measures readers on your own server and keeps the numbers in your own database — per event, inside WordPress. Prefer GA4? Point Stats at your own property instead.
There is nothing to configure. OnCue counts readers on your own server: readers and unique readers, average engaged time, updates seen per reader, interactions, traffic sources, devices, and countries — plus a live “reading right now” count while an event is running.
Collection is cookieless and stores no personal data. Unique readers use a daily-rotating fingerprint, so day-by-day trends are exact while lifetime totals are approximate, and IP addresses are used only to derive an approximate country, never saved.
Under Connections → Analytics, switch the Stats source to Google Analytics. OnCue then needs read access to your GA4 property:
G-XXXX tag ID).From then on, each event's Stats screen shows readers and engagement from your GA property (cached 15 minutes) alongside poll results, which come straight from your own database.
Whichever source Stats uses, OnCue can also mirror reader interactions — views, time following, poll votes, and shares — into the GA4 or Google Tag Manager tag your site already carries, labeled with the event so you can tell coverage traffic apart. Not on Google? The same events fire as DOM events any analytics tool can listen to.
Off by default, and OnCue sets no cookies of its own — your existing consent setup keeps working unchanged.
The five things that explain almost every “it's not working.”
/invite @OnCue).ONCUE_ENCRYPTION_KEY? Stored secrets can't be decrypted after that — re-enter them under Connections, then set the dedicated key so it can't happen again.Every connection here is a one-time job — after that, starting coverage is just creating an event and posting.