Старый микрофон и чистый лист бумаги на тёмном столе под лампой
← Все проекты

AI-ассистенты · Разработка · в продакшене

Голосовой секретарь в Telegram

Руководитель надиктовывает голосовое, а получает текст, который можно сразу отправить: письмо, список или инструкцию. Имена, телефоны и номера документов во внешнюю модель не уходят.

0имён и номеров уходит во внешнюю модель
2модели: если одна недоступна, текст всё равно готов
4команды, чтобы сократить текст, выделить суть или сменить обращение
0выдуманных фактов в готовом тексте

Задача

Руководитель надиктовывает длинное голосовое — с оговорками, повторами, «э-э» и «короче». Чтобы отправить это письмом или поручением, кто-то должен переслушать и переписать руками.

Отдавать такие записи внешней модели как есть нельзя: в них имена, телефоны, номера карт и договоров.

Что сделали

Текст можно отправлять сразу

Расшифровка уходит в модель с задачей редактора-секретаря: убрать слова-паразиты и самоперебивы, исправить грамматику, самому выбрать формат — письмо, список, инструкция по шагам или абзацы. Все факты, имена и числа сохраняются, ничего не дописывается: ни подписей, ни дат, ни выводов.

Персональные данные не выходят наружу

Телефоны, почты, карты, СНИЛС, ИНН, паспорта и имена людей заменяются на метки вида ⟦PER_1⟧ до отправки в модель и возвращаются на место в ответе. Карты проверяются по Луну, ИНН — по контрольным цифрам, имена находит NER.

Разбирает и вложения

Скан → текст, фото → описание, видео → пересказ, PDF → суть и пункты. Подпись к вложению работает как инструкция: что попросил, то и сделает.

Сократить или сменить тон одной командой

/ты и /вы меняют обращение, /сократи оставляет главное, /смысл выделяет основные пункты и вопросы. Команды применяются цепочкой: надиктовал → /сократи → /ты.

Названия пишутся правильно

Общий /terms: названия и имена собственные бот пишет канонически — «MedC», «IFK система» — даже если распознались похоже по звучанию. Словарь живёт на томе и переживает пересборку контейнера.

Почему этому можно верить

Две модели
Основная — Gemini 2.5 Flash. Сломался, залимитился — текст уходит в DeepSeek, пользователь этого не видит. Для вложений запасной модели нет, и бот честно пишет: лимит на сегодня исчерпан, пришли завтра или голосом.
Метки
Один и тот же телефон получает одну и ту же метку, где бы ни встретился. После ответа проверяется, что все метки раскрыты; если модель какую-то потеряла, это видно в логе.
Границы
Только whitelist, чужим бот вообще не отвечает. Десять минут аудио, 20 МБ на вложение. Длинный текст дублируется файлом DOCX.

Как устроено

Распознавание
Deepgram nova-2, русский, smart_format. OGG/Opus из Telegram принимается без перекодирования.
Модели
Google Gemini 2.5 Flash как основной мультимодальный провайдер; DeepSeek через OpenAI-совместимый API как текстовый fallback; дневная квота с защёлкой по 429.
Защита данных
Регулярные выражения с проверками Луна и контрольных цифр ИНН плюс NER natasha для имён; обратимое маскирование до модели и после.
Бот
Python, aiogram 3, python-docx. Docker Compose, глоссарий на томе.

Похожая задача?

Опишите её — пришлём состав работ и смету за 24 часа.

Состав работ и смету пришлём за 24 часа.

Следующий проект