Skip to main content
Three ways to send messages without writing each one: an automation that reacts to comments, a broadcast that goes to many contacts at once, and a sequence that follows up over days. All three run on PlugKit’s own workers, so they keep going when your process isn’t running.

Comment → DM

Someone comments a keyword, they get a private message.

Broadcasts

One message to a filtered slice of your inbox.

Sequences

Timed follow-ups that stop when they reply.

Comment → DM

The classic “comment LINK and I’ll send it to you”. PlugKit watches the posts you name, matches the keyword, and sends the DM.
Meta allows one private reply per comment, within 7 days. It’s the only way to message someone who has never written to you — and it doesn’t come back. A second automation matching the same comment finds the door closed.
Instagram and Facebook Pages only — no other platform exposes private replies. Check what actually fired with GET /v1/comment-automations/{id}/runs.

Broadcasts

One message to many conversations. Preview the audience before you commit:
Create and schedule
Then POST /v1/broadcasts/{id}/send to queue it, or let the schedule fire. POST /v1/broadcasts/{id}/cancel puts a scheduled broadcast back to draft.

The 24-hour window governs everything

Meta refuses an unlabelled message more than 24 hours after the contact’s last one. That’s why activeWithinDays: 1 is the default audience: it is the slice that will actually be delivered. You can widen it, and PlugKit will try. Failures then land per recipient, in the delivery log, rather than failing the whole broadcast:
Telegram has no such window. WhatsApp has approved templates for it — see WhatsApp.

The audience is frozen at send time

Recipients are resolved once, when sending starts, and written down. A conversation that arrives mid-send isn’t silently added, and a retry after a partial failure doesn’t message the people who already got it twice.
Broadcasts run on Instagram, Facebook, WhatsApp and Telegram. X is deliberately excluded: its DMs are billed per call, and a 500-recipient broadcast would build an invoice nobody approved.

Sequences

A series of messages sent over time, to whoever enters. Steps carry their own delay, counted from the previous one:
stopOnReply: true drops someone out the moment they answer. Leave it on unless you have a reason: a human reply that keeps getting followed up by a robot is the fastest way to lose the conversation you just won. Follow who’s in and where with GET /v1/sequences/{id}/enrollments.
Sequence steps obey the same 24-hour window. A step that comes due outside it is recorded as failed for that person, with the reason, and the sequence moves on rather than stalling.
All three carry a link button: dmButtonLabel / dmButtonUrl on a comment automation, buttonLabel / buttonUrl on a broadcast and on each sequence step. Label and URL go together — one without the other is a 400. Instagram and Facebook render it as a button template, WhatsApp as a CTA, Telegram as an inline keyboard. Where the platform refuses it, the URL is appended to the text rather than lost.
Prefer the button to a link pasted in the message body. A bare link in a DM is what Meta flags — and it’s the reason the story lead magnet above sends a button rather than example.com in plain text.

Events

Subscribe to webhooks to know what happened: comment.dm_sent when an automation fires, broadcast.finished when a send completes.