Skip to main content

What the Bot Checks

Onflow Ads only works because a deal can be checked. Telegram tells the website nothing about what is happening inside a channel, so the bot β€” which you have added as an administrator β€” is the thing that looks, and reports back.

That is its third job, alongside notifying you and carrying out what the website decided. It is worth understanding, because it is how the platform knows a deal was honoured, and it is where a reliability penalty comes from.

The bot observes; the website decides

The bot records what it saw β€” into a queue the website owns, as a fact that names the placement or campaign it is about. Everything that follows from an observation β€” a score moving, compensation being paid, a payout being held β€” is decided and applied by the website against the one account it already holds, usually within a minute. The bot never sends an amount, only what happened; the website prices it from its own published table, and a fact it does not recognise is held for a human rather than guessed at. There is no separate bot-side record to argue with, and no bot-side score to appeal to.

Before you start​

  • Your channel must be public. Only public Telegram channels can be verified. A group or a user account cannot.
  • You must be an administrator of it. Not the owner necessarily, but an administrator β€” the check confirms it.
  • The Onflow Ads bot must be an administrator of it too, with the rights below. Nothing can be confirmed before that, because a channel nobody has posting rights in cannot be delivered into.

The four checks​

CheckWhen it runsWhat it is for
Is this channel real, and do you administer it?When you enroll or re-verify a channelNobody can list a channel they do not control
How much reach does it actually have?At enrollment, and on a refreshBuyers see measured numbers instead of claims
Is the agreed post still there?Repeatedly, for as long as an agreed placement is runningA deal that was paid for was actually delivered
Did the channel stay clear during a paid ad's window at the top?Once, shortly after that window closesA placement sold as "an hour at the top" was actually at the top

Verifying a channel​

Every "add a channel" surface behaves identically, because the rule and its wording live in one place.

The Onflow Ads β€œAdd your channel” step, headed β€œManual cross-promotion Β· Step 1”, with the guidance β€œPaste your public Telegram channel link. We'll ask you to add our bot as an admin to confirm you own it, then pull in its details automatically. Only public channels can be listed.”, a β€œPublic channel link or @username” field and a red β€œFetch & preview” button

Plus plan Β· Advertiser. Where a channel is added. Paste the link first; the add-the-bot panel appears next if the bot is not an administrator yet.

Step by step​

  1. Paste your public channel link or @username and submit it.
  2. If the bot is not yet an administrator, an amber panel appears headed Add our bot to verify your channel β€” "To confirm your channel exists and go live, add our bot to it as an administrator with the rights below. We verify instantly β€” no waiting." It shows the bot's @username as a chip with a Copy button, and a checklist of the rights.
  3. Press βž• Add @… as admin. Telegram opens with the exact rights pre-ticked, so you do not have to find them by hand.
  4. Back on the page, press I've done it β€” check again. The button shows Checking… while the platform asks Telegram for the channel and its administrator list.
  5. On success the channel is confirmed and its details are pulled in automatically.

The rights it asks for​

RightRequired?Why
Post MessagesAlways requiredSo the bot can publish the sponsored or cross-promotion post it is being trusted to deliver
Edit MessagesRecommendedSo the bot can fix or refresh a post it published
Delete MessagesRequired in every engineThe bot removes every placement it publishes when the run ends β€” a Paid Promotions post at the end of its booked duration, both cross-promotion posts, every exchange placement after its 24 hours
Delete Messages is not optional anywhere any more

Every engine now promises the advertiser that a placement comes down on schedule, and the bot cannot keep that promise without permission to delete its own post. The Subscriber Exchange enforces it at enrolment β€” a channel that clears the ordinary check can still be refused by the exchange for exactly this reason β€” and on Paid Promotions a channel where the bot cannot delete cannot honour a booking's end.

Granting all three rights everywhere is the reliable setup: the bot can then put the post up, correct it if needed, pin it where that was paid for, and take it down at the end, without you having to remember. In a channel, Edit Messages is also what lets the bot pin β€” see below.

Pinning a channel post uses Edit Messages, not a "Pin Messages" right

Telegram splits this by chat type, and its own API documents both halves:

  • can_pin_messages is "for groups and supergroups only". A channel administrator's record does not carry the field at all.
  • pinChatMessage requires can_pin_messages in a supergroup, or can_edit_messages in a channel.

So for a channel, the switch that grants pinning is Manage Messages β†’ "Edit Messages of Others". There is no separate pin toggle to find.

