API për zhvilluesit
Përditësuar më 13.11.2026
Me API-në e Replivo e lidhni chat-in me sistemin tuaj të punës (backoffice, CRM): merrni mesazhet e vizitorëve sapo shkruhen dhe u përgjigjeni nga programi juaj. Përgjigjja i shfaqet vizitorit në dritaren e chat-it, njësoj si nga paneli.
Si funksionon
- Krijoni një çelës API te Cilësimet → API dhe integrime.
- Vendosni adresën e webhook-ut tuaj: Replivo i dërgon aty çdo mesazh të ri të vizitorit.
- Përgjigjuni duke thirrur API-në me çelësin tuaj.
- Dërgoni rregullisht sinjalin e pranisë, që widget-i t'ju tregojë online.
Autentikimi
Çdo kërkesë mban çelësin në kokën Authorization. Çelësi është sekret: përdoreni vetëm nga serveri juaj, kurrë nga kodi i një faqeje web. Një çelës i hequr ndalon së punuari brenda një minute.
Authorization: Bearer rpl_…
Adresa bazë: https://developer.replivochat.com/api/v1
Përgjigjet janë JSON: të dhënat te fusha data, gabimet te fusha error me code dhe message.
curl https://developer.replivochat.com/api/v1/me \ -H "Authorization: Bearer rpl_…"
Pikat e hyrjes
Llogaria
| Metoda | Shtegu | Çfarë bën |
|---|---|---|
| GET | /me | Biznesi dhe çelësi. E mirë për të provuar çelësin. |
| GET | /sites | Faqet web: domain-et, cilësimet e widget-it, orari i punës, nëse widget-i është parë i instaluar. |
| GET | /agents | Anëtarët e ekipit, rolet dhe kush është online. |
| GET | /replies | Përgjigjet e gatshme (shkurtesa dhe teksti). |
Bisedat
| Metoda | Shtegu | Çfarë bën |
|---|---|---|
| GET | /conversations | Lista. status: active (parazgjedhje), open, assigned, closed. limit deri në 100; before për faqen tjetër. |
| GET | /conversations/{id} | Një bisedë, me kohën kur secila palë e ka lexuar. |
| POST | /conversations/{id}/assign | E cakton te një agjent (agentId nga /agents), ose te ky integrim kur agentId mungon. |
| POST | /conversations/{id}/unassign | E kthen në radhë. |
| POST | /conversations/{id}/close | Mbyll bisedën. |
| POST | /conversations/{id}/reopen | Rihap një bisedë të mbyllur. |
| POST | /conversations/{id}/read | I shënon mesazhet si të lexuara: vizitori sheh “Parë”. |
| POST | /conversations/{id}/typing | Shfaq “po shkruan…” te vizitori për 8 sekonda. Trupi: typing, opsionale agentName. |
Mesazhet
| Metoda | Shtegu | Çfarë bën |
|---|---|---|
| GET | /conversations/{id}/messages | Mesazhet. after (datë ISO) kthen vetëm më të rejat; limit deri në 200. |
| POST | /conversations/{id}/messages | Dërgon një përgjigje. Trupi: text, opsionale agentName. |
| POST | /conversations/{id}/files | Dërgon një skedar deri në 5 MB. Trupi: name, contentType, dataBase64, opsionale text. |
| GET | /conversations/{id}/notes | Shënimet e brendshme. |
| POST | /conversations/{id}/notes | Shton një shënim të brendshëm, që vizitori nuk e sheh. Trupi: text, opsionale author. |
Vizitorët, tiketat, statistikat
| Metoda | Shtegu | Çfarë bën |
|---|---|---|
| GET | /visitors | Kush është në faqe tani dhe çfarë faqeje po sheh. |
| GET | /tickets | Mesazhet offline. status: open ose resolved. |
| POST | /tickets/{id}/resolve | E shënon tiketën si të zgjidhur. /reopen e rihap. |
| GET | /stats?days=7 | Biseda, mesazhe, koha mesatare e përgjigjes dhe vlerësimet, sipas ditës dhe agjentit (deri në 90 ditë). |
Prania dhe webhooks
| Metoda | Shtegu | Çfarë bën |
|---|---|---|
| PUT | /presence | Ju tregon online në widget. Trupi: online, ttlSeconds (30–600, parazgjedhje 120). |
| GET | /webhooks/deliveries | Regjistri i dërgimeve. status: delivered, pending ose failed. |
| POST | /webhooks/deliveries/{id}/retry | E ridërgon një njoftim tani. |
Shembull: përgjigje te një vizitor
curl -X POST https://developer.replivochat.com/api/v1/conversations/CONVERSATION_ID/messages \
-H "Authorization: Bearer rpl_…" \
-H "Content-Type: application/json" \
-d '{"text": "Po, e kemi në stok.", "agentName": "Arta"}'Dërgimi i një skedari (përmbajtja e koduar në base64)
curl -X POST https://developer.replivochat.com/api/v1/conversations/CONVERSATION_ID/files \
-H "Authorization: Bearer rpl_…" \
-H "Content-Type: application/json" \
-d '{"name": "oferta.pdf", "contentType": "application/pdf", "dataBase64": "JVBERi0xLjQK…"}'Prania
Widget-i tregon “Online” vetëm kur dikush mund të përgjigjet. Nëse përgjigjeni vetëm nga sistemi juaj, thirreni këtë rregullisht (p.sh. çdo minutë) sa kohë operatorët tuaj janë në punë. Kur sinjali ndalon, widget-i kalon vetë në formularin e mesazheve pasi mbaron afati.
curl -X PUT https://developer.replivochat.com/api/v1/presence \
-H "Authorization: Bearer rpl_…" \
-H "Content-Type: application/json" \
-d '{"online": true, "ttlSeconds": 120}'Webhooks
Vendosni adresën te Cilësimet → Biznesi → Webhook URL. Duhet të jetë https. Replivo dërgon një kërkesë POST për çdo ngjarje:
message.created | Një mesazh i ri në bisedë. Fusha from është visitor ose agent (edhe përgjigjet tuaja nga API vijnë këtu). |
conversation.started | Nisi një bisedë e re. |
conversation.assigned | Biseda u mor ose iu caktua dikujt. |
conversation.closed | Biseda u mbyll. |
conversation.reopened | Biseda u rihap, nga ekipi ose sepse vizitori shkroi përsëri. |
conversation.rated | Vizitori e vlerësoi bisedën (1–5). |
ticket.created | Një vizitor la një mesazh offline. |
ticket.resolved | Një tiketë u shënua e zgjidhur (ticket.reopened kur rihapet). |
ping | Ngjarje prove, e dërguar nga butoni te Cilësimet. |
Shembull i trupit për message.created
{
"id": "0b1f…",
"event": "message.created",
"workspaceId": "…",
"createdAt": "2026-11-13T17:40:00.000Z",
"data": {
"conversationId": "…",
"messageId": "…",
"siteId": "…",
"from": "visitor",
"text": "A e keni produktin në stok?",
"attachments": [],
"visitor": { "id": "…", "name": "Besa", "email": "besa@example.com" },
"createdAt": "2026-11-13T17:40:00.000Z"
}
}Verifikimi i nënshkrimit
Krijoni një sekret nënshkrimi te Cilësimet → API dhe integrime. Çdo kërkesë mban atëherë kokën X-Replivo-Signature me kohën t dhe nënshkrimin v1 = HMAC-SHA256 i vargut “t.trupi” me sekretin tuaj. Refuzoni kërkesat me nënshkrim të gabuar ose me kohë më të vjetër se pesë minuta.
// Node.js (Express): use the raw request body, not the parsed JSON
const crypto = require("crypto");
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
const expected = crypto.createHmac("sha256", secret).update(parts.t + "." + rawBody).digest("hex");
return expected.length === parts.v1.length &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}Për t'u ditur
- Çdo njoftim dërgohet menjëherë. Përgjigjuni brenda 5 sekondash me një kod 2xx; përndryshe ridërgohet pas 1 minute, 5 minutash, 30 minutash, 2 orësh dhe 12 orësh, pastaj shënohet i dështuar.
- Fusha id është e njëjtë në çdo ridërgim: përdoreni për të mos e përpunuar të njëjtën ngjarje dy herë.
- Regjistri i dërgimeve duket te Cilësimet dhe te /webhooks/deliveries, dhe mbahet rreth 7 ditë.
- Kufiri është rreth 240 kërkesa në minutë për çelës. Mbi të kthehet 429.
- Përgjigjja në një bisedë të mbyllur kthen 409: rihapeni më parë.
- Përgjigjja e parë nga API e merr bisedën, njësoj si në panel.
Kodet e gabimeve
400 invalid_request | 401 unauthorized | 403 suspended |
404 not_found | 409 conversation_closed | 429 rate_limited |
Për pyetje teknike na shkruani në info@replivochat.com.