HansaChat

Documentation

Ienākošie webhooki

Izveidojiet webhooku URL un sūtiet Slack saderīgus JSON ziņojumus kanālos.

Ienākošie webhooki ļauj ārējiem rīkiem ievietot automātiskus ziņojumus HansaChat kanālā. Izmantojiet tos izvietošanas atjauninājumiem, uzraudzības brīdinājumiem, biļešu paziņojumiem, formu iesniegumiem un citiem notikumiem, kuriem jāparādās komandas tērzēšanā.

Ienākošos webhookus var izveidot un pārvaldīt tikai darbavietu administratori.

Atveriet Webhooki no Iestatījumi

Izveidojiet webhooku

  1. Atveriet Iestatījumi no apakšējās kreisās sānu joslas daļas.
  2. Atlasiet Webhooki.
  3. Izvēlieties Izveidot webhooku.
  4. Ievadiet skaidru webhooka nosaukumu, piemēram, CI Deployments.
  5. Izvēlieties kanālu, kurā ziņojumi jāpublicē.
  6. Neobligāti ievadiet ikonas URL.
  7. Izvēlieties Izveidot webhooku.

Tukša webhooku lapa

Webhooka izveides forma

Nokopējiet webhooka URL

Pēc izveides HansaChat parāda webhooka URL tikai vienreiz. Nokopējiet to un uzglabājiet drošībā ārējā rīkā, kas sūtīs notikumus.

Webhooka URL redzams vienreiz

Ja aizverat šo ekrānu, nesaglabājot URL, nomainiet URL, lai ģenerētu jaunu slepeno atslēgu. Iepriekšējais URL pārstāj darboties uzreiz pēc nomaiņas.

Pārvaldiet webhookus

No webhooku lapas administratori var:

  • Rediģēt webhooka nosaukumu, kanālu, ikonas URL vai aktīvo stāvokli.
  • Atspējot webhooku, lai noraidītu jaunus ziņojumus, to nedzēšot.
  • Nomainīt URL, lai atspēkotu veco slepeno atslēgu un ģenerētu jaunu URL.
  • Dzēst webhooku. Esošie tērzēšanas ziņojumi netiek noņemti.

Tehniskā atsauce

Nosūtiet POST pieprasījumu uz webhooka URL:

https://{workspace-domain}/api/webhooks/{publicID}/{secret}

URL identificē webhooku. Katru piegādi nepieciešams papildu parakstīt ar webhooka slepeno atslēgu: nosūtiet galveni X-Webhook-Signature ar laika zīmogu un HMAC-SHA256 parakstu, kas aprēķināts pār pieprasījuma pamattekstu. Neparakstītas vai beigušās piegādes tiek noraidītas ar 401. Turiet pilnu URL slepenībā.

Parakstiet savas piegādes

Katram pieprasījumam nepieciešama galvene X-Webhook-Signature šādā formātā:

t=<unix timestamp>,v1=<hex signature>

Paraksts ir HMAC-SHA256 kontrolsumma (digest), kas aprēķināta pār <laika zīmogs>.<pamatteksts> — unix laika zīmogs, punkts un pieprasījuma neapstrādātais pamatteksts —, izmantojot kā atslēgu webhooka slepeno atslēgu no URL. Piegādes ar laika zīmogu, kas vecāks par 5 minūtēm, tiek noraidītas, tāpēc parakstiet katru piegādi tieši pirms nosūtīšanas.

Bash (openssl):

URL='https://{workspace-domain}/api/webhooks/{publicID}/{secret}'
BODY='{"text":"Deployment completed successfully"}'
TS=$(date +%s)
SIG=$(printf '%s.%s' "$TS" "$BODY" | \
  openssl dgst -sha256 -hmac "$(basename "$URL")" | awk '{print $NF}')
curl -X POST "$URL" \
  -H 'Content-Type: application/json' \
  -H "X-Webhook-Signature: t=$TS,v1=$SIG" \
  -d "$BODY"

Python:

import hashlib, hmac, time, requests

url = "https://{workspace-domain}/api/webhooks/{publicID}/{secret}"
secret = url.rsplit("/", 1)[-1]
body = b'{"text":"Deployment completed successfully"}'
ts = str(int(time.time()))
sig = hmac.new(secret.encode(), f"{ts}.".encode() + body, hashlib.sha256).hexdigest()
requests.post(url, data=body,
              headers={"Content-Type": "application/json",
                       "X-Webhook-Signature": f"t={ts},v1={sig}"})

