AttendBeacon
Avaa työtila

Integraatiot

Webhookit

Saat tiedon sekunneissa, kun joku ilmoittautuu, maksaa, saapuu tai poistaa tietonsa, Standard Webhooks -tavalla allekirjoitetussa rungossa, jotta tiedät viestin tulevan meiltä.

Miten ne toimivat

Webhook-päätepiste on oma https-osoitteesi, jota AttendBeacon kutsuu POST-pyynnöllä, kun tapahtumissasi tapahtuu jotain. Lisää päätepiste työtilassa kohdassa Integraatiot › Webhookit tai rajapinnan kautta (POST /webhooks), valitse sen vastaanottamat tapahtumatyypit ja tallenna allekirjoituksen salaisuus, joka näytetään vain kerran.

AttendBeacon kirjoittaa jokaisen tapahtuman ensin tietokantansa jonoon ja kutsuu sitten jokaista kuuntelevaa päätepistettä, joten uudelleenkäynnistys meidän päässämme ei koskaan hukkaa yhtäkään. Jokaisessa kutsussa on sama viestitunniste jokaisella yrityksellä, joten toiston voi tunnistaa.

Tapahtumatyypit

TyyppiLähetetään, kunTilaus vaatii
attendee.registeredA registration was created.attendees:read people:read
attendee.updatedA registration was changed.attendees:read people:read
attendee.cancelledA registration was cancelled.attendees:read people:read
attendee.erasedAn attendee deleted their data.attendees:read
order.paidAn order was paid.orders:read people:read
checkin.createdSomebody was let in.checkins:read people:read
feedback.givenA rating was given.surveys:read people:read
lead.capturedA lead was captured.sponsors:read people:read
certificate.issuedA certificate was issued.attendees:read
content.publishedSession slides were published.program:read
member.joinedSomebody joined a community.communities:read
member.leftA member left a community.communities:read
stay.requestedA hotel stay was asked for.events:read
stay.assignedA hotel stay was assigned.events:read
stay.changedA hotel stay changed.events:read
stay.cancelledA hotel stay was cancelled.events:read
shift.signed_upA volunteer took a shift.crew:read
shift.droppedA volunteer came off a shift.crew:read
travel.changedA guest's travel changed.events:read
claim.submittedAn expense claim was sent in.finance:read
claim.approvedAn expense claim was approved.finance:read
claim.paidAn expense claim was paid.finance:read

Viiteoppaan Webhook-tapahtumat näyttää kunkin tyypin kentät ja esimerkin. GET /webhooks/event-types vastaa samalla luettelolla ja kunkin hyötykuorman JSON-skeemalla koodille, joka haluaa tarkistaa vastaanottamansa tiedot.

Mitä saapuu

HTTP
POST /attendbeacon HTTP/1.1
Host: hooks.example.com
Content-Type: application/json
webhook-id: msg_2f6c1a9e4b7d4c0f8e3a5b9d1c7e0f42
webhook-timestamp: 1792130400
webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=

{
  "type": "attendee.registered",
  "timestamp": "2026-10-14T12:00:00.000Z",
  "data": {
    "event": { "eventId": "b3ac0000-0000-4000-8000-000000000001", "slug": "beacon-summit", "name": "Beacon Summit" },
    "attendee": {
      "attendeeId": "b3ac0008-0000-4000-8000-000000000000",
      "ticketTypeName": "Conference pass",
      "firstName": "Emma",
      "lastName": "Bakker",
      "email": "emma.bakker0@example.com",
      "status": "active",
      "valid": true
    }
  }
}

Runko on { type, timestamp, data }. data-kentän osallistujalla on samat kentät kuin rajapinnan palauttamalla osallistujalla, joten toiselle kirjoitettu koodi toimii toisellekin. Hotellimajoituksia, matkoja, kulukorvauksia, vuoroja, todistuksia, sisältöä ja yhteisön jäseniä koskevat tyypit sisältävät vain tunnisteita, tiloja, päivämääriä ja summia, ei koskaan nimeä.

Vastaa millä tahansa 2xx-koodilla 15 sekunnin kuluessa. Tee varsinainen työ jälkikäteen: laita viesti omaan jonoosi ja vastaa heti.

Allekirjoituksen tarkistaminen

