keepr
ENRU
ВойтиНачать
Центр помощиИнтеграцииIssues GitHub в Keepr, а время — комментарием в задачу

Issues GitHub в Keepr, а время — комментарием в задачу

Обновлено 11 окт. 2026 г.
6 мин чтения

Что делает интеграция

Одна интеграция связывает репозиторий GitHub с одним проектом Keepr. Входящее направление: GitHub сообщает Keepr о своих задачах — новая задача становится задачей в проекте Keepr, закрытие архивирует её, повторное открытие восстанавливает. Pull request, который закрывает ровно одну задачу GitHub — через «Closes #12» или связь в разделе Development, — учитывается в её задаче Keepr, и расширение для браузера запускает таймер тоже на ней; любой другой pull request получает собственную задачу, которая уходит в архив при слиянии или закрытии. Какие задачи закрывает pull request, Keepr спрашивает у GitHub, поэтому для этого нужен токен из шага 4.

Исходящее направление: Keepr возвращает отслеженное время. В GitHub нет поля учёта времени, поэтому каждая запись времени на задаче, связанной с задачей или pull request, становится там одним комментарием: он правится при изменении записи и удаляется вместе с ней. Отправляется только время из проекта Keepr этой интеграции — с точностью до секунды, без округления.

Перед началом

В Keepr нужно быть владельцем или администратором организации либо менеджером рабочего пространства, в котором лежит проект. Интеграции есть на всех тарифах: на Free одновременно работает одна, на Team — три, на Ultimate, включая пробный период, — сколько нужно.

В GitHub нужны права администратора репозитория, чтобы добавить вебхук. GitHub Enterprise Server работает так же, если он может обратиться к по HTTPS, а Keepr — к нему через публичный интернет.

1. Создайте интеграцию в Keepr

Откройте «Настройки организации» → «Интеграции» и нажмите «Новая интеграция». Выберите GitHub, проект Keepr, в который пойдут задачи, и имя, от которого интеграция действует: в Keepr её действия выглядят, например, как «Архивировано: GitHub · Сайт».

После этого Keepr один раз покажет секрет подписи вебхука. Скопируйте его, прежде чем закрыть окно: потом видны только первые символы. Если секрет потерян, смените его на странице интеграции и вставьте новый в GitHub.

2. Добавьте вебхук в GitHub

В репозитории откройте Settings → Webhooks → «Add webhook» по адресу . Вставьте адрес из раздела «Входящие вебхуки» интеграции в «Payload URL», выберите в «Content type» application/json и вставьте секрет подписи в Secret.

В «Which events would you like to trigger this webhook?» выберите «Let me select individual events», отметьте Issues и Pull requests, снимите отметку с Pushes и сохраните. GitHub сразу отправит ping — он появится в последних доставках интеграции как проверка связи.

Вебхук на организацию GitHub, по адресу , тоже подойдёт и приведёт задачи всех репозиториев в один проект Keepr; задачи двух репозиториев не смешаются, потому что сопоставляются и по репозиторию, и по номеру.

3. Решите, от чьего имени уходит время

GitHub показывает автором каждого комментария владельца токена, которым пользуется Keepr. В комментарии назван участник Keepr, отследивший время, но автором записей всех участников будет эта учётная запись. Публикация от приложения Keepr для GitHub (keepr[bot]) или от имени каждого участника запланирована; до тех пор дайте Keepr токен, не принадлежащий конкретному человеку.

Используйте машинного пользователя — отдельную учётную запись GitHub для автоматизации, что правила GitHub разрешают. Дайте ей права записи в репозиторий, войдите под ней и создайте fine-grained токен в Settings → Developer settings → Fine-grained tokens. Выберите организацию владельцем ресурсов, «Only select repositories» с репозиториями интеграции, а в Repository permissions задайте Issues и Pull requests уровень «Read and write»; доступ Metadata на чтение добавится сам.

Если ваша организация требует одобрять fine-grained токены, владелец организации одобряет запрос в Settings → Personal access tokens организации — до этого токен не работает. Задайте срок действия, который вы не пропустите: когда он истечёт, отправки будут завершаться ошибкой «Ключ доступа отклонён».

