Plank help · updated 2026-10-29
Подключение Telegram (личный аккаунт)
Ассистент читает ваши чаты в Telegram и отправляет сообщение от вашего имени — только после вашего «да» на точный черновик. Нужен ваш собственный api_id с my.telegram.org; вход хранится в вашем личном пространстве и никогда не появляется в чате.
Agents: fetch the raw markdown of this page at /ru/help/connecting-telegram-personal.md
Подключение Telegram (личный аккаунт)
Так ассистент получает доступ к вашему собственному аккаунту Telegram: читает ваши чаты и отправляет сообщение от вас — только после вашего «да» на точный текст. Это двойник личного WhatsApp. Это не Telegram-бот: бот — отдельный аккаунт, которому пишут люди, а здесь — вы сами.
Ассистенту — та ли страница? Бот, линия поддержки или всё, куда пишут другие люди, → connecting-telegram. Здесь — только собственный аккаунт человека и только в его личном пространстве.
Прочитайте до подключения
1. Вход — это полный доступ к вашему Telegram. Привязка сохраняет сессию в
scripts/telegram-personal/session/session.txt. У кого она есть — читает все чаты, пишет от вас и может завершить ваши другие сеансы. Она остаётся только в этом личном пространстве — никогда в общем или командном. Ассистент никогда её не печатает, не копирует, не переносит и никуда не кладёт. Что есть в контейнере этого пространства, то есть у ассистента; поэтому и нужен весь этот список.
2. Каждое сообщение одобряете вы. Ассистент показывает получателя и точный текст и отправляет только после вашего явного «да». Изменился текст — спрашивает снова. Запуск по расписанию никогда не отправляет: он готовит черновик и спрашивает вас.
3. Действуют правила Telegram. Используется ваш собственный
api_id. Ничего не делается от вашего имени без вашего ведома; ничего не отмечается прочитанным; объём — человеческий. За массовые рассылки с личного аккаунта Telegram блокирует.
Что умеет и чего нет
- Читать — люди и небольшие группы (до 50 участников) с активностью за последние сутки по умолчанию, не глубже 7 дней. Каналы, боты, архив и большие группы пропускаются и считаются, если вы их не назвали.
- Отправлять — одно текстовое сообщение или ответ человеку или в группу, которые вы одобрили.
- Нет: каналы (не публикует), отправка файлов, звонки, отметка «прочитано», постоянный слушатель. Читает, когда вы просите или когда включённое вами расписание просит.
Настройка — просто попросите
Скажите «подключи мой Telegram». Сами вы сделаете три вещи:
- На my.telegram.org → «API development tools» создайте приложение (любое название и описание, платформа «Other») и сохраните api_id и api_hash.
- Передайте их ассистенту: он покажет в чате карточку-форму — впишите туда api_id и api_hash, и они сразу попадут в «Доступы» («Telegram API»), ассистент их не увидит. (Можно и вставить «api_id api_hash» одним сообщением в чат — Plank скроет их до того, как их увидит ассистент.)
- Отсканируйте QR, который покажет ассистент (
login/qr.svg), в Telegram → Настройки → Устройства → Подключить устройство. Нет второго экрана — ассистент запросит код входа: пришлите этот код в чат (после входа он бесполезен). Если у вас облачный пароль, ассистент попросит его такой же карточкой; он уйдёт в «Доступы», а не в чат. Открывать и править файлы не нужно.
Для ассистента — рецепт
Скрипты приходят в наборе telegram-personal в scripts/telegram-personal/ (справочник — README там). Нет папки — набор не установлен в этом пространстве: спросите человека; клиент вручную не пишите.
0. Получите явное согласие
До установки и привязки скажите человеку на его языке: привязывается весь аккаунт Telegram; сессия хранится в этом пространстве и даёт полный доступ; каждая отправка ждёт его «да». Не просите api_id/api_hash в этом сообщении — скажите, что после «да» покажете для них форму («нужны api_id и api_hash» текстом подталкивает вставить их в чат). Продолжайте только после ясного «да». В пространстве, где есть другие участники, — откажите.
1. Установка (один раз)
cd scripts/telegram-personal && [ -d node_modules/telegram ] || npm install --no-audit --no-fund
2. Доступы
plank_credentials_list — есть ли «Telegram API». Нет — отправьте человека на my.telegram.org (шаг 1 выше) и попросите карточкой: plank_credential_request с label: "Telegram API", kind: "login", release: "container", fields: [{"name": "username", "label": "App api_id"}, {"name": "password", "label": "App api_hash"}] — закончите ход и продолжайте, когда он ответит, что сохранил. Если он вставил их в чат и вы видите [plank:credential pending=…], вызовите plank_credential_save с pending_id, fields: {"username": "<api_id>"}, kind: "login", label: "Telegram API", release: "container". Никогда не записывайте api_id/api_hash в файл. Telegram ответил API_ID_INVALID (код 4) → пара неверна: попросите снова с replaces: "Telegram API" и теми же полями — карточка даст этому доступу новое значение, а не создаст второй. Другое название — --vault-item "<название>" в каждом скрипте.
3. Привязка
Никогда не просите человека открыть или править файл — ни login/code.txt, ни login/password.txt.
node pair.mjs qr --wait 180 & # login/qr.svg, перерисовывается только при новом токене Telegram
# покажите человеку login/qr.svg; следите за login/status.json; процесс завершится после привязки
need_code от qr — никто не отсканировал вовремя: предложите вход по коду — node pair.mjs code --phone +77011234567, попросите прислать код в чат, затем node pair.mjs finish --code <цифры>. Код выхода 10 с need_password (с любого пути) — включена двухэтапная проверка: plank_credential_request с label: "Telegram облачный пароль", kind: "login", release: "container", fields: [{"name": "password", "label": "Облачный пароль Telegram"}], закончите ход, а когда человек ответит, что сохранил, запустите node pair.mjs finish --password-item "Telegram облачный пароль". «пароль: …», напечатанный в чат, тоже перехватывается — сохраните его через plank_credential_save и запустите тот же finish. node pair.mjs status — привязан ли и кем.
4. Чтение
node read.mjs --since 24h
node read.mjs --unread
node read.mjs --only "@username,Мама"
Один JSON: chats[] с messages[] (текст, кто, когда, тип вложения), skipped{причина: число}. Пропущенное — не «там ничего нет»: скажите, что пропущено. Читайте редко и один раз на задачу; не крутите в цикле.
5. Отправка — только после «да»
printf '%s' '<точный текст>' > /tmp/tg-draft.txt
node send.mjs --to "@username" --text-file /tmp/tg-draft.txt # черновик: получатель + текст + код, ничего не отправляет
# покажите человеку: «Отправить <имя> (@username) в Telegram: "<текст>"? (да/нет)»
node send.mjs --to "@username" --text-file /tmp/tg-draft.txt --confirm <код> # только после явного «да»
Код привязан к аккаунту, получателю, точному тексту и --reply-to; изменилось что-то — отказ (confirm_mismatch): покажите новый черновик. Код, по которому уже отправлено, — отказ (confirm_used), так что повтор не отправит дважды. Несколько чатов с одним именем — ambiguous_recipient с кандидатами: спросите, не выбирайте сами.
Правила
- Один скрипт Telegram за раз (
.lock, код 6). flood_wait(код 5): Telegram попросил подождатьseconds. Скажите человеку; раньше не повторяйте.- Код 3 — не привязан или сессию завершили с другого устройства: привяжите заново.
- Из другого пространства (личный ассистент): запускайте скрипты в папке этого пространства (
cd /spaces/<slug>), никогда не копируйтеsession/. - Никогда не выводите, не копируйте и не переносите
session/,login/pending.jsonи значения из «Доступов».
Что хранится и сколько
data/messages.json — скользящий 7-дневный кэш клиента, чистится при каждом чтении; last-read.json — последнее чтение, dialogs.json — список чатов, sent.json — каким кодом отправлено какое сообщение (без текста). В session/, login/ и data/ лежит .gitignore, поэтому ничего из этого не попадает в историю версий пространства. Долгая история («сохраняй мою переписку») — решение человека: только когда он попросит, в таблицу приложения с ключом chat_id:message_id и onConflict: 'ignore' — никогда сессия и api_hash.
См. также: Подключение Telegram (бот), Личный WhatsApp, Доступы.