Wyszukiwanie artykułów

Wybierz produkt

Katalog pomocy dla null

Przeglądaj wszystkie artykuły null (Last Updated )

Nie znaleziono artykułów.

Wyniki wyszukiwania

Nie znaleziono artykułów.

Reach 360: Wydarzenia Webhook

Artykuł zaktualizowany ostatnio dnia 16 sty 2026

Co robi ten punkt końcowy interfejsu API

Zdarzenia Webhook wysyłają informacje o ukończeniu kursu, przesłaniu kursu do publikacji, rejestracji użytkowników i grup na kursy i ścieżki szkoleniowe lub gdy użytkownik zostanie dodany do konta Reach 360. Użytkownicy konfigurują interfejs API Webhooks, aby pobierał informacje zebrane przez te zdarzenia.

Typy zdarzeń

  • course.completed- Wyzwalane, gdy uczestnik ukończy kurs.
  • course.submitted- Wyzwalane, gdy autor przesyła kurs do sprawdzenia przez administratora do publikacji.
  • enrollments.created- Wyzwalane, gdy użytkownicy lub grupy są zapisani na kurs lub ścieżka uczenia się.
  • user.created- Wyzwalane, gdy użytkownik zostanie dodany do Twojego konta Reach 360.

Ładunek zdarzenia Webhook

Ładunek każdego żądania webhook ma wspólną strukturę wspólną dla wszystkich zdarzeń webhook. Treść żądania zawiera następujące właściwości:

  • id(string) - unikalny identyfikator zdarzenia
  • createdAt(string) - czas, w którym doszło do zdarzenia
  • type(string) - typ zdarzenia webhook
  • webhookId(string) - identyfikator webhook, który spowodował wysłanie zdarzenia
  • apiVersion(string) - Wersja API używana podczas wysyłania zdarzenia webhook. Zostanie również wysłany jako API-Version nagłówek w żądaniu
  • data(object) - specyficzne dla typu typu zdarzenia webhook (patrz przykłady)

Przykłady żądania ładunku

Każdy poniższy przykład zdarzenia webhook pokazuje przykład tego, jak wyglądałoby żądanie webhook do docelowego adresu URL na serwerze.

course.completed

Wyzwalane, gdy uczestnik ukończy kurs.

Właściwości danych ładunku zdarzenia:

  • kurs (obiekt) - obiekt kursu dla powiązanego kursu lub null, jeśli zapisy dotyczą ścieżki uczenia się. Ten obiekt kursu ma również obiekt quizu o dwóch właściwościach: zaliczonym i punktowym. Jeśli z kursem nie ma quizu, obiekt będzie pusty.

  • user (object) - obiekt użytkownika dla powiązanego użytkownika.

{
„id”: „example-course-completed-event-id”, „createDat”: 
 „2020-07-02T 03:39:18.991 Z”, „type”: „course.completed”, „WebHookId”: „
example-webhook-id”, 
 „
apiVersion”: „04.04.202", „
data”: {„kurs”: {„authorURL”: "https://api.reach360.com/users/example-author-id „, „coverImageUrl”: null, „id”: „example-course-id”, „courseReportURL”: "https://api.reach360.com/reports/courses/example-course-id „, „title”: „Przykładowy 
 kurs”, 
 „url”:” 
 
 
 
 
 https://api.reach360.com/courses/example-course-id „, 
 „contentType”: „RISE” „
quiz”: {„przeszedł”: true, 
 „score”: 80
}
}, 
 „użytkownik”: {„email”: "foo@example.com 
 „, „FirstName”: „Przykładowe imię”, „GroupSurl”: "https://api.reach360.com/users/example-user-id/groups „, „id”: „example-user-id”, 
 „lastName”: „Przykład Nazwiska”, 
 „LastActive"Eat”: 
 „2021-10-28T 20:39:52.659 Z”, „LearnerReportURL”: "https://api.reach360.com/reports/learners/example-user-id 
 „, 
 
„role”: „uczestnik”, 
 „url”: "https://api.reach360.com/users/example-user-id „, 
 „articulate360User”: false}}} 
 
 

