Prodavnice i lokacije
Vaša aplikacija može da zabeleži kad je kupac u nekoj od vaših prodavnica. Telefon šalje svoj položaj, mi nalazimo najbližu aktivnu prodavnicu, i ako je kupac dovoljno blizu, počinje poseta. Posete mogu da donose nagrade kroz automatizacije koje podesite u Admin-u.
Ko ih poziva#
Svaki poziv ovde traži token sesije prijavljenog kupca u Authorization: Bearer i odnosi se samo na tog kupca; pogledajte Sesije i prijavu. Kupac ima najviše jednu otvorenu posetu u isto vreme.
Kako se poseta vezuje za prodavnicu#
- Uzimamo najbližu aktivnu prodavnicu koja ima koordinate. Kupac mora biti na najviše 150 metara od nje, osim ako je vaša aplikacija podešena na drugi poluprečnik.
- Položaj mora biti dovoljno precizan:
accuracylošija od 100 metara se odbija, osim ako je vaša aplikacija drugačije podešena. Pre prijave posete tražite od telefona precizan položaj. - Kad je kupac predaleko, greška navodi najbližu prodavnicu i udaljenost, pa aplikacija može da kaže, na primer, da je kupac 300 metara od prodavnice u Novom Sadu.
- Aplikacija bez ijedne aktivne prodavnice sa koordinatama beleži posetu u svojoj podrazumevanoj prodavnici, gde god da je kupac. Upišite koordinate prodavnica u Admin-u.
Objekat posete#
| Polje | Opis |
|---|---|
| idinteger | Naš id posete. |
| app_location_id, app_location_name | Prodavnica. |
| entry_timedatetime · ISO 8601, UTC | Kad je poseta počela. |
| leaving_timedatetime · može biti null | Kad se završila. null dok je otvorena. |
| duration_minutesinteger · može biti null | Koliko je trajala, kad se završi. |
| customer_id, data_part, time_part | Kupac. |
Prijava, odlazak, lista poseta#
POST
/api/v2/customer/attendance
| Poziv | Opis |
|---|---|
| POST /customer/attendance | Počinje posetu. Telo: latitude (−90 do 90), longitude (−180 do 180) i accuracy u metrima, sve obavezni brojevi. Vraća data.visit i data.visits_this_month, broj poseta kupca u tekućem mesecu. |
| POST /customer/attendance/leave | Završava otvorenu posetu. Vraća data.visit sa njenim leaving_time. |
| GET /customer/attendances | Posete kupca, najnovije prve, u data.visits, i otvorenu u data.active ili null. Opciono from i until kao YYYY-MM-DD; podrazumevano tekući mesec do danas, najviše 366 dana. |
Greške
Sve su 422, sa ključem u errors.AttendanceLogs i detaljima u errors.fields.
| Ključ | Kada |
|---|---|
| API.AttendanceLogs.CustomerRequired | Sesija nema kupca. |
| API.AttendanceLogs.PositionRequired | Koordinata nedostaje ili je van opsega. |
| API.AttendanceLogs.Inaccurate | Položaj nije dovoljno precizan. fields: accuracy_m, max_accuracy_m. |
| API.AttendanceLogs.OutOfRange | Nijedna prodavnica nije dovoljno blizu. fields: distance_m, radius_m, i app_location_id, app_location_name, latitude i longitude najbliže prodavnice. |
| API.AttendanceLogs.NoLocation | Aplikacija nema prodavnicu u kojoj bi zabeležila posetu. |
| API.AttendanceLogs.AlreadyActive | Poseta je već otvorena. fields.visit je ta poseta. |
| API.AttendanceLogs.NotActive | Odlazak je pozvan bez otvorene posete. |
| API.AttendanceLogs.InvalidPeriod | Opseg from–until nije ispravan ili je duži od 366 dana. |
POST/customer/attendance
curl -X POST "https://api.morffeus.com/api/v2/customer/attendance" \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "latitude": 45.2551, "longitude": 19.8452, "accuracy": 12 }'
Odgovor200 OK
{
"data": {
"visit": {
"id": 7712,
"app_location_id": 31,
"app_location_name": "Novi Sad centre",
"entry_time": "2026-10-01T10:15:00",
"leaving_time": null,
"duration_minutes": null,
…
},
"visits_this_month": 3
}
}
Greška422 Unprocessable Entity
{
"errors": {
"AttendanceLogs": ["API.AttendanceLogs.OutOfRange"],
"fields": {
"code": "API.AttendanceLogs.OutOfRange",
"distance_m": 312,
"radius_m": 150,
"app_location_name": "Novi Sad centre",
…
}
}
}
Povezano#
- Sesije i prijava: token sesije koji ovi pozivi nose.
- Lokacije: kako vaši sistemi šalju prodavnice i njihove koordinate.
Poslednja izmena 1. oktobra 2026. · API v2
Nešto nije u redu na ovoj stranici?