Pinger
Напоминания в Telegram одной фразой, текстом или голосом
- Состав проекта
- Telegram-бот, распознавание времени и доставка напоминаний
- Материалы
- По запросуКод в закрытом репозитории
Задача
Ставить напоминания одной фразой, как человеку: «завтра в 15:30 позвонить в сервис». Без форм, календарей и выбора времени кнопками.
Решение
Написал бота на Go без фреймворков. ИИ расшифровывает голос и извлекает текст и точное время по строгой JSON-схеме. Команды, кнопки, хранение и доставка реализованы обычным кодом. Если времени нет, бот уточняет его, а продиктованный список возвращает аккуратным столбиком.
Сложности
Сохранять напоминание при повторной доставке сообщения Telegram и восстанавливать отправку после перезапуска сервера.
Результат
Бот собирается в один статический бинарник и работает как сервис systemd. Напоминание и Telegram update_id сохраняются в одной транзакции: повтор сообщения не создаёт вторую запись. Просроченные напоминания отправляются сразу после перезапуска.
Возможности
Текст или голос
Голосовое до пяти минут расшифровывается и разбирается так же, как текст.
Управление из уведомления
Отметка «Выполнено», перенос на 5–60 минут, удаление и правка из списка /list.
Надёжная доставка
Защита от повторного создания по update_id и новая попытка отправки через 30 секунд при ошибке. После сбоя между отправкой и её фиксацией уведомление может прийти повторно.
ИИ для разбора фразы
Модель расшифровывает голос и разбирает фразу по JSON-схеме; планировщик и доставка работают независимо от неё.
Устройство
- Telegram Bot APIlong polling, кнопки и голосовые
- Polzaраспознавание речи и разбор фразы по JSON-схеме
- Goкоманды, планировщик и доставка
- bboltтранзакционное хранилище в одном файле
- systemdотдельный пользователь и автоматический перезапуск
Стек
- Go
- Telegram Bot API
- bbolt
- Polza.ai
- Gemini 2.5 Flash Lite
- GPT-4o mini Transcribe
- systemd
Презентация
