Ana içeriğe geç

Webhook'lar

Bir webhook, kendine ait bir ad ve avatarla tek bir sunucu kanalına mesaj gönderir.

Yönetim yolları bir kullanıcı oturum token'ı veya bir bot token'ı kabul eder. Diğer tüm webhook yolları, kendi yolundaki webhook kimliğini ve gizli token'ı eksiksiz kimlik bilgisi olarak kullanır; bu yollarda Authorization başlığı gerekmez ve hiçbir yetki vermez. Webhook'ları kullanma tipik bir entegrasyonu adım adım anlatır.

Mesaj ve gömme (embed) nesneleri Mesajlar kaynağında tanımlanır.

Yetkilendirme

Bir yönetim yolu, sunucu düzeyinde MANAGE_WEBHOOKS iznini ve kanalı olan bir webhook için o kanalda VIEW_CHANNEL ile MANAGE_WEBHOOKS izinlerini gerektirir. Sunucu üyesi olmayan veya bu izinlerden birine sahip olmayan çağıran 403 FORBIDDEN alır. Var olmayan bir kanal veya webhook 404 NOT_FOUND döndürür.

Webhook'lar yalnızca sunucu metin ve ses kanallarında bulunur. Özel bir kanal belirtmek 400 BAD_REQUEST döndürür.

Hız sınırı anahtarlama

Her webhook yolunun kovası, açıklamasındaki yol parametresine (sunucu, kanal veya webhook kimliği) göre anahtarlanır ve o kimliği çağıran herkes tarafından paylaşılır. Yanıt başlıkları Hız sınırları sayfasında açıklanır.

Webhook yürütme, webhook mesajı yolları ve GitHub, Slack ile Instatus yolları genel sınırdan muaftır ve yalnızca kendi kovalarıyla sınırlanır. Kimliği doğrulanmış yönetim yolları genel sınıra da sayılır.

Webhook nesnesi

Bir webhook tek bir sunucuya aittir ve o sunucunun tek bir kanalına gönderim yapar. TEBHOS token'ını oluşturma anında bir kez üretir ve hiçbir zaman döndürmez (yenilemez); bu nedenle kimlik ve token çifti, webhook'un ömrü boyunca bir taşıyıcı (bearer) kimlik bilgisidir.

Yapı

Alan Tür Açıklama
id snowflake Webhook'un kimliği
guild_id snowflake Webhook'u içeren sunucunun kimliği
channel_id snowflake Webhook'un mesaj gönderdiği kanalın kimliği
name string Webhook'un gönderim yaparken kullandığı ad (1-80 karakter)
avatar ?string Webhook'un gönderim yaparken kullandığı avatar özeti (hash) veya null. Kullanıcı kimliği yerine webhook kimliği kullanılarak bir kullanıcı avatarı gibi çözümlenir
token string Yürütmeyi yetkilendiren gizli token (64 alfasayısal karakter)
user ?object Webhook'u oluşturan hesap: {id, username, discriminator, global_name, avatar, bot} veya bilinmiyorsa null. Token webhook nesnesinde bulunmaz

Örnek

{
  "id": "1501314428688998182",
  "guild_id": "1501314428688990000",
  "channel_id": "1501314428688991111",
  "name": "Build bot",
  "avatar": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
  "token": "Xk3Qw9ZpL2vB7nR4tY6uI8oP0aS1dF5gH2jK4lZ9xC7vB1nM3qW5eR8tY0uI2oP4",
  "user": {
    "id": "1501314428688990001",
    "username": "ada",
    "discriminator": 0,
    "global_name": "Ada",
    "avatar": null,
    "bot": false
  }
}

Token webhook nesnesi

Token yolları bu nesneyi döndürür. user dışında webhook nesnesinin tüm alanlarına sahiptir.

Token eksiksiz döndürülür

Webhook nesnesi içeren her yanıt, o webhook üzerinde tam yürütme ve token yönetimi yetkisi veren eksiksiz yürütme token'ını içerir.

Webhook mesajı gövdesi

Webhook yürütme işleminin kabul ettiği JSON gövdesi.

