API për zhvilluesit

Përditësuar më 13.11.2026

Shkarko si PDF

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

  1. Krijoni një çelës API te Cilësimet → API dhe integrime.
  2. Vendosni adresën e webhook-ut tuaj: Replivo i dërgon aty çdo mesazh të ri të vizitorit.
  3. Përgjigjuni duke thirrur API-në me çelësin tuaj.
  4. 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

MetodaShteguÇfarë bën
GET/meBiznesi dhe çelësi. E mirë për të provuar çelësin.
GET/sitesFaqet web: domain-et, cilësimet e widget-it, orari i punës, nëse widget-i është parë i instaluar.
GET/agentsAnëtarët e ekipit, rolet dhe kush është online.
GET/repliesPërgjigjet e gatshme (shkurtesa dhe teksti).

Bisedat

MetodaShteguÇfarë bën
GET/conversationsLista. 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}/assignE cakton te një agjent (agentId nga /agents), ose te ky integrim kur agentId mungon.
POST/conversations/{id}/unassignE kthen në radhë.
POST/conversations/{id}/closeMbyll bisedën.
POST/conversations/{id}/reopenRihap një bisedë të mbyllur.
POST/conversations/{id}/readI shënon mesazhet si të lexuara: vizitori sheh “Parë”.
POST/conversations/{id}/typingShfaq “po shkruan…” te vizitori për 8 sekonda. Trupi: typing, opsionale agentName.

Mesazhet

MetodaShteguÇfarë bën
GET/conversations/{id}/messagesMesazhet. after (datë ISO) kthen vetëm më të rejat; limit deri në 200.
POST/conversations/{id}/messagesDërgon një përgjigje. Trupi: text, opsionale agentName.
POST/conversations/{id}/filesDërgon një skedar deri në 5 MB. Trupi: name, contentType, dataBase64, opsionale text.
GET/conversations/{id}/notesShënimet e brendshme.
POST/conversations/{id}/notesShton një shënim të brendshëm, që vizitori nuk e sheh. Trupi: text, opsionale author.

Vizitorët, tiketat, statistikat

MetodaShteguÇfarë bën
GET/visitorsKush është në faqe tani dhe çfarë faqeje po sheh.
GET/ticketsMesazhet offline. status: open ose resolved.
POST/tickets/{id}/resolveE shënon tiketën si të zgjidhur. /reopen e rihap.
GET/stats?days=7Biseda, mesazhe, koha mesatare e përgjigjes dhe vlerësimet, sipas ditës dhe agjentit (deri në 90 ditë).

Prania dhe webhooks

MetodaShteguÇfarë bën
PUT/presenceJu tregon online në widget. Trupi: online, ttlSeconds (30–600, parazgjedhje 120).
GET/webhooks/deliveriesRegjistri i dërgimeve. status: delivered, pending ose failed.
POST/webhooks/deliveries/{id}/retryE 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.createdNjë mesazh i ri në bisedë. Fusha from është visitor ose agent (edhe përgjigjet tuaja nga API vijnë këtu).
conversation.startedNisi një bisedë e re.
conversation.assignedBiseda u mor ose iu caktua dikujt.
conversation.closedBiseda u mbyll.
conversation.reopenedBiseda u rihap, nga ekipi ose sepse vizitori shkroi përsëri.
conversation.ratedVizitori e vlerësoi bisedën (1–5).
ticket.createdNjë vizitor la një mesazh offline.
ticket.resolvedNjë tiketë u shënua e zgjidhur (ticket.reopened kur rihapet).
pingNgjarje 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

Kodet e gabimeve

400 invalid_request401 unauthorized403 suspended
404 not_found409 conversation_closed429 rate_limited

Për pyetje teknike na shkruani në info@replivochat.com.