ENGitHubУстановить

🇬🇧 English version — каноническая версия, она может быть новее.

Напоминания

Попросите Иву напомнить - и она напомнит: в нужную минуту, в вашей зоне, в вашем чате. Напоминание это не заметка, о которой она может вспомнить: это строка в data/, которую раз в минуту забирает диспетчер. Перезапустите сервер, обновите Иву, откатите версию - строка на месте, а всё, чей срок пришёлся на время простоя, сработает на первом же тике после возвращения.

Как попросить

Обычными словами в чате, как сказали бы человеку:

Вида два: разовое срабатывает один раз и на этом закончено, повторяющееся берёт следующий срок из расписания и ждёт его. Ни вы, ни она не считаете дату в уме: вы говорите когда, Ива превращает это в точный момент и называет время, которое записала. Если названное время не то, что вы имели в виду, скажите сразу - этот ответ и есть момент поймать недопонимание.

Вы говоритеЧто это значит
in 30m, in 1h 30m, in 2dзадержка от текущего момента
14:30сегодня в это время; если уже прошло - завтра
2026-09-14 09:00эта дата и время на ваших часах
ISO-момент со смещением или Zровно этот момент, где бы вы ни были
выражение из пяти полей, например 0 9 * * 1-5повторяющееся: 09:00 по будням в вашей зоне

Всё считается в вашей зоне - той, в которой настроена Ива, а не в зоне сервера. Дата, которой на ваших часах не существует (час, пропущенный переходом на летнее время, 31 февраля), отвергается с этой причиной, а не округляется до соседнего времени. Время в прошлом и всё, что дальше года вперёд, - тоже.

Что происходит в срок

Текст напоминания - это инструкция, которую Ива даёт себе будущей. В срок она просыпается свежей сессией, которая ничего не знает про разговор, где вы просили, делает то, что написано в тексте - своими инструментами, поэтому «найди новости и пришли» действительно идёт и ищет, - а код отправляет финальный текст этого хода в тот чат и ту тему, где вы просили. Один ход, одно сообщение.

Поэтому текст пишется так, чтобы стоял сам по себе: «напомни про стендап» и «собери вчерашние задачи и скажи, что осталось открытым» сработают, а «сделай то, что мы обсуждали» - нет: обсуждения к тому моменту рядом уже не будет.

Если ход не состоялся вовсе (провайдер модели недоступен, агент сломался, ответ пришёл пустым), код сам отправляет ваш текст дословно, а в строке остаётся причина. Напоминание приходит всегда - с моделью или без неё.

Повторов нет. Строка срабатывает один раз: в момент срабатывания она помечается, а повторяющаяся уезжает на следующий срок. Нет ни лестницы повторов, ни окна, которое снимает напоминание через часы, ни предупреждения на каждый провал - факт срабатывания остаётся в самой строке: fired_at, delivered и причина в error.

Где смотреть список

/menu → ⏰ показывает ближайшие напоминания, что не дошло, и одну строку про диспетчер: когда он тикал в последний раз (его пульс - файл data/reminders.tick, который обновляется каждую минуту). Свежий пульс значит, что машинерия жива; старый или отсутствующий - что напоминания записаны, но не сработают, пока Ива не запущена.

Можно просто спросить в чате: Ива перечислит те же строки с id, следующим сроком и последним срабатыванием с фактом доставки. Сработавшие строки видны сутки - там и видно, дошёл ли текст. Попросите снять - снимет по id.

Что делать при сбое

Чего Ива больше не делает

Расписание ставит инструмент remind. Отправка идёт ответом хода, во внешний чат — через iva post.

Пределы

Исходный Markdown ↗