Alan Tür Açıklama
content? string Mesaj içeriği. Baştaki ve sondaki boşluklar kırpılır; sonuç en fazla 4.000 karakter olabilir
embeds? array[zengin gömme girdisi nesnesi] Zengin gömmeler (embed); normal bir mesajla aynı gömme sınırları geçerlidir
flags? integer Mesajda saklanan mesaj bayrakları
username? string Mesaja özel ad geçersiz kılma (kırpıldıktan sonra 1-80 karakter). Saklanan webhook adı değişmez
allowed_mentions? object {parse?, users?, roles?, replied_user?}: bkz. Bahsetmeler

Bir mesajın boş olmayan bir content alanına veya en az bir gömmeye ihtiyacı vardır; aksi halde istek 400 CANNOT_SEND_EMPTY_MESSAGE ile başarısız olur.

TEBHOS'ta desteklenmez

attachments, message_reference, sticker_ids, nonce, tts ve avatar_url kabul edilir ve yok sayılır. Bir webhook dosya ekleyemez, yanıt veremez, iletemez, çıkartma gönderemez veya mesaj başına avatarını değiştiremez; multipart/form-data gövdeleri de kabul edilmez.

Bahsetmeler

TEBHOS, içerikteki <@id> veya <@!id> biçiminde yazılmış kullanıcı bahsetmelerini ve @everyone / @here ifadelerini ayrıştırır. allowed_mentions yoksa varsayılan {"parse": []} olur: bahsetmeler yine görünür ama kimseye bildirim gitmez. Varsa:

  • kullanıcılar, parse users içerdiğinde korunur; users kimlikleri listeliyorsa yalnızca bu kimlikler korunur;
  • @everyone ve @here yalnızca parse everyone içerdiğinde korunur;
  • boş olmayan bir parse, boş olmayan bir users veya roles listesiyle birlikte gönderilirse istek 400 PARSE_AND_USERS_OR_ROLES_CANNOT_BE_USED_TOGETHER ile reddedilir.

Webhook mesajlarında rol bahsetmeleri çözümlenmez.

Sunucu webhook'ları

Sunucu webhook'larını listeleme

GET /guilds/{guild_id}/webhooks

Bir sunucudaki webhook nesnelerinden oluşan bir dizi döndürür. Sunucu düzeyinde MANAGE_WEBHOOKS gerektirir. Bir webhook yalnızca çağıran onun kanalında da VIEW_CHANNEL ve MANAGE_WEBHOOKS izinlerine sahipse dahil edilir; kanalı olmayan bir webhook hiçbir zaman dahil edilmez.

Hız sınırı: webhook:list_guild kovasında her sunucu için 10 saniyede 40 istek.

Kanal webhook'ları

Kanal webhook'larını listeleme

GET /channels/{channel_id}/webhooks

Bir sunucu kanalındaki webhook nesnelerinden oluşan bir dizi döndürür. Sunucu düzeyinde MANAGE_WEBHOOKS ve kanalda VIEW_CHANNEL ile MANAGE_WEBHOOKS gerektirir.

Hız sınırı: webhook:list_channel kovasında her kanal için 10 saniyede 40 istek.

Webhook oluşturma

POST /channels/{channel_id}/webhooks

Bir webhook oluşturur ve token'ı dahil yeni webhook nesnesiyle birlikte 200 döndürür. İzinler kanal webhook'larını listelemeyle aynıdır.

JSON gövdesi

Alan Tür Açıklama
name string Webhook adı (kırpıldıktan sonra 1-80 karakter)
avatar? ?string Bir base64 görüntü veya data: URL'si (PNG, JPEG, GIF veya WebP, çözüldüğünde en fazla 10 MiB) ya da avatarsız için null

Bir kanal en fazla 15, bir sunucu en fazla 1,000 webhook tutar; bir tane daha oluşturmak 400 BAD_REQUEST döndürür. Geçersiz bir ad veya görüntü de 400 BAD_REQUEST döndürür.

Yan etkiler

Bir WEBHOOK_CREATE sunucu denetim kaydı girişi oluşturur ve sunucuya channel_id ile Webhooks Update yayar.

Hız sınırı: webhook:create kovasında her kanal için dakikada 10 istek.

curl -X POST https://tebhos.com/api/v1/channels/1501314428688991111/webhooks \
  -H "Authorization: Bearer $TEBHOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Build bot"}'

Webhook yönetimi

Webhook alma

GET /webhooks/{webhook_id}