course.submitted

Wyzwalane, gdy autor przesyła kurs do sprawdzenia przez administratora do publikacji.

{
  "id": "example-course-submitted-event-id",
  "createdAt": "2020-09-14T05:47:28.951Z",
  "type": "course.submitted",
  "webhookId": "example-webhook-id",
  "apiVersion": "2023-04-04 ",
  "data": {
    "isInitialSubmission": true,
    "course": {
      "authorUrl": "<https://api.reach360.com/users/example-author-id>",
      "coverImageUrl": null,
      "id": "example-course-id",
      "courseReportUrl": "<https://api.reach360.com/reports/courses/example-course-id>",
      "title": "Example Course",
      "url": "<https://api.reach360.com/courses/example-course-id>",
	  "contentType": "RISE" 
    },
    "submitter": {
      "email": "author@example.com",
      "firstName": "Example",
      "groupsUrl": "<https://api.reach360.com/users/example-author-id/groups>",
      "id": "example-author-id",
      "lastName": "Author",
      "lastActiveAt": "2021-10-28T20:39:52.659Z",
      "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-author-id>",
      "role": "author",
      "url": "<https://api.reach360.com/users/example-author-id>"
 „articulate360user”: false „articulate360User”: false 
    },
    "reviewer": {
      "email": "admin@example.com",
      "firstName": "Example",
      "groupsUrl": "<https://api.reach360.com/users/example-admin-id/groups>",
      "id": "example-admin-id",
      "lastName": "Admin",
      "lastActiveAt": "2021-10-28T20:39:52.659Z",
      "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-admin-id>",
      "role": "admin",
      "url": "<https://api.reach360.com/users/example-admin-id>"
 
    }
  }
}

enrollments.created

Wyzwalane, gdy użytkownicy lub grupy są zapisani na kurs lub ścieżka uczenia się.

Ładunek tego zdarzenia zawsze zawiera te same nazwy właściwości, ale która z tych właściwości ma wartości różni się w zależności od typu utworzonych rejestracji.

Na przykład, jeśli jeden lub więcej użytkowników jest zapisanych na kurs, data część ładunku wysłanego do modułu obsługi będzie zawierała właściwość users tablicy (tablica obiektów użytkownika) i właściwość. course W tym scenariuszu groups właściwość będzie pustą learningPath tablicą i zostanie ustawiona nanull.

Podobnie, jeśli jedna lub więcej grup jest zarejestrowanych w ścieżce uczenia się, data obiekt będzie miał właściwość groups tablicy (tablicę obiektów grupy) i learningPath właściwość, podczas gdy users będzie pustą tablicą i course będzie. null

Właściwości danych ładunku zdarzenia:

