Skip to main content

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.

rekomendacje

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.com/authorizecom (w instalacjach dedykowanych adres może być inny – ustawienie CHANNELS_URL serwera AMPER WS).

Usługa nie ma API HTTP. Cała komunikacja odbywa się przez połączenie Socket.IO.

Przestrzenie (namespaces)

PrzestrzeńPrzeznaczenieZdarzenia
/documentzamówienia i magazynnew-order, adding-an-item, item-stock-movement
/kb-feedściana / baza wiedzynew-post, new-comment, new-reaction
/amper-livepowiadomienia dla jednego użytkownika sklepuproduct-recommendations, item-applied-promotion
/deliveryautomaty 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:

PoleOpis
tokentoken dostępowy (JWT) zalogowanego użytkownika AMPER – ten sam, którego aplikacja używa w zapytaniach do AMPER WS
amperCompanyAssignedidentyfikator 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ójCo w nim trafia
/document<firma>:new-ordersnowe zamówienia
/document<firma>:stock:location:<id magazynu>zmiany stanów w magazynie
/kb-feed<firma>:kb-wallposty, 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:

  1. notifying every user of given channel (msg, b2b, admin, etc.),
  2. notifiyng every channel that a given keycloak user is using,
  3. 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.