Bir webhook nesnesi döndürür. Sunucu düzeyinde ve webhook'un kanalında MANAGE_WEBHOOKS gerektirir.

Hız sınırı: webhook:read kovasında her webhook için 10 saniyede 100 istek.

Webhook güncelleme

PATCH /webhooks/{webhook_id}

Bir webhook'u günceller ve değiştirilmiş webhook nesnesini döndürür. İzinler webhook almayla aynıdır.

Alan Tür Açıklama
name? string Yeni ad (kırpıldıktan sonra 1-80 karakter)
avatar? ?string Webhook oluşturma ile aynı biçimde yeni görüntü veya avatarı kaldırmak için null. Korumak için alanı göndermeyin
channel_id? snowflake Hedef kanal. Taşımak, hedefte VIEW_CHANNEL ve MANAGE_WEBHOOKS gerektirir; hedef bir sunucu kanalı olmalıdır

Değişen alanlarla bir WEBHOOK_UPDATE sunucu denetim kaydı girişi oluşturur ve webhook'un önceki kanalını belirten Webhooks Update yayar.

Hız sınırı: webhook:update kovasında her webhook için 10 saniyede 20 istek.

Webhook silme

DELETE /webhooks/{webhook_id}

Bir webhook'u kalıcı olarak siler ve 204 döndürür. İzinler webhook almayla aynıdır. Bir WEBHOOK_DELETE sunucu denetim kaydı girişi oluşturur ve Webhooks Update yayar. Webhook'un daha önce gönderdiği mesajlar kanalda kalır.

Hız sınırı: webhook:delete kovasında her webhook için 10 saniyede 20 istek.

Token yolları

Aşağıdaki yollar, yollarındaki webhook kimliğini ve token'ı eksiksiz kimlik bilgisi olarak kabul eder. Webhook ile eşleşmeyen bir token 401 UNAUTHORIZED döndürür; var olmayan bir webhook kimliği 404 NOT_FOUND döndürür.

Token ile webhook alma

GET /webhooks/{webhook_id}/{token}

Bir token webhook nesnesi döndürür.

Hız sınırı: webhook:read kovasında her webhook için 10 saniyede 100 istek.

Token ile webhook güncelleme

PATCH /webhooks/{webhook_id}/{token}

name ve avatar alanlarını Webhook güncelleme ile aynı kurallarla günceller ve değiştirilmiş token webhook nesnesini döndürür. channel_id göndermek 403 FORBIDDEN döndürür: yalnızca token ile bir webhook taşınamaz. Webhooks Update yayar; denetim kaydı girişi oluşturulmaz.

Hız sınırı: webhook:update kovasında her webhook için 10 saniyede 20 istek.

Token ile webhook silme

DELETE /webhooks/{webhook_id}/{token}

Webhook'u kalıcı olarak siler ve 204 döndürür. Webhooks Update yayar; denetim kaydı girişi oluşturulmaz.

Token'a sahip olan herkes webhook'u silebilir

Bu yol hiçbir sunucu iznini değerlendirmez. Token'ı gizli tutun.

Hız sınırı: webhook:delete kovasında her webhook için 10 saniyede 20 istek.

Webhook yürütme

POST /webhooks/{webhook_id}/{token}

Webhook'un kanalında, yazarı webhook olan bir mesaj oluşturur. Content-Type: application/json ile bir webhook mesajı gövdesi gönderin.

Sorgu parametreleri

Alan Tür Açıklama
wait? boolean Oluşturulan mesajı yanıtta almak için true (varsayılan false)

Yanıt

Durum Gövde Koşul
204 boş Mesaj oluşturuldu ve wait false ya da gönderilmedi
200 mesaj nesnesi Mesaj oluşturuldu ve wait true
400 hata yanıtı Gövde geçerli JSON değil, mesaj boş, içerik 4.000 karakterden uzun, bir gömme gömme sınırlarını aşıyor veya username geçersiz
401 hata yanıtı Token webhook ile eşleşmiyor
404 hata yanıtı Webhook yok veya kanalı yok

Yan etkiler

Mesaj webhook_id, geçerli ad ve webhook'un saklanan avatarıyla saklanır. Kanalı okuyabilen her oturum, author alanı webhook'tan oluşturulmuş (id = webhook kimliği, bot: true) eksiksiz mesaj nesnesiyle birlikte Message Create alır.

