Approvals via Telegram and Max — confirmation buttons without a backend · Zapnoty

Approvals
right inside the messenger

The bot sends the subscriber a question with buttons. On click — its own follow-up text, notification routes and a webhook. Embed confirmations of appointments, deliveries and orders without your own backend for the buttons.

· Now or at a scheduled time · TTL · approved / declined / reschedule

@clinicbot
Approval
Doctor appointment at 18:00. Coming?
⌛ Waiting for subscriber reply…
POST /v1/approvals buttons · follow-up · webhook
0
lines of backend code to handle buttons
3
outcomes: approve, decline, reschedule
5
approval.* webhook events
1
credit per question, +1 for the follow-up

Without us

Why “call us back to confirm” is expensive

Buttons need a backend

Inline buttons in a bot mean callbacks, webhooks, state storage and reply texts. Building and maintaining all that just for “Coming? Yes / No” takes weeks.

Calls and SMS eat time

Staff phone customers just to confirm a booking. SMS surveys cost money and offer no button to tap — only a call back.

No-shows and empty slots

Without a quick confirmation the customer forgets the appointment. The slot sits idle, the delivery runs for nothing, the order stalls — and you find out too late.

What’s inside

A ready-made confirmation flow — out of the box

Question with buttons

Set a prompt with {{variables}} and approve / decline / reschedule buttons with your own labels. Only approve is required — the rest are optional.

Follow-up on click

A dedicated text per outcome. Tap “I’ll come” → “See you at 18:00”, “Can’t make it” → “The slot is freed”. The bot replies on its own, no server of yours.

Now or scheduled

Launch an approval instantly or at a set time via scheduled_at. A TTL limits the reply window — when it elapses the expired outcome fires.

Routes per outcome

Just like forms: on approved / declined / reschedule / expired — notify an email, a messenger, a specific subscriber or the whole team.

Webhook events

approval.sent, .approved, .declined, .reschedule, .expired signed with HMAC. Update your CRM, calendar or order in real time.

Variables and media

{{placeholders}} are filled from vars at launch — name, time, order number. The question can include media and a chosen text format.

How it works

Three steps to the first confirmation

01

Create a scenario

POST /v1/approval-templates — the question, buttons, follow-up texts and a default TTL. Add notification routes per outcome.

02

Launch an approval

POST /v1/approvals with a template_id and a subscriber (subscriber_id or external_id). Pass vars and, if needed, scheduled_at.

03

Get the outcome

The bot sends the question, the subscriber taps a button. You receive a webhook and can poll GET /v1/approvals/{id} — status and outcome.

FAQ

Frequently asked

No. Zapnoty shows the buttons, catches the tap, sends the follow-up and delivers a webhook with the outcome. You just create a template and launch an approval via the API.

A plain message with inline buttons requires you to handle the callbacks yourself. An approval is a ready flow: approved / declined / reschedule / expired outcomes, follow-up texts, routes and events out of the box.

Yes. Set scheduled_at at launch — the question is sent then (e.g. a day before the appointment). Without it the send is immediate. A TTL (ttl_minutes) limits the reply window.

When the TTL elapses the approval gets the expired outcome: the expired follow-up is sent (if set), the expired routes fire and an approval.expired webhook arrives.

Launch the approval by subscriber_id or by your own external_id. Both are returned in the status and the webhook, along with any metadata — so you can tie the reply to your own appointment or order.

The question to the subscriber costs 1 credit, the follow-up after the reply costs 1 more. An email notification route is 3 credits; a messenger or subscriber route is 1 credit.

Free to start

Hook up in 5 minutes

No credit card. 100 free credits per month — enough to try every feature.