Pasi clari.
- Zi de zi Membrii echipei stiu imediat urmatorul pas.
- Operational Mai putine cazuri raman blocate in inbox.
- Business Mai putine escaladari publice si incredere mai mare in brand.
Echipele nu pierd clienti dintr-o singura reclamatie. Ii pierd cand cazurile raman blocate, nu este clar cine raspunde, iar clientul primeste raspuns tarziu.
SolveClaims rezolva exact asta: flux strict, owner clar, timp vizibil pe fiecare etapa, ca echipa sa livreze mai repede fara sa sacrifice calitatea.
Onboarding-ul este scurt si sigur. Ordinea pasilor este fixa, ca sa validam corect identitatea si datele companiei.
Dupa trimitere, organizatia intra in PENDING_APPROVAL. Accesul final vine dupa validare.
O echipa de retail termina tot onboarding-ul intr-o singura sesiune, apoi invita agentii dupa aprobare.
Owner-ul finalizeaza onboarding-ul, iar conturile admin se creeaza ulterior, dupa stabilirea responsabilitatilor interne.
In Dashboard -> Settings, owner-ul configureaza regulile de lucru ale echipei.
Rolurile exista ca deciziile sa fie clare si sa evitam actiuni gresite.
| Rol | Responsabilitate principala | Actiuni uzuale |
|---|---|---|
| Owner | Control business si guvernanta | Aprobari, politici, API keys, reguli de echipa |
| Admin | Coordonare zilnica | Aprobari, monitorizare, distribuire munca, deblocare cazuri |
| Agent | Executie | Preia cazuri, scrie propuneri, inchide rezolvari |
| Collaborator | Suport punctual | Ajuta pe cazurile unde are vizibilitate |
| Member | Participare limitata | Executa taskuri in zona lui de responsabilitate |
Acesta este traseul operational al unei reclamatii.
| Status | Ce inseamna | Ce urmeaza |
|---|---|---|
NEW |
Reclamatie noua, inca nepreluata | Agent/Admin/Owner o preia |
IN_PROGRESS |
Se lucreaza activ pe caz | Clasificare cu taguri, propunere, pas urmator |
WAITING_FOR_APPROVAL |
Asteapta decizie interna | Admin/Owner aproba sau retrimite la ajustare |
WAITING_CLIENT_SIGNATURE |
Propunerea este la client | Clientul confirma sau cazul se inchide pe timeout |
PROCESSING_SOLUTION |
Clientul a confirmat | Echipa implementeaza solutia promisa |
SOLVED |
Implementare finalizata | Caz rezolvat operational |
CLOSED |
Inchis fara confirmare client | Owner/Admin poate redeschide la IN_PROGRESS |
Actiunile sunt gandite pe pasi. Nu sarim etape.
NEW in IN_PROGRESS.
IN_PROGRESS in WAITING_FOR_APPROVAL.
WAITING_CLIENT_SIGNATURE.
PROCESSING_SOLUTION.
PROCESSING_SOLUTION in SOLVED.
WAITING_CLIENT_SIGNATURE sunt controlate de sistem,
pentru consistenta si audit.
Aceste functionalitati sunt folosite cel mai des pentru un flux sanatos de reclamatii.
Taskurile transforma discutiile lungi in pasi concreti cu owner si termen.
NEW, taskurile sunt blocate (triage lock).
"Colecteaza formularul semnat pana la 16:00", alocat specialistului logistic.
"Emite rambursarea partiala si ataseaza dovada", cu termen si owner clar.
SLA este politica de timp. Pune tinte clare pe fiecare etapa.
| Etapa SLA | Status unde se masoara | Semnificatie operationala |
|---|---|---|
| First response SLA | NEW |
Cat de repede este preluata o reclamatie noua |
| Classification SLA | IN_PROGRESS |
Cat de repede pui tagurile obligatorii dupa preluare |
| Approval SLA | WAITING_FOR_APPROVAL |
Cat de repede vine decizia interna |
| Client response SLA | WAITING_CLIENT_SIGNATURE |
Cat timp are clientul la dispozitie sa raspunda |
| Resolution SLA | PROCESSING_SOLUTION |
Cat de repede executa echipa dupa acceptarea clientului |
Daca first response SLA este 2h si cazul apare la 10:00, preluarea trebuie facuta pana la 12:00 ca sa ramai in verde.
Folosesti coverage transfer cand un coleg este indisponibil (concediu planificat sau absenta neasteptata), astfel incat cazurile active sa continue fara risc SLA.
Banda API este pentru echipele care vor sa importe reclamatii din site-uri sau aplicatii externe.
Endpoint-ul principal din aceasta documentatie: POST https://app.solve.claims/api/v1/ingest.
app.solve.claims cu rol Owner.Dashboard -> Settings -> API Keys.Endpoint: POST https://app.solve.claims/api/v1/ingest
Headers:
Content-Type: application/json
x-api-key: sc_live_...
Exemplu body:
{
"clientName": "Jane Doe",
"clientEmail": "jane@example.com",
"clientPhone": "+40 700 000 000",
"reference": "ORDER-1001",
"description": "Complaint details",
"files": [
{
"name": "invoice.pdf",
"type": "application/pdf",
"size": 245760
}
]
}
image/jpeg, image/png, image/webp, application/pdf429 Too Many Requests; respecta Retry-AftercomplaintId + uploads[] cu signed URL-uri.PUT pe URL-urile primite.{
"success": true,
"complaintId": "cm123...",
"uploads": [
{
"fileName": "invoice.pdf",
"fileType": "application/pdf",
"uploadUrl": "https://...signed-url..."
}
]
}
INGEST_ALLOWED_ORIGINS.429.PENDING: scanare in curs, download blocat.CLEAN: download permis.MALICIOUS: carantina.FAILED: blocat pana la remediere.stored_gb = complaints_per_month * avg_files_per_complaint * avg_file_size_mb / 1024
storage_cost = stored_gb * storage_rate_per_gb
put_cost = (total_upload_requests / 1000) * put_rate
get_cost = (total_download_requests / 1000) * get_rate
import express from "express";
import fetch from "node-fetch";
const app = express();
app.use(express.json({ limit: "2mb" }));
app.post("/api/complaints/submit", async (req, res) => {
const payload = {
clientName: req.body.clientName,
clientEmail: req.body.clientEmail || "",
clientPhone: req.body.clientPhone || "",
reference: req.body.reference || "",
description: req.body.description,
files: req.body.files || []
};
const ingestResponse = await fetch("https://app.solve.claims/api/v1/ingest", {
method: "POST",
headers: {
"content-type": "application/json",
"x-api-key": process.env.SOLVECLAIMS_API_KEY
},
body: JSON.stringify(payload)
});
const ingestData = await ingestResponse.json();
if (!ingestResponse.ok) {
return res.status(ingestResponse.status).json(ingestData);
}
return res.json(ingestData);
});
add_action('admin_post_nopriv_sc_submit_complaint', 'sc_submit_complaint');
add_action('admin_post_sc_submit_complaint', 'sc_submit_complaint');
function sc_submit_complaint() {
$payload = array(
'clientName' => sanitize_text_field($_POST['clientName'] ?? ''),
'clientEmail' => sanitize_email($_POST['clientEmail'] ?? ''),
'reference' => sanitize_text_field($_POST['reference'] ?? ''),
'description' => sanitize_textarea_field($_POST['description'] ?? ''),
'files' => array(),
);
$response = wp_remote_post('https://app.solve.claims/api/v1/ingest', array(
'headers' => array(
'Content-Type' => 'application/json',
'x-api-key' => getenv('SOLVECLAIMS_API_KEY'),
),
'body' => wp_json_encode($payload),
'timeout' => 20,
));
wp_redirect(home_url('/complaint-thank-you/'));
exit;
}
<?php
$payload = [
"clientName" => $_POST["clientName"],
"clientEmail" => $_POST["clientEmail"] ?? "",
"reference" => $_POST["reference"] ?? "",
"description" => $_POST["description"],
"files" => []
];
$ch = curl_init("https://app.solve.claims/api/v1/ingest");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"x-api-key: " . getenv("SOLVECLAIMS_API_KEY")
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
?>
Tehnic se poate, dar expui API key-ul. In productie, recomandarea este relay server-side.
Nu. Politica ingest permite doar JPEG, PNG, WEBP si PDF.
Apar in Dashboard -> Claims cu status NEW si intra in fluxul standard.
Comentarii si mention fara zgomot
Comentariile sunt separate dupa scopul comunicarii.
Reguli mention (pe inteles simplu)
CLIENT_MESSAGE.