The platform checks the right one for the chat type when you switch a pin product on in your rate card, and refuses the save naming the toggle to grant. If the check itself cannot run β€” Telegram unreachable, for instance β€” the save is allowed through rather than blocked on our own outage.

What a failed check tells you​

MessageWhat it means
"We couldn't find that channel. Add @… to your channel as an administrator, then try again."The channel could not be read at all β€” usually because the bot is not in it yet
"Only public Telegram channels can be verified β€” that looks like a group or user."The link points at a group or a personal account
"Add @… to your channel as an administrator (with β€œPost Messages”), then try again."The bot is in the channel but is not an administrator
"@… is an admin but is missing the β€œPost Messages” right. Turn it on in the channel's admin settings, then try again."The bot is an administrator with the wrong rights
"You must be an administrator of this channel to list it. Add yourself as an admin, then try again."The channel is fine, but your own Telegram account is not an administrator of it

The full walkthrough is on Verifying your channel.

Removing the bot breaks more than posting

If you remove the bot as an administrator part-way through a placement, it can no longer read the channel β€” so it can no longer confirm your post is still there. Keep it an administrator for the whole of any run you have agreed to.

Measuring reach​

At the same moment, Onflow Ads reads two things: the channel's subscriber count, taken directly through the bot, and a sample of its recent public posts, from which an average view count is worked out.

It reads only public channel content and the posts our own placements created β€” never your subscribers' messages, and never their identities.

Alongside that, a separate reading of the public channel fills in the figures a bot cannot see: reactions and shares per post, how often the channel posts, when it was created, and how many people are online. Those live only where that reading succeeds.

Measured, or as stated by you​

Some figures on a channel start life as something you typed into the listing wizard β€” subscribers, views per post, reactions per post, shares per post. When a live reading succeeds, it overwrites your figure and the number is a measurement. When it does not, what remains is your own claim, and the product says so: the tile carries the label "As stated by the owner β€” not measured by us".

Those four are the only figures that can ever carry that label. Everything else β€” engagement, posting cadence, admin and online counts, lifetime posts β€” either comes from a live reading or is not shown at all.

Absent is not zero

A figure that could not be measured is shown as absent β€” a dash β€” rather than as a fabricated zero. "We did not measure this" and "nobody saw it" must never look the same in a report somebody is paid on. A tile with no value simply does not appear.

Your channel's picture is served from Onflow Ads' own address, not from Telegram's. A Telegram file address is short-lived and carries a credential inside it, so one is never stored or handed out.

Watching an agreed post stay up​

Once a post is live, a background monitor returns to it for as long as the agreed term runs. Every 30 minutes it asks one question: is the post still there?

For a cross-promotion it also checks that each partner is still a member of the other's channel, since leaving mid-run defeats the swap just as thoroughly as deleting the post.

The monitor is deliberately timid​

A wrong flag would cost somebody a reliability penalty they did not earn, so the bar is proof rather than suspicion.

RuleWhat it means
Every reading is one of three thingsThe post exists, the post was deleted, or the check could not be completed
A "deleted" reading is never enough on its ownIt takes two consecutive conclusive deleted readings before anything is recorded. Waiting one more 30-minute cycle costs nothing; a wrong penalty is irreversible in practice
Four failed checks are toleratedA network blip, a rate limit or lost access is counted and retried, not punished
A failed check only counts when our own probes are healthyIf the checking machinery itself is down, every probe on every campaign reads as inconclusive. Those cycles are not counted against anyone
Persistent ambiguity is only a violation when it is attributableAfter four inconclusive cycles, a penalty follows only if the bot was removed or demoted in the host channel β€” something only that channel's own administrators can do. Anything else goes to human review once, with no automatic penalty
Leaving a partner's channel needs confirming tooA first "left" reading proves nothing; it takes two consecutive readings, and only after the person was actually seen as a member first
The end of a run is left aloneChecking stops 10 minutes before the scheduled end, because the platform itself removes both posts at that moment and a slow probe could read a legitimate takedown as a violation
One violation, one flagA placement can be flagged once. It cannot be penalised twice for the same failure

A paid placement is held to stricter rules again β€” see Delivery monitoring and your reliability.

An ordinary paid format is not checked for a pin, because it never promised one

"1 hour at the top", "2 hours at the top", the native and month formats β€” none of them are pinned, and none of them are pin-checked. What they promise is the section below.

