Glitch
Документация API · GitHub и Slack

Вебхуки

GitHub и Slack

Адрес вебхука понимает не только формат Discord. Если дописать к нему /github или /slack, он будет принимать события GitHub и сообщения в формате входящих вебхуков Slack. Промежуточный сервер или своя программа для этого не нужны.

GitHub

POST/webhooks/{webhook.id}/{webhook.token}/github

Подключение

  1. В приложении Glitch создайте вебхук в нужном канале и скопируйте его адрес. Сообщения от GitHub будут подписаны именем «GitHub», как бы ни назывался вебхук. Аватарка у них будет та, что задана у вебхука, так что удобно поставить ему логотип GitHub.
  2. Откройте репозиторий на GitHub и перейдите в Settings → Webhooks → Add webhook. Для всех репозиториев организации то же самое есть в настройках организации.
  3. В поле Payload URL вставьте адрес вебхука и допишите в конце /github.
https://api.glitchapp.online/v10/webhooks/ID/KEY/github
  1. В поле Content type выберите application/json. Вариант application/x-www-form-urlencoded тоже работает.
  2. Поле Secret оставьте пустым. Ключ уже есть в адресе вебхука.
  3. Выберите Let me select individual events и отметьте нужные события из таблицы ниже. Можно выбрать и Send me everything, лишние события сервер просто пропустит.
  4. Нажмите Add webhook.

Сразу после сохранения GitHub отправит проверочное событие ping. На вкладке Recent Deliveries у него должен быть зелёный ответ 204. Сообщения в канале от ping не будет.

Что появится в канале

Каждое событие становится сообщением с карточкой. В ней указаны автор действия со своей аватаркой GitHub, что произошло и ссылка на GitHub. Цвет полосы зависит от события, как в Discord. Тексты событий пишутся на английском, тоже как в Discord, потому что сообщение одно для всех участников канала.

Событие GitHubКогда приходит сообщение
pushНовые коммиты в ветке. В карточке до 5 коммитов с сообщениями, об остальных пишется их число
pull_requestЗапрос на слияние открыт, закрыт, слит или открыт снова
issuesЗадача открыта, закрыта или открыта снова
issue_commentНовый комментарий к задаче или запросу на слияние
releaseОпубликован выпуск
create, deleteСоздана или удалена ветка или метка
forkКто-то скопировал репозиторий себе
watchРепозиторию поставили звезду

На остальные события, и на другие действия с теми же событиями (например, правку задачи), сервер отвечает 204 и ничего не отправляет в канал.

Если сообщения не приходят

Откройте в настройках вебхука на GitHub вкладку Recent Deliveries. Там видно, что ответил сервер на каждое событие.

ОтветПричина
204, а в канале пустоСобытие не из таблицы выше, или действие с ним не переводится в сообщение
401, код 50027Неверный ключ в адресе. Скопируйте адрес вебхука заново
404, код 10015Вебхук удалён. Создайте новый и замените адрес на GitHub
429Слишком много событий сразу, например большой push в несколько веток. Часть событий не дошла

Slack

POST/webhooks/{webhook.id}/{webhook.token}/slack

Многие сервисы умеют отправлять уведомления во «входящий вебхук Slack» (Incoming Webhook). Такие сервисы могут писать и в Glitch. Укажите им адрес вебхука Glitch с /slack в конце вместо адреса Slack.

https://api.glitchapp.online/v10/webhooks/ID/KEY/slack

Как переводится сообщение Slack

Поле SlackЧто получится в Glitch
textТекст сообщения
usernameИмя автора этого сообщения
icon_urlАватарка автора этого сообщения
attachmentsКаждое вложение Slack становится карточкой

Из вложения Slack в карточку переходят заголовок со ссылкой (title, title_link), текст (text), поля (fields, где short превращается в поле в ряд), цвет полосы (color), автор (author_name, author_link, author_icon), картинки (image_url, thumb_url), подпись (footer, footer_icon) и время (ts). Текст pretext добавляется к тексту сообщения.

curl
curl -X POST "https://api.glitchapp.online/v10/webhooks/ID/KEY/slack" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Деплой завершён",
    "attachments": [{
      "color": "good",
      "title": "glitch-backend",
      "fields": [{"title": "Версия", "value": "1.4.2", "short": true}]
    }]
  }'

Тело принимается и в JSON, и формой с полем payload, как это делают некоторые старые сервисы. В ответ сервер возвращает строку ok, как Slack. Если в сообщении нет ни текста, ни вложений, придёт отказ 50006.

Разметка Slack (*жирный*, <ссылка|текст>) пока не переводится и показывается как есть.

На этой странице
  1. GitHub
  2. Slack