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 zdarzeniacreatedAt(string) - czas, w którym doszło do zdarzeniatype(string) - typ zdarzenia webhookwebhookId(string) - identyfikator webhook, który spowodował wysłanie zdarzeniaapiVersion(string) - Wersja API używana podczas wysyłania zdarzenia webhook. Zostanie również wysłany jakoAPI-Versionnagłówek w żądaniudata(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:
- kurs (obiekt) - obiekt kursu dla powiązanego kursu lub
nulljeśli zapisy dotyczą ścieżki uczenia się. - LearningPath (obiekt) - obiekt ścieżki uczenia się dla powiązanej ścieżki uczenia się lub
nulljeśli zapisy dotyczą kursu. - EnrolledBy (object) - Obiekt użytkownika, który utworzył zapisy lub
nulljeśli rejestracja została utworzona za pomocą interfejsu API rejestracji kursu lub interfejsu API rejestracji ścieżki szkoleniowej. - groups (lista obiektów) - Lista zarejestrowanych obiektów grupy (może być pusta).
- users (lista obiektów) - Lista zarejestrowanych obiektów użytkownika (może być pusta).
{ "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.