A pin is only checked where a pin was bought: the Pinned for the whole campaign extra, or the 7 days in feed Β· pinned throughout format. Placements booked before the two were separated keep the older "pinned for N hours" meaning and are still checked as pins, because that is what their owners agreed to.

Where a pin is checked, what is read is whether that ad's own message is still pinned. Pinning something else alongside it does not unpin it and is not a violation.

Watching the top-of-feed window​

A format like "1 hour at the top" sells one thing: for that hour, the ad is the newest post in the channel, so anyone who opens the channel sees it first. The owner agrees to publish nothing else in the window.

The window is the "at the top" half of whatever format was booked β€” one hour, two, or three. Two formats carry no window at all and are never checked this way: Forward / repost, and 7 days in feed Β· pinned throughout, which sells the pin instead.

This can only ever be a promise that is checked, never one that is prevented. No bot can stop a channel's own administrators from posting, and Telegram's slow mode does not apply to them. So the check happens afterwards.

How the check worksDetail
Once, after the factAbout 5 minutes after the window closes, the channel's recent history is read once. One read reconstructs the whole window β€” including anything posted and then deleted inside it, which no repeated polling could catch
What counts as a breachAny message published in the channel after the ad, dated inside the ad's window
What does not countThe ad's own extra images when it is an album; service messages such as a pin, a join or a title change; forwards of the ad itself; and edits, because editing does not make a new message
The verdict has three statesClear, breached, or unknown. "We could not look" is never filed as clear and never as a breach
Unknown is retried, not punishedAn unresolved placement is re-read on later passes for up to 25 hours after the ad went live. If it is still unresolved then, it is closed as unknown β€” permanently, with no penalty
It needs the public reading to be workingWhere that reading is unavailable, this check does not run at all
There is no two-reading rule here, and that is on purpose

The delete-early monitor waits for two consecutive readings before it records anything, because a live probe can catch a channel mid-blip. This check is different: it is a single look back at an hour that has already happened and cannot change. A second read of the same history would return the same answer, so an uncertain result gets its own verdict β€” unknown β€” and is retried, rather than being confirmed by a second probe.

What a breach costs​

0.40 points off the 0-to-10 reliability score, applied once, to the channel owner. It is deliberately far lighter than the 1.50 for an ad that was deleted or not kept pinned: posting one extra message forty minutes into a window is a smaller wrong than removing the ad, and the ladder has to say so.

There is no money consequence. The payout is untouched. It still depends only on leaving the ad up for its full run.

Both sides are told, and this one is told in the product, not in Telegram β€” there is no DM for it. It lands in your Paid Promotions notification feed:

WhoWhat they see
The channel owner"Your channel posted during an ad's exclusive window", with how many posts went up and how far into the window the first one was, linking to your bookings desk
The advertiser"Your ad did not get its full time at the top", with the same detail, and a note that the ad is still running for its full booked duration

What happens when a post comes down early​

This is the heavier violation β€” the ad was removed, or a partner left the other's channel, before the agreed end. Three things follow, in this order:

  1. The fact is recorded. The bot writes what it saw β€” which campaign, which side, whether the post came down or the partner left β€” into the website's queue. Removing a cross-promotion post before the campaign ends is recorded as CP post removed early; leaving (or leaving and rejoining) the partner's channel while their post was still up is recorded as Left the partner channel early. The same act is one fact: a restart or two monitors racing on the same campaign cannot record it twice.
  2. Both sides are told. The account at fault gets an Anti-Cheat Violation Detected DM naming the campaign code and the channel, saying what happened, and stating what was recorded β€” "βˆ’1.50 recorded (your 0-to-10 track record) β€” it is applied on onflowads.com within a few minutes" for a removed post, "βˆ’1.00 recorded…" for leaving the channel. If nothing could be recorded, the line says logged for review β€” no change has been applied to your score yet. The DM carries a See why & appeal button straight to your reliability page. The other party gets a Partner Removed Their Post Early or Partner Left Your Channel Early DM telling them it was logged and that there is nothing for them to do.
  3. The website prices it, and settles any insurance. The website applies βˆ’1.50 or βˆ’1.00 to the 0-to-10 reliability score, once, and writes the ledger entry. Where the party at fault had declared insurance cover, the bot records the claim and the injured party gets a Campaign Insurance Claim Recorded DM; the website then moves the declared amount from the party at fault to the partner's wallet β€” into debt if the wallet cannot pay it. The check reports; the website moves the money and the score.
