Digests · in-app approvals · Bot API toolkit

# Your group moves fast. Read it, and act on it.

Smithers posts a daily digest of your Telegram group, and lets you approve a workflow's risky step from the chat with a tap. Both run on durable, replayable workflows, on a secure Bot API toolkit.

Approve from the chat See the digest
Approve from the chat Durable workflows behind it Verified inbound
Smithers Digest bot reads #eng · posts daily
/digest today08:59
📋 Daily digest · #eng · 214 messages

- Shipped: five marketing sites, tests green
- Decided: cut 0.27 on Friday
- Blocked: waiting on a Cloudflare token
- Watch: flaky deploy step, needs a retry

09:00
Full thread links in the pinned report.09:00

Why this exists

## The decision you needed was 300 messages ago.

Active Telegram groups move faster than anyone can follow. The one message that mattered, a decision, a blocker, a release call, gets buried under memes and side-threads by the time you open the app.

How it works

## Add the bot. It does the reading.

1

### Point it at a chat

Give the bot a token and a chat id. It collects updates on a schedule into its own store, no export dance.

2

### A workflow summarizes

A durable Smithers workflow reads the window of messages, writes a structured digest, and can be replayed or tuned.

3

### It posts back

The digest lands in the chat on a cron. Miss a day and the history is there, kept out of the raw feed.

Human in the loop

## Approve the risky step from your phone.

When a workflow hits an approval gate, Smithers posts it to the chat with Approve and Reject buttons. Tap one and the run continues. It is a durable, replayable step, so nothing is lost if the process restarts while it waits for you.

Smithers Deploys bot waits for your call
🚦 Approval needed Deploy release 0.27 to prod? Tests are green.
14:20
✅ Approved by @will. Shipping now.14:21
one component

### Drop it into any workflow

A single component turns an approval into inline buttons and resolves it from the press. The decision matches the built-in approval shape, so the rest of your workflow does not change.

<TelegramApproval
chatId={chatId}
request={{ title: "Deploy to prod?" }}
output={outputs.decision}
/>

Need a richer decision? Add a Mini App button to open a web page inside Telegram. Its signed `initData` is verified on your server before anything is trusted.

Build your own

## A Bot API toolkit, not a black box.

The digest runs on `@smithers-orchestrator/telegram`, a serverless-friendly client you can use directly. Send messages from a run, or receive commands securely.

outbound

### Send a run to a chat

Pipe a run summary, a status, or an alert straight into Telegram from any workflow step.

const tg = createTelegramClient({ token })
tg.sendMessage({ chatId, text: summary })
inbound

### Receive commands, safely

Verify the webhook secret and check the chat against an allowlist before anything runs. Spoofed updates get dropped.

if (!verifyTelegramWebhookSecret(req, secret)) return 401
isTelegramChatAllowed(chatId, policy)

What you get

## Serverless-ready, and honest about it.

◷ daily digest

### Catch-up on a cron

A structured summary of your group, posted on schedule, with the raw thread kept for reference.

⤺ durable

### Replayable behind the scenes

The digest is a real Smithers workflow. Rerun it, adjust the window, or replay a bad day.

🔒 verified inbound

### Secret + allowlist

Webhook secret verification and a chat allowlist ship in the box. Only chats you name get through.

✅ in-app approvals

### Approve or reject in a tap

Gate a workflow step behind an inline button, or a Mini App with verified `initData` for a richer decision. The run waits durably until you answer.

## Give your group a daily digest.

Deploy the bot in one command, or install the toolkit and wire your own runs to Telegram.

See a live digest Read the docs