Every task needs a proof contract
An airdrop task is not a sentence beside a checkbox. It is a contract describing the required action, who can perform it, the evidence accepted, when that evidence expires and what eligibility it creates. Without that contract, users cannot know why a task failed and operators cannot distinguish fraud from integration failure.
Write the proof contract before publishing the reward. A channel task may require current membership at verification time or continued membership until a snapshot. A product task may require a server event with a unique account. A social-network task may have no reliable API evidence and therefore need manual review or a lower weight.
| Task | Strong evidence | Weak evidence |
|---|---|---|
| Join Telegram channel | Bot API membership state with correct bot access | User presses Done or opens the channel |
| Start partner bot | Partner callback or attributable start event | Destination click |
| Complete Mini App action | Validated server-side product event | Client local storage or screenshot |
| Follow external account | Provider API or manual review where permitted | Typed username without verification |
| Refer a user | Immutable attribution plus qualification event | Shared link or raw click |
Verify Telegram membership with the right permissions
Telegram's getChatMember method can return information for other users when the bot is an administrator in the chat. If the bot lacks access, the chat identifier is wrong or the channel is private without the expected relationship, a verification failure can look like a user failure. Test the bot's permission and target chat before the campaign begins.
Map Telegram's member states to the published rule. Creator, administrator and member normally satisfy a current-membership requirement. Left or kicked does not. Restricted needs careful interpretation because the account may still be a member. Store the checked state and time so support can distinguish what Telegram reported from what the UI displayed.
- The verification bot is an administrator where required.
- The canonical chat ID is stored instead of relying on a mutable title.
- Private invite links are not mistaken for chat identifiers.
- Member-state mapping matches the published eligibility rule.
- API errors create a retryable system state, not an automatic user rejection.
- The verification time and rule version are recorded.
Submitted, verified and eligible are different states
A verified action does not always mean immediate, transferable value. Airdrops often use tasks to calculate future eligibility. Use language such as points, eligibility or allocation input until the distribution asset and process exist. Do not display every verified task as withdrawable balance.
- Available
The task is visible to the account under campaign rules.
- Started
The destination or instruction was opened; no reward proof exists yet.
- Submitted
The user asks for verification or supplies permitted evidence.
- Verified
The server confirms the task under a specific rule version.
- Eligible
The verified task contributes to the airdrop allocation or milestone.
- Revoked
A condition that must persist no longer holds before the snapshot.
- Finalized
The snapshot or distribution locks the result under published rules.
Decide whether membership must persist
If the rule requires only joining once, a successful check can be permanent. If it requires membership at a future snapshot, the system must recheck before finalization. Publish that distinction. Retroactively revoking a reward under an unstated stay-until-distribution condition is a common source of distrust.
Recheck in batches with rate limits and incident handling. A temporary Telegram API failure should not mass-revoke legitimate users. Preserve the last successful state, mark the recheck as unavailable and retry according to an operator procedure.
Off-platform tasks need lower confidence
A Telegram bot cannot automatically prove every YouTube subscription, social follow, website registration or wallet action. Some providers expose APIs with user authorization; others prohibit or limit this use. Where direct evidence is unavailable, choose manual review, partner callback, a cryptographic wallet proof or a lower-value self-attested task.
Do not ask users for passwords, seed phrases, private keys or Telegram login codes. A screenshot can assist review but is easy to reuse and may expose personal data. Collect the minimum evidence, publish retention rules and provide a rejection reason without revealing anti-fraud thresholds.
Make verification idempotent and auditable
A successful task should write one completion for one account, campaign, task and rule version. Repeated Verify taps return the existing result. If the task can be repeated, create explicit periods or instances instead of deleting the prior completion.
Keep the external evidence reference, normalized result, check time and resulting eligibility event. When an operator corrects a false rejection, write a compensating decision with an actor and reason. Editing a total without the source decision makes later reconciliation impossible.
One account + one task instance + one rule version = at most one eligibility creditDesign for honest failure messages
| Failure | User message | Operator action |
|---|---|---|
| Not currently a member | Join the specified channel, then retry | Confirm target chat and member-state mapping |
| Bot lacks access | Verification is temporarily unavailable | Restore bot permission; do not blame the user |
| External provider unavailable | We could not check this task yet | Retry with backoff and preserve submission |
| Evidence does not match | The submitted account or event could not be linked | Expose a safe correction path |
| Already verified | Task completed | Return the existing eligibility result |
| Rule expired | This task closed at the published time | Keep the historical decision auditable |
A prelaunch verification test
Run this test before promotion. Buying traffic for a task flow whose verification is ambiguous creates support debt and a contaminated allocation. The best acquisition campaign cannot repair an eligibility ledger that owners and users cannot audit.
- A clean account completes each task through the published path.
- A nonmember fails the channel check and can retry after joining.
- A user who leaves follows the published persistent-membership rule.
- Repeated Verify taps never create duplicate eligibility.
- A Telegram API error produces a retryable system failure.
- A self-referral or repeated wallet does not create an extra allocation.
- The operator can explain every state from logs without opening the production database manually.
- The snapshot and distribution process can reconcile total eligible liability.
Common questions
Can a Telegram bot verify that a user joined a channel?
Yes, when the bot has the required chat access and uses Telegram's membership method. The result should be checked on the server and mapped to the published rule.
Why does channel verification fail after the user joined?
Common causes are missing bot administrator access, the wrong chat ID, API delay or an incorrect mapping of Telegram member states. Treat API errors separately from a true nonmember result.
Can an airdrop bot verify YouTube or social tasks?
Only when the external platform provides permitted evidence linked to the user. Otherwise use manual review, a partner callback or a lower-confidence task; a Done button is not proof.
Should users remain in the channel until distribution?
Only if the published rules say so. If eligibility depends on a future snapshot, name it and recheck safely before finalization.
How do I stop duplicate task rewards?
Use a unique account, campaign, task-instance and rule-version key so repeated callbacks return the original result rather than creating another credit.
Sources and further reading
Technical and product claims were checked against these primary sources.