{
  "id": "example-enrollments-created-event-id",
  "type": "enrollments.created",
  "createdAt": "2020-09-16T19:59:55.912Z",
  "data": {
    "course": {
      "authorUrl": "<https://api.reach360.com/users/example-author-id>",
      "coverImageUrl": null,
      "id": "example-course-id",
      "courseReportUrl": "<https://api.reach360.com/reports/courses/example-course-id>",
      "title": "Example Course",
      "url": "<https://api.reach360.com/courses/example-course-id>"
	  "source": "rise" 
    },
    "enrolledBy": {
      "email": "admin@example.com",
      "firstName": "Example",
      "groupsUrl": "<https://api.reach360.com/users/example-admin-id/groups>",
      "id": "example-admin-id",
      "lastName": "Admin",
			"lastActiveAt": "2021-10-28T20:39:52.659Z",
      "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-admin-id>",
      "role": "admin",
      "url": "<https://api.reach360.com/users/example-admin-id>"
„articulate360User”: false „articulate360User”: false 
    },
    "groups": [],
    "learningPath": null,
    "users": [
      {
        "email": "learner1@example.com",
        "firstName": "Foo",
        "groupsUrl": "<https://api.reach360.com/users/example-learner-1/groups>",
        "id": "example-learner-1",
        "lastName": "Learner",
				"lastActiveAt": "2021-10-28T20:39:52.659Z",
        "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-learner-1>",
        "role": "learner",
        "url": "<https://api.reach360.com/users/example-learner-1>"
 „articulate360User”: false 
      },
      {
        "email": "learner2@example.com",
        "firstName": "Bar",
        "groupsUrl": "<https://api.reach360.com/users/example-learner-2/groups>",
        "id": "example-learner-2",
        "lastName": "Learner",
				"lastActiveAt": "2021-10-28T20:39:52.659Z",
        "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-learner-2>",
        "role": "learner",
        "url": "<https://api.reach360.com/users/example-learner-2>"
 „articulate360User”: false 04.04.2021   
      },
		{
        "email": "learner3@example.com",
        "firstName": "Baz",
        "groupsUrl": "<https://api.reach360.com/users/example-learner-3/groups>",
        "id": "example-learner-3",
        "lastName": "Learner",
				"lastActiveAt": "2021-10-28T20:39:52.659Z",
        "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-learner-3>",
        "role": "learner",
        "url": "<https://api.reach360.com/users/example-learner-3>"
   
      },
    ]
  },
  "apiVersion": " ",
  "webhookId": "example-webhook-id"
}

user.created

Uwaga: user.created zdarzenia będą opóźnione dla użytkowników SSO o 5-10 minut.

Uwaga: user.created zdarzenia NIE są uruchamiane dla użytkowników SAML, którzy zostali usunięci z Twojego IDP i dodani ponownie, chyba że zostaną również usunięci z konta Reach.

Wyzwalane po dodaniu użytkownika do konta Reach 360.

{
  "id": "example-user-created-event-id",
  "createdAt": "2020-08-24T01:36:18.982Z",
  "type": "user.created",
  "webhookId": "example-webhook-id",
  "apiVersion": "2023-04-04 ",
  "data": {
    "user": {
      "email": "foo@example.com",
      "firstName": "Example First Name",
      "groupsUrl": "<https://api.reach360.com/users/example-user-id/groups>",
      "id": "example-user-id",
      "lastName": "Example Last Name",
			"lastActiveAt": "2021-10-28T20:39:52.659Z",
      "learnerReportUrl": "<https://api.reach360.com/reports/learners/example-user-id>",
      "role": "learner",
      "url": "<https://api.reach360.com/users/example-user-id>"
      "articulate360User": false  
 
    }
  }
}

Weryfikacja żądań

Gdy webhook jest tworzony za pomocą plikusharedSecret, Reach 360 będzie zawierał X-Hook-Signature nagłówek w każdym żądaniu, umożliwiając weryfikację, że pochodzi z Reach. Aby obliczyć podpis, Reach używa skrótu heksadecymalnego HMAC-SHA1 z treścią i treścią żądania. sharedSecret 

Oto przykład tego, jak kod weryfikacji podpisu może wyglądać, jeśli używasz Node.js (Uwaga: szczegóły mogą się różnić w zależności od używanego frameworka, wersji węzła i innych czynników)

const crypto = require('crypto')

const signatureDigest = crypto.createHmac('sha1', process.env.WEBHOOK_SHARED_SECRET)
  .update(Buffer.from(JSON.stringify(request.body)))
  .digest('hex')

if (request.headers['x-hook-signature'] === signatureDigest) {
  // OK: request came from Reach
} else {
  // Error: request didn't come from Reach
}

Obsługa błędów i ponawianie prób

Reach 360 wyśle żądanie POST z danymi JSON do skonfigurowanego za targetUrl każdym razem, gdy wystąpi jedno ze skonfigurowanych. events Twój serwer potwierdza, że otrzymał ładunek, wysyłając odpowiedź 200. Każda odpowiedź poza zakresem 200 wskazuje na błąd. W takim przypadku Reach 360 ponownie spróbuje wysłać żądanie 14 razy w ciągu następnych 48 godzin.