Ваш собственный токен работает так же, но тогда каждый комментарий будет показан как ваш.

4. Укажите в Keepr адрес и токен

На странице интеграции откройте «Ключи доступа» и нажмите «Задать…» рядом с ключом доступа GitHub. Адрес API GitHub — , а для GitHub Enterprise Server — ; вставленная страница любого из них сохранится как адрес его API. Вставьте токен и сохраните.

Keepr хранит токен в зашифрованном виде и потом показывает только его первые символы. Он нужен для отправки времени и чтобы узнать, какие задачи закрывает merge или pull request, — больше ни для чего. Без него задачи по-прежнему приходят, но merge и pull request остаются без действия, а в последних доставках видно «Не удалось узнать его задачи».

Что отправляет Keepr

Запись отправляется, когда она завершена — идущий таймер ничего не отправляет, пока не остановится, — и только если её задача лежит в проекте интеграции и ссылается на задачу или pull request этого GitHub. Так связаны задачи, созданные интеграцией, и задачи, запущенные из расширения для браузера на странице GitHub.

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

Импортированное время — это история, и оно не отправляется. Список «Недавно отправлено» на странице интеграции показывает последние записи: объект, участника, сколько времени держит GitHub и удалась ли последняя отправка; у неудачной строки написано, почему и что делать.

Пауза, смена секрета и отзыв

Переключатель на странице интеграции выключает её без потери данных. Пока она выключена, доставки записываются, но не выполняются (кнопка GitHub «Redeliver» повторит доставку позже), а время не отправляется: запись, сохранённая во время паузы, уйдёт при следующем её изменении. Повторное включение снова занимает место в лимите тарифа.

«Заменить…» в разделе «Ключи доступа» сразу заменяет секрет вебхука, без переходного периода: доставки не проходят, пока новый секрет не окажется в GitHub. «Удалить» рядом с ключом доступа GitHub выключает отправку времени и не трогает входящее направление.

Отзыв окончателен. Keepr уничтожает оба секрета и больше ничего не выполняет; интеграция остаётся в списке как история, а её действия — подписанными её именем в журнале аудита и на архивных задачах. Отзовите токен и в GitHub.

Если вебхук добавить нельзя

Если вебхук добавить не получается — нет прав администратора или GitHub Enterprise Server не может достучаться до Keepr, — задачи может создавать workflow GitHub Actions через REST API. Ему нужен персональный API-токен, а он входит в тариф Ultimate: создайте его в разделе API-токены с областью timers:write и сохраните как секрет репозитория по адресу .

Запускайте workflow на событие issues с типом opened и вызывайте с заголовком «Authorization: Bearer» и токеном и телом JSON: externalKey (номер задачи), name (её название), url (её html_url) и projectId. Keepr возвращает существующую задачу или создаёт её, сопоставляя так же, как при вебхуке, поэтому повторный запуск ничего не испортит.

Для типа closed сделайте тот же вызов, чтобы получить задачу, а затем с её id — для этого нужна область projects:write. Все поля описаны в справочнике API на api.keepr.ru/docs. Отправке времени вебхук не нужен: она работает в обоих случаях, когда заданы адрес и токен.

Если что-то пошло не так

Каждая доставка видна в последних доставках интеграции вместе с тем, что с ней сделано. Доставка, которую GitHub показывает с кодом 401, подписана другим секретом: смените секрет и вставьте новый. Код 415 значит, что вебхук отправляет форму: укажите тип содержимого application/json. «Задача уже есть» значит, что задача для этой задачи GitHub уже существовала — например, запущенная из расширения для браузера, — и дубля не появилось.

В списке «Недавно отправлено» «Не заданы адрес или ключ доступа» значит, что у интеграции ещё нет адреса API или токена. «Ключ доступа отклонён» значит, что токен отозван, истёк, не одобрен, не может писать в Issues или больше не видит репозиторий. «Задача не найдена» — задача удалена или перенесена, «Адрес не разрешён» — адрес API не публичный HTTPS. «Сервис отказал» — любой другой отказ GitHub; «Сервис недоступен, повторим» проходит само, когда GitHub снова отвечает.

Отправка, завершившаяся окончательной ошибкой, повторяется при следующем изменении записи.