Kuka tahansa voi lähettää osoitteeseesi, joten tarkista jokainen kutsu ennen kuin luotat siihen. Allekirjoitus on merkkijonon {webhook-id}.{webhook-timestamp}.{body} Base64-muotoinen HMAC-SHA256 päätepisteesi salaisuudella (osa whsec_-etuliitteen jälkeen, Base64-dekoodattuna), kirjoitettuna muodossa v1, ja allekirjoitus. Kun salaisuutta vaihdetaan, otsakkeessa voi olla kaksi allekirjoitusta välilyönnillä erotettuina; hyväksy kutsu, jos toinen niistä täsmää.

  • Tarkista raaka runko täsmälleen sellaisena kuin se saapui, ennen JSON-jäsennystä.
  • Hylkää aikaleima, joka poikkeaa kellostasi yli viisi minuuttia, jotta tallennettua kutsua ei voi toistaa myöhemmin.
  • Vertaa vakioajassa.
  • Muista käsittelemäsi viestitunnisteet ja ohita toistot.
import { createHmac, timingSafeEqual } from "node:crypto";

// secret: "whsec_..." as the workspace showed it; body: the raw request body as a string.
export function verify(secret, headers, body) {
  const id = headers["webhook-id"];
  const timestamp = Number(headers["webhook-timestamp"]);
  if (Math.abs(Date.now() / 1000 - timestamp) > 300) return false;

  const key = Buffer.from(secret.replace(/^whsec_/, ""), "base64");
  const expected = createHmac("sha256", key).update(`${id}.${timestamp}.${body}`).digest("base64");

  return headers["webhook-signature"].split(" ").some((candidate) => {
    const [version, signature] = candidate.split(",");
    return version === "v1" && signature.length === expected.length
      && timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
  });
}

Menetelmä on Standard Webhooks, joten sen kirjastot omalle kielellesi tarkistavat kutsumme sellaisinaan samalla salaisuudella.

Uudelleenyritykset

Kutsua, joka ei saa 2xx-vastausta 15 sekunnin kuluessa, yritetään uudelleen kahdeksan kertaa hieman alle vuorokauden aikana: heti, 10 sekunnin, minuutin, 5 minuutin, 30 minuutin, 2 tunnin, 6 tunnin ja 15 tunnin kuluttua. Jokaista muuta kuin 2xx-vastausta yritetään uudelleen, myös 4xx-vastausta: päätepiste, joka vastaa 401 epäonnistuneen käyttöönoton jälkeen, on yleensä korjattu aamuun mennessä.

Poikkeus on 410 Gone: se kytkee päätepisteen pois, koska vastaanottaja ilmoitti, ettei sitä enää ole. Kytke se takaisin päälle työtilassa, kun se taas on olemassa.

Kunkin päätepisteen sivu työtilassa luettelee sen toimitukset 30 päivän ajalta: mitä lähetettiin, jokainen yritys ja mitä päätepiste vastasi, sekä Lähetä uudelleen epäonnistuneelle. Lähetä testitapahtuma lähettää allekirjoitetun webhook.test-tapahtuman, kun seuraat.

Päätepisteet rajapinnan kautta

webhooks:write-oikeudella avain voi itse lisätä, muuttaa, testata ja poistaa päätepisteitä, mikä sopii ohjelmistolle, joka määrittää omansa: POST /webhooks palauttaa päätepisteen ja sen salaisuuden kerran; POST /webhooks/{webhookId}/secret luo uuden salaisuuden ja lopettaa vanhan toiminnan heti. Työtilalla voi olla enintään 20 päätepistettä.

Automaatioalustat

Power Automate, Zapier ja Make tilaavat sen sijaan kutsulla POST /hooks, yksi tilaus työnkulkua kohden, ja vastaanottavat samat tapahtumat tavallisena JSONina, jossa data on nostettu ylimmälle tasolle: { id, type, timestamp, event, attendee }. Ne eivät tarvitse salaisuutta: niiden antama osoite on itsessään niiden salaisuus. Katso Power Automate ja Zapier.

Oppaat ja tämä sivusto ovat omalla kielelläsi. API-viiteoppaan omat kuvaukset ovat englanniksi, kuten itse rajapintakin.