The score is one score

There is not a bot score and a website score. What the monitor observes is priced by the website into the same 0-to-10 reliability score and the same ledger every other event lands in, and it is contested the same way β€” see Your reliability score and Appeals and fraud concerns. The same is true of a paid placement: the bot's retention check records Post removed early, the website applies the βˆ’1.50, and a paid pin taken down early is recorded, refunded and priced at βˆ’0.75 by the website. And it is true of the Subscriber Exchange: the bot records an early removal, a demotion or a no-show as a breach, and the website decides β€” from that record β€” the grace pass, the strike, the cooldown, the suspension and the price. See Rules and fair play.

How your submission is reviewed​

Automatic checks confirm a channel exists and that you administer it. They do not judge whether a listing or an ad should go live. That part is a person.

What you submittedWho sees it, and how
A Paid Promotions listingThe moderation team is sent the full listing card in Telegram, headed "πŸ†• New Paid Promotions listing" β€” or "πŸ” Re-verification request" if you edited an already-verified one. It carries βœ… Approve and list it and ❌ Decline and send back buttons, which open a signed, single-purpose confirmation page on the website. The decision is made there, not in the chat
A Subscriber Exchange adThe ad becomes a card in a private review area with two buttons. A tap is relayed to the website in a signed call β€” the website verifies the reviewer, records the decision, refunds a declined ad's charges exactly once, and notifies you. If it is declined, the reviewer's reason is carried back to you word for word β€” in the bot and by email. If the relay is unavailable, the reviewer decides on the website's admin console instead
Re-submitting invalidates the older review link

Each review link is bound to the exact submission it was sent for. Editing your listing and submitting again silently retires every earlier Approve or Decline link, so a stale message in somebody's chat history can never approve a version of your listing that no longer exists.

You hear the outcome as a DM either way β€” Your channel is live!, Channel needs attention with the reason, or Your ad was not approved with the reviewer's words. A decline on an exchange ad does not affect your reliability.

If something goes wrong​

What you seeWhat it meansWhat to do
The add-the-bot panel keeps reappearing after you added the botThe bot is an administrator but without Post Messages, or Telegram has not propagated the change yetOpen the channel's admin settings, confirm the rights, wait a few seconds and press I've done it β€” check again
The channel verifies but the Subscriber Exchange still refuses itDelete Messages is missing, which the exchange requiresGrant it and re-check
A subscriber or view figure shows a dashThat figure could not be measuredNothing to fix on your side. It refreshes on the next measurement
You were flagged for a post you did not removeTwo consecutive conclusive readings said it was goneUse See why & appeal on the DM, or open your reliability page. You are contesting a ledger entry on your own account
A DM says a penalty was recorded but your ledger does not show it yetThe website prices the bot's record on its next sweep, usually within a minuteReload the page shortly. Logged for review means nothing was applied at all
Your post came down a minute or two early and nothing happenedChecking stops 10 minutes before the scheduled endWorking as intended. Removing a post hours early is what the check exists to catch
Telegram was down and you were not penalisedA check that could not be completed is never a violation on its ownWorking as intended
You lost 0.40 points and your ad was never touchedSomething else was published in your channel during a paid ad's window at the topThe window is what the placement was sold on. Hold your own posts until it closes β€” the length is on the booking
A booking's pin never happenedMost often the bot does not hold Edit Messages of Others in that channelGrant the right. A pin the platform failed to apply is recorded as our fault and is not turned into a penalty against you

Short FAQ​

Does the bot read my channel's messages?​

No. It reads whether the channel exists and whether you administer it, its subscriber count, a sample of recent public posts to measure reach, whether a post it published for an agreed placement is still there, and β€” once, after a paid ad's window at the top closes β€” the public posts published in that window. It does not read your subscribers' messages or their identities.

Can I be penalised for something Telegram broke?​

No. A check that could not be completed is counted and retried, never treated as a violation on its own β€” and if the checking machinery itself is unhealthy, the failed cycle is not counted at all.

Why does the bot need to stay an administrator after the post is up?​

Because its access is how the platform can tell the post is still there. Remove it mid-run and the placement can no longer be confirmed.

The check flagged me and I disagree.​

Use the See why & appeal button on the DM, or open your reliability page on the website. See Appeals and fraud concerns.