AMPER Channels – powiadomienia w czasie rzeczywistym
How
AMPER Channels to useusługa amper-channelspowiadomień microservicew czasie rzeczywistym, zbudowana na Socket.IO. Serwer AMPER WS publikuje w niej zdarzenia (websockets)nowe
Shortzamówienie, instructionruch howmagazynowy, tonowy implementpost communicationna withścianie, microservice.
Frontend
Each of the front service (admin, b2b, msf, etc.) should firstly requestproduktów), a websocketaplikacje authorizationAMPER token– through.panel administracyjny, sklep B2B, aplikacje mobilne – nasłuchują ich i odświeżają widok bez przeładowania.
GETAdres usługi: https://channels.ampli-solutions. (w instalacjach dedykowanych adres może być inny – ustawienie com/authorizecomCHANNELS_URL serwera AMPER WS).
Usługa nie ma API HTTP. Cała komunikacja odbywa się przez połączenie Socket.IO.
Przestrzenie (namespaces)
| Przestrzeń | Przeznaczenie | Zdarzenia |
|---|---|---|
/document |
zamówienia i magazyn | new-order, adding-an-item, item-stock-movement |
/kb-feed |
ściana / baza wiedzy | new-post, new-comment, new-reaction |
/amper-live |
powiadomienia dla jednego użytkownika sklepu | product-recommendations, item-applied-promotion |
/delivery |
automaty paczkowe (skrytki) | komunikacja z urządzeniami – poza zakresem tego artykułu |
Połączenie
Klient łączy się z wybraną przestrzenią i w danych uwierzytelniających (auth) przekazuje:
| Pole | Opis |
|---|---|
token |
token dostępowy (JWT) zalogowanego użytkownika AMPER – ten sam, którego aplikacja używa w zapytaniach do AMPER WS |
amperCompanyAssigned |
identyfikator instalacji AMPER – wartość pola amper-company-assigned z odpowiedzi logowania POST /auth/. Opcjonalne – bez niego instalacja jest ustalana z tokena |
Przykład (przeglądarka, pakiet socket.io-client w wersji 4):
Authorizationimport Header:{ Bearer TOKEN
replace TOKEN with WS token
Code implementation - package socket.io
<script src="/socket.io/socket.io.js"></script>
For all the other methods of including socket.io package} tofrom your'socket.io-client';
project, please refer to documentation:
client-api
After receiving a token, use it to get your websocket connection
const urlsocket = io('https://channels.ampli-solutions.com/'
const token = token received from "authorize" API
const keycloakID = 'your keycloak'
const channel = 'msf' (channel used by your project) (b2b, admin, msf, etc)
const socket = io(url,document', {
auth: {
token:token, keycloakID:keycloakID,accessToken, channel:channel// access_token z POST /auth/
amperCompanyAssigned: companyName, // amper-company-assigned z POST /auth/
},
});
socket.on('connect', () => {
// dołączenie do pokoju z nowymi zamówieniami instalacji
socket.emit('room', `${companyName}:new-orders`);
});
socket.on('hello', (message) => console.log(message)); // potwierdzenie dołączenia do pokoju
socket.on('new-order', (data) => {
console.log(data.title, data.message, data.url);
});
AddToken jest sprawdzany przy nawiązywaniu połączenia. Przy każdym ponownym łączeniu (np. po zerwaniu połączenia) przekaż aktualny, nieprzeterminowany token.
Pokoje
Zdarzenia trafiają do pokoi (rooms). Nazwa pokoju zaczyna się od identyfikatora instalacji (<firma> = amperCompanyAssigned), a klient może dołączyć tylko do pokoi własnej instalacji – zdarzeniem room z nazwą pokoju. Serwer potwierdza dołączenie zdarzeniem hello.
| Przestrzeń | Pokój | Co w nim trafia |
|---|---|---|
/document |
<firma>:new-orders |
nowe zamówienia |
/document |
<firma>:stock:location:<id magazynu> |
zmiany stanów w magazynie |
/kb-feed |
<firma>:kb-wall |
posty, komentarze i reakcje na ścianie |
/amper-live |
<firma>:user:<keycloak_id użytkownika> |
powiadomienia dla jednego użytkownika – klient dołącza do niego automatycznie przy połączeniu |
W przestrzeni /amper-live klient może dołączyć wyłącznie do własnego pokoju użytkownika – prośby o inne pokoje są ignorowane.
Zdarzenia
/document
notificationnew-order type– eventnowe listenerzamówienie tow your socket:
socket.on('notification', function(msg) {
//here goes your action code that runs after notification is received
(msg) - notification message object (string lub json)
})
Backend
You have 3 variants of notifications:
notifying every user of given channel (msg, b2b, admin, etc.),notifiyng every channel that a given keycloak user is using,notifying a single channel of given keycloak user
API Endpoint:
POST https://channels.ampli-solutions.com/notify
BODY:instalacji:
{ "API_KEY"title": "5b28dc2f-Nowe zamówienie", "message": "Klient ABC złożył zamówienie nr 12345", "url": "https://...-7fbb705907c5"," }
adding-an-item – produkt dodany do dokumentu sprzedaży (np. w punkcie sprzedaży) i item-stock-movement – zmiana stanu po imporcie stanów z ERP:
{ "product_id": 101, "quantity": 5.0, "location_id": 3 }
Oba zdarzenia trafiają do pokoju magazynu <firma>:stock:location:<location_id>.
/kb-feed
{ "post_id": 15 } //current apinew-post
key//Required{ "msg" post_id": string/json,15, "comment_id": 87 } //Required new-comment
{ "keycloak"post_id": 15, "reaction_id": 4, "comment_id": 87 } // new-reaction
Zdarzenia zawierają tylko identyfikatory – treść posta, komentarza lub reakcji aplikacja pobiera z AMPER WS.
/amper-live
item-applied-promotion – do produktu w koszyku użytkownika została zastosowana promocja:
{
"user_keycloak_id": "26259ede-....-9c58927efaae"",//keycloak of the target user for notification(variant 2 and 3)
"channel"cart_line_id": 5521,
"product": { "id": 101, "name": "msf"//(b2b,...", admin,"short_code": etc)//when"426684" you},
want"promotion": to{ use"id": variant999, 1"name": or"Letnia 2wyprzedaż", notification"description": "...", "default_image": null }
}
Summary:
Variant 1 requires only the channelproduct-recommendations variable– inrekomendacje theproduktów body,po Variantdodaniu 2:produktu onlydo keycloak
Variant 3: both channel and keycloakkoszyka:
{
"user_keycloak_id": "26259ede-...",
"added_product": { ... },
"recommendations": [ { ... }, { ... } ]
}
Produkty mają format listy produktów sklepu B2B.
Kto publikuje zdarzenia
Zdarzenia publikuje serwer AMPER WS, korzystając z własnego konta technicznego. Aplikacje klienckie tylko ich nasłuchują.
Po stronie serwera AMPER WS usługę włącza ustawienie AMPER_CHANNELS_ENABLED.