Hız sınırı

webhook:execute kovasında her webhook için dakikada 60 istek (Slack webhook'u yürütme ile paylaşılır).

curl -X POST "https://tebhos.com/api/v1/webhooks/1501314428688998182/$WEBHOOK_TOKEN?wait=true" \
  -H "Content-Type: application/json" \
  -d '{"content": "Deploy finished", "embeds": [{"title": "v2.4.0", "color": 3066993}]}'
import os, requests

url = f"https://tebhos.com/api/v1/webhooks/1501314428688998182/{os.environ['WEBHOOK_TOKEN']}"
res = requests.post(url, json={"content": "Deploy finished"})
res.raise_for_status()  # 204 No Content

Webhook mesajı yanıtı

wait=true ile Webhook yürütme, Webhook mesajını alma ve Webhook mesajını düzenleme standart mesaj nesnesini döndürür; Gateway'in ilettiği şekille aynıdır. author webhook'tur (id webhook kimliği, username mesajın gönderildiği ad, bot true), webhook_id doludur ve embeds çözümlenmiş medya alanlarıyla saklanan gömmeleri taşır.

Webhook mesajı yolları

Bu yollar yalnızca webhook'un kendisinin mevcut kanalına gönderdiği mesajları hedefler. O kanalda bulunmayan bir mesaj 404 UNKNOWN_MESSAGE, başka birinin gönderdiği bir mesaj 403 MISSING_PERMISSIONS döndürür.

Webhook mesajını alma

GET /webhooks/{webhook_id}/{token}/messages/{message_id}

Mesaj nesnesini döndürür.

Hız sınırı: webhook:message_get kovasında her webhook için dakikada 60 istek.

Webhook mesajını düzenleme

PATCH /webhooks/{webhook_id}/{token}/messages/{message_id}

Bir webhook mesajını düzenler ve güncellenmiş mesaj nesnesini döndürür.

Alan Tür Açıklama
content? string Yeni içerik (kırpıldıktan sonra en fazla 4.000 karakter)
embeds? array[zengin gömme girdisi nesnesi] Mesajın zengin gömmelerinin yerini alır ([] hepsini kaldırır); bağlantı önizlemeleri korunur. Aynı gömme sınırları geçerlidir
flags? integer Mesaj bayrakları; yalnızca gönderilebilir bitler değişir
allowed_mentions? object Bahsetmeler bölümündeki gibi, yeni içerik için bahsetme politikası

Boş olmayan content, boş olmayan bir embeds listesi veya flags alanlarından en az biri gerekir; aksi halde istek 400 CANNOT_SEND_EMPTY_MESSAGE ile başarısız olur. Sınırları aşan bir gömme alan bazında bildirilir (örneğin yol embeds.0.title, kod STRING_LENGTH_INVALID). İçeriğin değişmesi mesajı düzenlenmiş olarak işaretler ve bahsetmelerini yeniden hesaplar. Message Update yayar.

Hız sınırı: webhook:message_edit kovasında her webhook için dakikada 30 istek.

Webhook mesajını silme

DELETE /webhooks/{webhook_id}/{token}/messages/{message_id}

Bir webhook mesajını siler ve 204 döndürür. Message Delete yayar.

Hız sınırı: webhook:message_delete kovasında her webhook için dakikada 30 istek.

Slack webhook'u yürütme

POST /webhooks/{webhook_id}/{token}/slack

Slack uyumlu bir yükü kabul eder, TEBHOS içeriğine ve gömmelerine dönüştürür ve yazarı webhook olan tek bir mesaj oluşturur. Sabit ok gövdesiyle (text/html) 200 döndürür.

Slack yük nesnesi

Alan Tür Açıklama
text? string Mesaj içeriği (kırpılmış, en fazla 4.000 karakter). İçindeki bahsetmeler kimseye bildirim göndermez (allowed_mentions {"parse": []} olur)
username? string Mesaja özel ad geçersiz kılma (1-80 karakter)
icon_url? string Kabul edilir ve yok sayılır
attachments? array[Slack eki nesnesi] Gömmelere dönüştürülür

Slack eki nesnesi

Alan Tür Karşılığı
pretext?, text? string Satır sonuyla birleştirilmiş gömme açıklaması
fallback? string Gömme açıklaması; yalnızca pretext ve text ikisi de yoksa kullanılır
color? string Tam olarak altı onaltılık rakamdan (isteğe bağlı baştaki # ile) oluşuyorsa gömme rengi
title? string Gömme başlığı
title_link? string Gömme URL'si (yalnızca http/https)
fields? array[{title, value, short?}] Gömme alanları; başlığı veya değeri olmayan giriş atılır, short inline alanına karşılık gelir
footer? string Gömme alt bilgi metni
ts? number veya string Unix saniyesinden gömme zaman damgası
author_name? string Gömme yazar adı (yazar yalnızca bu alan varsa üretilir)
author_link?, author_icon? string Gömme yazar URL'si ve simgesi (yalnızca http/https)
image_url?, thumb_url? string Gömme görüntüsü ve küçük resmi (yalnızca http/https)

Hiçbir gömme özelliği üretmeyen ek atılır. Ne içerik ne de gömme üreten bir yük 400 BAD_REQUEST döndürür. İçerikteki her bahsetme, allowed_mentions olmadan Webhook yürütme işleminde olduğu gibi korunur. Yükte nonce bulunmadığından tekrarlanan bir çağrı ikinci bir mesaj oluşturur.

Hız sınırı: webhook:execute kovasında her webhook için dakikada 60 istek.

GitHub webhook'u yürütme

POST /webhooks/{webhook_id}/{token}/github

Bir GitHub webhook teslimatını kabul eder ve olay işlenebiliyorsa biçimlendirilmiş tek bir mesaj oluşturur. Mesaj oluşturulsa da oluşturulmasa da her zaman 204 döndürür. Bir GitHub deposunun veya kuruluşunun webhook'unu application/json içerik türüyle bu URL'ye yönlendirin.

İstek başlıkları

Alan Tür Açıklama
X-GitHub-Event string GitHub olay türü. Eksik veya bilinmeyen bir değer hiçbir şey üretmez
X-GitHub-Delivery? string Tekrarları ayıklamak için kullanılan teslimat tanımlayıcısı

Tekrar ayıklama webhook ve teslimat başınadır

Bir teslimat mesaj ürettikten sonra aynı webhook o teslimat tanımlayıcısını 24 saat boyunca yok sayar. Hiçbir şey üretmeyen bir teslimat, tanımlayıcıyı yeniden deneme için serbest bırakır. Boş bir tanımlayıcı tekrar ayıklamayı devre dışı bırakır.

Gövde türsüz JSON olarak okunur; alanları eksik veya bozuk bir teslimat yalnızca hiçbir şey üretmez.

Üretilen mesaj

İşlenen bir olay, içeriği olmayan ve tam olarak bir rich gömme içeren tek bir mesaj oluşturur; mesaj GitHub adıyla ve avatarsız gönderilir. Gömme yazarı, aşağıdaki tabloda belirtilen GitHub kullanıcısıdır (giriş adı, profil URL'si ve avatar). Bahsetmeler hiçbir zaman ayrıştırılmaz; bu nedenle bir commit mesajındaki veya yorumdaki hiçbir şey kimseye bildirim göndermez.

Gömme başlıkları kırpılır ve 70 karaktere (sıradan push'lar ile check run/suite'ler için 256) kısaltılır; açıklamalar 350 karaktere kısaltılır ve kesilen yer ... ile işaretlenir. HTML varlıkları (entity) çözülmez.

GitHub olay türleri

Değer Üretildiği durum Gömme yazarı
commit_comment action created ve yorumda commit_id var Yorum yazarı
create ref_type branch veya tag Gönderen
delete ref_type branch veya tag Gönderen
fork forkee mevcut Gönderen
issue_comment action created; comment ve issue ile Yorum yazarı
issues action opened, closed veya reopened (açıklama yalnızca opened için) Gönderen
member action added; member ile Gönderen
public Her zaman Gönderen
pull_request action opened, closed veya reopened (açıklama yalnızca opened için) Pull request yazarı
pull_request_review action submitted; review ve pull_request ile İnceleme yazarı
pull_request_review_comment action created; comment ve pull_request ile Yorum yazarı
push ref ve compare mevcut ve en az bir commit var; zorla yapılan push head_commit gerektirir ve bir karşılaştırma bağlantısı üretir Gönderen
release action published; release ile Gönderen
watch action started Gönderen
check_run action completed ve üst suite'in sonucu skipped değil Yok
check_suite action completed ve sonuç skipped değil Yok
discussion action created; discussion ile Tartışma yazarı
discussion_comment action created; comment ve discussion ile Yorum yazarı
repository action created Gönderen

Her olay ayrıca repository gerektirir. Bir push her commit için bir satır listeler ve bir commit mesajındaki This reverts commit <40-character sha>. cümlesi, geri alınan commit'e giden bir bağlantıya dönüştürülür. Check run ve suite'ler success sonucunda yeşil, aksi halde kırmızı çizilir.

Hız sınırı: webhook:github kovasında her webhook için dakikada 200 istek.

Instatus webhook'u yürütme

POST /webhooks/{webhook_id}/{token}/instatus

Bir Instatus durum sayfası bildirimini kabul eder ve yük işlenebiliyorsa biçimlendirilmiş tek bir mesaj oluşturur. Mesaj oluşturulsa da oluşturulmasa da her zaman 204 döndürür.

İşleme

TEBHOS şu sırayla tam olarak bir bölüm seçer:

  1. Varsa incident. Yalnızca incident.name boş değilse işlenir.
  2. Aksi halde, varsa maintenance. Yalnızca maintenance.name boş değilse işlenir.
  3. Aksi halde component_update veya component.

Not

Bir incident nesnesi mevcut ancak adı yoksa hiçbir şey işlenmez; TEBHOS bakım veya bileşen bölümlerine geçmez.

Mesajın içeriği yoktur ve bir rich gömme içerir; Instatus adıyla ve avatarsız gönderilir. Bahsetmeler hiçbir zaman ayrıştırılmaz.

Gömme bölümü Olay / bakım Bileşen geçişi
Başlık 256 karaktere kısaltılmış ad {component name} - {status}; ad yoksa A component, durum bilinmiyorsa updated kullanılır
URL Öğenin url alanı, yoksa page.url (yalnızca http/https) page.url
Açıklama En son created_at değerine sahip güncellemenin 4,096 karaktere kısaltılmış markdown alanı Yok
Alanlar Status (satır içi), Window (zaman damgası biçimlemesiyle bakım başlangıcı ve bitişi), Affected components Yok
Alt bilgi page.status_description, yoksa okunabilir hale getirilmiş page.status_indicator; öğe geriye dönük doldurulmuşsa sonuna Backfilled eklenir Aynısı, Backfilled olmadan
Zaman damgası En son güncellemenin created_at alanı, ardından updated_at, ardından created_at component_update.created_at, ardından component.created_at
Renk Durumdan (aşağıya bakın); bakım varsayılan olarak bakım rengini kullanır Yeni durumdan

Instatus durum değerleri

Bir durum, büyük harfe çevrilip A-Z dışındaki her karakter çıkarılarak normalleştirilir; böylece degraded_performance DEGRADEDPERFORMANCE olur.

Değer Üretilen etiket Renk
UP All systems operational Nötr (#5c6bc0)
HASISSUES Has issues Nötr
OPERATIONAL Operational Çalışıyor (#3ecf8e)
UNDERMAINTENANCE Under maintenance Bakım (#3b82f6)
DEGRADEDPERFORMANCE Degraded performance Düşük performans (#f5a623)
PARTIALOUTAGE Partial outage Kısmi kesinti (#f97316)
MAJOROUTAGE Major outage Büyük kesinti (#e23c39)
INVESTIGATING Investigating Büyük kesinti
IDENTIFIED Identified Kısmi kesinti
MONITORING Monitoring Düşük performans
RESOLVED Resolved Çalışıyor
NOTSTARTEDYET Scheduled Bakım
PLANNED Planned Bakım
INPROGRESS In progress Bakım
COMPLETED Completed Çalışıyor

Diğer tüm değerler değiştirilmeden, nötr renkle üretilir.

TEBHOS'ta desteklenmez

Instatus bildirimlerinde tekrar ayıklama yapılmaz; tekrarlanan bir bildirim başka bir mesaj oluşturur.

Hız sınırı: webhook:instatus kovasında her webhook için dakikada 200 istek.