diff --git a/README.md b/README.md
index 581683e3d..329a6d278 100644
--- a/README.md
+++ b/README.md
@@ -468,6 +468,9 @@ AI/vibe-coded PRs welcome! 🤖
Special thanks to @andrewting19 for the Anthropic OAuth tool-name fix.
+Core contributors:
+- @cpojer — Telegram onboarding UX + docs
+
Thanks to all clawtributors:
diff --git a/src/channels/plugins/onboarding/telegram.ts b/src/channels/plugins/onboarding/telegram.ts
index ba77905dd..65bab9a50 100644
--- a/src/channels/plugins/onboarding/telegram.ts
+++ b/src/channels/plugins/onboarding/telegram.ts
@@ -43,6 +43,19 @@ async function noteTelegramTokenHelp(prompter: WizardPrompter): Promise {
);
}
+async function noteTelegramUserIdHelp(prompter: WizardPrompter): Promise {
+ await prompter.note(
+ [
+ "1) DM your bot, then read from.id in `clawdbot logs --follow` (safest)",
+ "2) Or call https://api.telegram.org/bot/getUpdates and read message.from.id",
+ "3) Third-party: DM @userinfobot or @getidsbot",
+ `Docs: ${formatDocsLink("/telegram")}`,
+ "Website: https://clawd.bot",
+ ].join("\n"),
+ "Telegram user id",
+ );
+}
+
async function promptTelegramAllowFrom(params: {
cfg: ClawdbotConfig;
prompter: WizardPrompter;
@@ -51,6 +64,7 @@ async function promptTelegramAllowFrom(params: {
const { cfg, prompter, accountId } = params;
const resolved = resolveTelegramAccount({ cfg, accountId });
const existingAllowFrom = resolved.config.allowFrom ?? [];
+ await noteTelegramUserIdHelp(prompter);
const entry = await prompter.text({
message: "Telegram allowFrom (user id)",
placeholder: "123456789",