Beta OnCue is in open beta — ready to try, still being tested. See What's New →
Admin Guide

Every Connection, Set Up Step by Step.

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.

Before You Start Your First Event Slack Telegram SMS Messenger Signal · Teams · Google Chat Bluesky YouTube AI Key Highlights People and Moderation Sponsors Analytics and Stats Troubleshooting

Before You Start

Five minutes of groundwork makes every other section smoother.

What You Need

WordPress6.4 or newer, self-hosted
PHP8.0 or newer
HTTPSrequired for every chat platform's webhooks — they will not deliver to plain HTTP
Permalinksset to anything other than “Plain” (Settings → Permalinks) so REST endpoints resolve

The core liveblog works the moment you activate the plugin. Everything in this guide is optional and independent — connect only what you'll use.

Set a Dedicated Encryption Key (Recommended)

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.

Find Your Way Around

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.

Your First Event

Worth doing once before you connect anything, so you can see updates land.

Create, Place, Post

  1. Go to OnCue → Events → Add New, give the event a title, and publish it.
  2. Open the post or page where readers should watch, and add the OnCue block (or use the [oncue id="123"] shortcode). The event also has its own permalink that works out of the box.
  3. Open OnCue → Live console, pick your event, and post an update — text, photos, video, an embed, or a poll.
  4. Open the reader page in another tab. Your update is there, and new ones will appear without a refresh.

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).

Slack

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.

Connect Slack post from share to

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).

  1. In WordPress, open OnCue → Connections and find the Slack card.
  2. In a new tab, open Slack's app settings at api.slack.com/apps, scroll to “Your App Configuration Tokens”, click Generate Token for your workspace, and copy the Access Token.
  3. Paste it into the Slack card and save. OnCue uses it once — to create the OnCue app in your workspace with all the right settings — and never stores it.
  4. Click Add to Slack and approve the install. Done: every event on this site can now use Slack.

