Вебхуки
GitHub и Slack
Адрес вебхука понимает не только формат Discord. Если дописать к нему /github или /slack, он будет принимать события GitHub и сообщения в формате входящих вебхуков Slack. Промежуточный сервер или своя программа для этого не нужны.
GitHub
POST/webhooks/{webhook.id}/{webhook.token}/github
Подключение
- В приложении Glitch создайте вебхук в нужном канале и скопируйте его адрес. Сообщения от GitHub будут подписаны именем «GitHub», как бы ни назывался вебхук. Аватарка у них будет та, что задана у вебхука, так что удобно поставить ему логотип GitHub.
- Откройте репозиторий на GitHub и перейдите в Settings → Webhooks → Add webhook. Для всех репозиториев организации то же самое есть в настройках организации.
- В поле Payload URL вставьте адрес вебхука и допишите в конце
/github.
https://api.glitchapp.online/v10/webhooks/ID/KEY/github- В поле Content type выберите
application/json. Вариантapplication/x-www-form-urlencodedтоже работает. - Поле Secret оставьте пустым. Ключ уже есть в адресе вебхука.
- Выберите Let me select individual events и отметьте нужные события из таблицы ниже. Можно выбрать и Send me everything, лишние события сервер просто пропустит.
- Нажмите 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 -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 (*жирный*, <ссылка|текст>) пока не переводится и показывается как есть.