Node.js:

import { createHmac } from "node:crypto";

const url = "https://{workspace-domain}/api/webhooks/{publicID}/{secret}";
const secret = new URL(url).pathname.split("/").at(-1);
const body = JSON.stringify({ text: "Deployment completed successfully" });
const ts = Math.floor(Date.now() / 1000);
const sig = createHmac("sha256", secret).update(`${ts}.${body}`).digest("hex");
await fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Webhook-Signature": `t=${ts},v1=${sig}`,
  },
  body,
});

Kad HansaChat atgriež ok, ziņojums parādās izvēlētajā kanālā.

Webhooka testa ziņojums kanālā

Ar Slack saderīgs payload

Galapunkts pieņem ar Slack saderīgas JSON slodzes ar text, blocks un attachments.

{
  "text": "Deployment completed successfully",
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "Deployment completed"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "Branch `main` is now live."
      }
    }
  ]
}

Kaut vienam no text, blocks vai attachments jāsatur salasāms teksts.

Atbalstītie lauki

Lauks Obligāts Piezīmes
text Nē Vienkārša teksta ziņojuma saturs.
blocks Nē Slack Block Kit stila bloki. Līdz 50 blokiem. Atbalstītie bloku veidi: section, header, context, image.
attachments Nē Slack stila pielikumi. Līdz 100 pielikumiem.

Maksimālais payload izmērs ir 1 MB.

Pieprasījumu ierobežojumi

Ienākošo webhooku uzņemšana ir ierobežota katram webhooka URL atsevišķi.

Katrs webhooks var pieņemt līdz 10 autentificētiem pieprasījumiem minūtē un līdz 100 autentificētiem pieprasījumiem stundā. Kad kāds no ierobežojumiem ir sasniegts, HansaChat atgriež 429 resource_exhausted.

Lūdzu, sazinieties ar mums, ja vēlaties paaugstināt pieprasījumu ierobežojumu.

Payload ierobežojumi tiek piemēroti atsevišķi: maksimālais pamatteksta izmērs ir 1 MB, blocks pieņem līdz 50 vienībām, attachments pieņem līdz 100 vienībām, un payload jāsatur salasāms teksts.

Idempotence

Pievienojiet Idempotency-Key galveni, kad jūsu sistēma var atkārtoti nosūtīt vienu un to pašu notikumu:

curl -X POST 'https://{workspace-domain}/api/webhooks/{publicID}/{secret}' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: deploy-1247' \
  -d '{"text":"Deployment #1247 completed"}'

Ja HansaChat vienam un tam pašam webhookam atkārtoti saņem vienu un to pašu idempotences atslēgu, tas atgriež 200 ok, neizveidojot dublētu ziņojumu.

Atbildes

Veiksmīgi pieprasījumi atgriež:

ok

Biežākās kļūdas:

Statuss Atbilde Nozīme
400 invalid_payload JSON pamattekstu nevarēja parsēt.
401 missing_signature Pieprasījumā nav galvenes X-Webhook-Signature.
401 invalid_signature Paraksts ir nederīgs vai arī laika zīmogs ir vecāks par 5 minūtēm.
400 invalid_blocks Pieprasījums satur vairāk par 50 blokiem.
400 too_many_attachments Pieprasījums satur vairāk par 100 pielikumiem.
400 no_text Payload nesatur salasāmu tekstu.
429 resource_exhausted Webhooks pārsniedza 10 pieprasījumus minūtē vai 100 pieprasījumus stundā.
404 no_active_hooks Darbavieta, webhooks, slepenā atslēga vai aktīvais stāvoklis ir nederīgs.
410 channel_is_archived Mērķa kanāls ir arhivēts.
503 temporarily_unavailable HansaChat pašlaik nevar apstrādāt ziņojumu. Vēlāk mēģiniet vēlreiz ar to pašu Idempotency-Key.

Drošības ieteikumi

  • Ar webhooku URL rīkojieties kā ar parolēm.
  • Uzglabājiet URL savas ārējās sistēmas slepeno datu pārvaldniekā.
  • Parakstiet katru piegādi ar webhooka slepeno atslēgu — neparakstīti pieprasījumi tiek noraidīti.
  • Nomainiet URL, ja tas tika atklāts vai pazuda.
  • Atspējojiet nelietotos webhookus.
  • Katrai ārējai sistēmai izmantojiet atsevišķu webhooku, lai piekļuvi varētu tīri atsaukt.