Point a Channel at an Event

  1. Open the event's setup screen and find the Slack channel picker. One channel feeds one event — a stray message in #general can never hit your liveblog.
  2. Public channel: just pick it — OnCue's bot joins automatically.
  3. Private channel: invite the bot first (/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.

Share the Liveblog Into Slack

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.

Telegram

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.

Connect Telegram post from

  1. In Telegram, message @BotFather and send /newbot. Name it something your team will recognize (“Newsroom Live Bot”), and copy the bot token it returns.
  2. Still in @BotFather, send /setprivacy, pick your bot, choose Disable. This lets the bot read all group messages, not just commands — without it, nothing will come through.
  3. Send /setdomain, pick your bot, and enter your site's domain (e.g. example.com). This enables one-click account linking for your team later.
  4. In WordPress, open OnCue → Connections, paste the bot token into the Telegram card, and save.
  5. Click “Connect bot to this site”. That registers your site with Telegram so the bot's messages get delivered here.

Point a Group at an Event

  1. Add your bot to the Telegram group your team will post from (or team members can message the bot directly).
  2. On the event's setup screen, bind that chat to the event. OnCue notices the moment the bot joins a group, so it shows up in the picker by name.

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.

SMS via Twilio

Reporters text updates to a phone number — no app, no data plan, no login. Ideal for the field.

Connect Twilio post from

  1. In the Twilio Console, copy your Account SID and Auth Token (both on the console home page) into OnCue's Connections screen. You'll also need at least one Twilio phone number.
  2. Open the phone number's settings in Twilio and find “A message comes in.” Set it to Webhook, paste the URL OnCue shows on its Connections card, and choose HTTP POST.
  3. On the event's setup screen, choose which Twilio number the event listens on — one event per number at a time.

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.

Facebook Messenger

Messages sent to your Facebook Page become updates. The most involved setup of the chat channels, because Meta requires an app.

Connect Messenger post from

  1. At developers.facebook.com, create (or open) an app and add the Messenger product to it.
  2. Copy the app's App Secret (App settings → Basic) and generate a Page Access Token for your Page (Messenger → Settings). Paste both into OnCue's Connections screen.
  3. Invent a Verify Token — any random string — and enter the same value in OnCue and in Meta's webhook configuration.
  4. In Meta's webhook settings, set the Callback URL to the address OnCue shows you, verify it, and subscribe the webhook to the messages field.

Once connected, texts and photos sent to your Page publish as updates from verified contributors, just like SMS.

Signal, Teams, and Google Chat

These three receive the liveblog: every published update posts itself into the group or channel you pick, so teams that live elsewhere still see the coverage in real time.

Microsoft Teams share to

  1. In the Teams channel that should receive updates, open the channel menu → Connectors (or Workflows on newer tenants) and create an Incoming Webhook. Give it a name and copy the URL.
  2. Paste the URL into OnCue's Connections screen, then enable Teams on the event's setup screen.

Google Chat share to

  1. In the Google Chat space, open the space menu → Apps & integrations → Webhooks, add one, and copy its URL.
  2. Paste it into OnCue's Connections screen and enable Google Chat on the event.

Signal share to

Signal has no hosted API, so this one is for the self-hosting crowd: you run a small signal-cli REST bridge (a well-known open-source container) on your own server, and OnCue talks to it.

  1. Stand up the signal-cli REST API bridge and register a phone number with it.
  2. In OnCue's Connections screen, enter the bridge's base URL and the registered number.
  3. On the event, pick the Signal group ID to share into.

Posting from Signal, Teams or Google Chat into the liveblog is on the roadmap — today these three are receive-only.

Bluesky

Two things in one connection: thread chosen updates onto your publication's Bluesky account, and search public Bluesky posts to embed into your coverage.

Connect Your Account share to

  1. In the Bluesky app, go to Settings → Privacy and security → App Passwords and create one. Never use your real account password.
  2. In OnCue's Connections screen, enter your handle (e.g. yourpub.bsky.social) and the app password.
  3. Leave the service URL blank unless you run your own AT Protocol server (self-hosted PDS) — then point it there.

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.

Search and Embed Public Posts curate

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.

YouTube

Search public videos and Shorts about your event and embed picks without leaving the composer.

Get a Free API Key curate

  1. In the Google Cloud Console, create a project (or reuse one).
  2. Enable the YouTube Data API v3 for it (APIs & Services → Library).
  3. Create an API key (APIs & Services → Credentials) and — good hygiene — restrict the key to the YouTube Data API.
  4. Paste the key into OnCue's Connections screen.

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.

AI Key Highlights

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.

How It Behaves (Worth Knowing Before You Pick a Model)

Choose a Provider and Paste a Key

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.

Anthropic (Claude) Default

Models offered: Claude Opus 4.8 (recommended), Claude Sonnet 4.6, Claude Haiku 4.5.

  1. Sign in at console.anthropic.com.
  2. Open API Keys, create a key, copy it (it's shown once).
  3. Pick Anthropic + a model in OnCue and paste the key.

Haiku is the budget pick if your events are long and frequent; Opus writes the sharpest summaries.

OpenAI

Models offered: GPT-4o (default), GPT-4o mini, GPT-4.1.

  1. Sign in at platform.openai.com.
  2. Create a key under API keys and copy it.
  3. Pick OpenAI + a model in OnCue and paste the key.

GPT-4o mini keeps costs near-zero for smaller events.

Google Gemini

Models offered: Gemini 2.5 Flash (default), 2.5 Flash-Lite, 2.5 Pro.

  1. Open Google AI Studio (aistudio.google.com).
  2. Click Get API key and create one.
  3. Pick Gemini + a model in OnCue and paste the key.

Flash is fast and generously priced — a good fit for high-frequency refreshes.

Self-Hosted / OpenAI-Compatible

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.

  1. Pick the Custom provider in OnCue.
  2. Enter the server's base URL (e.g. http://localhost:11434/v1 for Ollama).
  3. Type the model name exactly as the server knows it, and add an API key only if your server requires one.

On your own hardware, summaries cost nothing and nothing leaves your network.

Tune It per Event

Refresh cadencehow often highlights may refresh — 1 to 60 minutes, default 5. Longer cadence = fewer model calls.
Max bullets1 to 5. Three is the sweet spot for most events.
Editorial controlsedit any bullet in place, pin the box to freeze it, or force a refresh — all from the event screen, available to the event's authors and up.

Readers never trigger a model call — the reader page only ever serves stored text. Your bill scales with your posting pace, not your traffic.

People and Moderation

Bylines stay honest because every chat identity maps to a real WordPress user — and you decide what happens to messages from anyone unrecognized.

Link Contributors' Chat Identities

Each contributor does this once, from their own WordPress profile (Users → Profile):

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.

Approve Before Publish

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).

Analytics and Stats

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.

Step 1 — Stats Works Out of the Box

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.

Step 2 — Prefer Google Analytics? (Optional)

Under Connections → Analytics, switch the Stats source to Google Analytics. OnCue then needs read access to your GA4 property:

  1. In Google Cloud Console, create a service account (no billing needed) and enable the Analytics Data API on the project.
  2. In GA Admin, grant that service account Viewer access on your GA4 property.
  3. Download the service account's JSON key and paste it into OnCue's Connections screen — stored encrypted, like everything else.
  4. Enter your GA4 property ID (GA Admin → Property settings — it's a number, not the G-XXXX tag ID).
  5. Click the button to register OnCue's custom dimensions on the property (this one step needs the service account to have Editor rather than Viewer; it's safe to re-run).

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.

Send Reader Events to Your Own Tag (Optional)

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.

Troubleshooting

The five things that explain almost every “it's not working.”

Quick Answers

Chat messages don't arriveCheck the webhook first: your site must be HTTPS and publicly reachable, and permalinks must not be “Plain.” For Telegram, re-run “Connect bot to this site”; for Slack, confirm the bot is actually in the channel (private channels need /invite @OnCue).
Posts publish with the wrong bylineThe sender hasn't linked their chat identity — have them do the one-click link from their WordPress profile (People).
Credentials suddenly “invalid”Did you rotate your WordPress salts without a dedicated 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.
Highlights aren't refreshingRefreshes ride on WordPress's scheduler, which on a very quiet site only runs when someone visits. If your events run while traffic is low, ask your host to enable a real server cron for WordPress — a standard one-line change.
YouTube search returns nothingMost often the daily quota (~100 searches) is spent, or the API key is restricted to the wrong API. Check the key's restrictions in Google Cloud and try again tomorrow — embedded videos keep playing regardless.

Set Up Once. Go Live Whenever.

Every connection here is a one-time job — after that, starting coverage is just creating an event and posting.