{"product_id":"helpdesk-support-pro","title":"Helpdesk Support Pro","description":"\u003cdiv class=\"hero\"\u003e\n\u003ch1\u003eHelpdesk Support Pro\u003c\/h1\u003e\n\u003cp\u003eA complete help desk on top of Dolibarr's ticket, and the share of the tickets its figures describe\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch2\u003eFeatures\u003c\/h2\u003e\n\u003cdiv class=\"grid\"\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eOn top of Dolibarr's ticket, not beside it\u003c\/b\u003e\u003cbr\u003eDolibarr already has a ticket. This module\u003cspan\u003e \u003c\/span\u003e\u003cb\u003edoes not create a second one\u003c\/b\u003e:\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ellx_ticket\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003estays the ticket of record and the module carries only the layer it lacks — team, stage, commitment, clock, billable time, satisfaction. A ticket created by any Dolibarr route is picked up automatically. And when the Ticket module is switched off the screens\u003cspan\u003e \u003c\/span\u003e\u003cb\u003esay so\u003c\/b\u003e: seven dashboards of zeroes would read as a quiet week, which is an entirely different statement.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eA public web portal, with no account\u003c\/b\u003e\u003cbr\u003eThe customer files a request from a public page — type, subject, priority, description, attachment — and receives a\u003cspan\u003e \u003c\/span\u003e\u003cb\u003etracking code\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003ethey can read over the telephone: the alphabet excludes every glyph that gets confused, no O or 0, no I or 1. They then follow the progress and reply in the thread. An attachment is checked on its extension\u003cspan\u003e \u003c\/span\u003e\u003ci\u003eand\u003c\/i\u003e\u003cspan\u003e \u003c\/span\u003eits size, both configurable, and stored\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eoutside the web root\u003c\/b\u003e. A wrong code answers exactly like an unknown one: anything else turns the lookup into an oracle.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eCommitments counted in open hours, not in clock hours\u003c\/b\u003e\u003cbr\u003eA ticket raised on\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eFriday at 18:00\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eagainst a four-hour target\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eis not late on Monday at 09:00\u003c\/b\u003e. The clock walks the team's calendar — opening slots, Saturday duty, public holidays — and counts only the hours the team is reachable. The function that adds open hours and the one that computes the deadline are\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eexact inverses\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eof each other; the REST API publishes that arithmetic itself, so an integrator who disputes a delay can make the module show its working instead of guessing at it.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eThree promises per ticket, and one clock for each\u003c\/b\u003e\u003cbr\u003e\u003cb\u003eFirst reply\u003c\/b\u003e: stopped by the first message addressed to the customer — an internal note has answered nobody.\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eResolution\u003c\/b\u003e: stopped at the resolution.\u003cspan\u003e \u003c\/span\u003e\u003cb\u003ePeriodic update\u003c\/b\u003e: counted from\u003cspan\u003e \u003c\/span\u003e\u003cb\u003ethe last thing the customer was told\u003c\/b\u003e, not from the opening; measured from the opening it would be broken by definition on the fourth day of any ticket, however well it is handled. A clock that has not stopped is\u003cspan\u003e \u003c\/span\u003e\u003cb\u003enever\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003ecounted as met: it is running. Counting otherwise turns an untouched backlog into a hundred per cent compliance.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eThe pause while waiting for the customer, read from the thread\u003c\/b\u003e\u003cbr\u003eWhen the agent asks a question the promise is suspended; when the customer answers it resumes. Those pauses are read back\u003cspan\u003e \u003c\/span\u003e\u003cb\u003efrom the message history\u003c\/b\u003e, not from the ticket's current state: the current state knows only the latest wait, and a ticket that waited three times would keep one. The choice is per policy, and the customer's answer ends the wait — otherwise every clock on that ticket would stay paused for ever.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eEscalation on three levels, once and not every hour\u003c\/b\u003e\u003cbr\u003eA breached clock rises to level 1, level 2 or management according to the overrun, to the manager of the team concerned. An escalation already raised is\u003cspan\u003e \u003c\/span\u003e\u003cb\u003enot raised again every hour\u003c\/b\u003e: that is how an inbox learns to ignore a module. Each escalation keeps the clock that caused it, the overrun observed and the moment it was acknowledged.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eWhat the figures do not cover, named rather than buried\u003c\/b\u003e\u003cbr\u003eA ticket with no team, no policy, no working calendar or with contradictory dates has\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eno promise\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eto be compared against. It is therefore not counted as having met its commitment: it is left out of the measurement, its reason is named, the Dolibarr field to correct is printed, and\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eevery indicator snapshot  \u003c\/b\u003e\u003cb\u003epublishes the share of the tickets its figures actually describe\u003c\/b\u003e. A compliance rate read without that share is an opinion: a hundred per cent over eleven tickets out of ninety is not a good week.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eTime recorded, and the three things billing tends to confuse\u003c\/b\u003e\u003cbr\u003eTime in and time out, the nature of the time, rounded to the chosen step and never below the minimum. The screen separates what billing happily merges: time that\u003cspan\u003e \u003c\/span\u003e\u003cb\u003ewill be invoiced\u003c\/b\u003e, time\u003cspan\u003e \u003c\/span\u003e\u003cb\u003egiven away\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003e— a deliberate decision — and time that\u003cspan\u003e \u003c\/span\u003e\u003cb\u003ecannot be invoiced yet\u003c\/b\u003e, because a rate or a customer is missing. The third is not filed with the second: it is counted apart, its reason is named and the field to fill is shown.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eA rate cascade whose order is written down\u003c\/b\u003e\u003cbr\u003eContract, then customer, then team, then agent. On a tie the priority column decides, then the narrowest date window —\u003cspan\u003e \u003c\/span\u003e\u003cb\u003enever the rowid\u003c\/b\u003e, which would make the price depend on the order the rules happened to be typed in. The billing screen shows the cascade in the order it applies and how many lines each level actually priced.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003ePrepaid hours drawn down as time is recorded, not when the invoice goes out\u003c\/b\u003e\u003cbr\u003eAn hour pack empties\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eas the time is entered\u003c\/b\u003e, not on the day the invoice leaves: that is the only way a customer knows what is left before they ring. Each pack carries its own warning threshold, and the matching rule fires when it is crossed. The lines to invoice become Dolibarr invoice lines from the ticket itself.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eSatisfaction, with the answer rate beside it\u003c\/b\u003e\u003cbr\u003eA survey goes out at closure and the score comes back onto the ticket, the agent and the team. The average is shown\u003cspan\u003e \u003c\/span\u003e\u003cb\u003ewith the answer rate\u003c\/b\u003e: an unanswered survey is not a neutral score, and an average of 4.6 over three answers for eighty closed tickets says nothing. Free comments are readable in the dashboard, the worst scores first.\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\u003cb\u003e\u003c\/b\u003e\u003c\/div\u003e\n\u003cdiv class=\"card\"\u003e\n\u003cb\u003eSeven dashboards, 58 reports, exports and an API\u003c\/b\u003e\u003cbr\u003eWorkload, commitments, satisfaction, time spent, teams, channels, knowledge base: seven screens, each with its indicators, its charts and its detail table. Fifty-eight reports in eight families, exportable as CSV, Excel, Word, PDF and JSON. Configurable alerts, mail templates, scheduled delivery, a knowledge base that is internal, portal or public with the tickets it prevented, canned responses, and a\u003cspan\u003e \u003c\/span\u003e\u003cb\u003e46-route REST API\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eof which one publishes the measurable share beside the compliance rate and another the open-hour arithmetic itself.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch2\u003e\u003c\/h2\u003e\n\u003ch2\u003eWhat the module does not do\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cb\u003eThe module modifies no native Dolibarr table.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eIt creates its own\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ellx_helpdesksupportpro_*\u003c\/code\u003e\u003cspan\u003e \u003c\/span\u003etables and plugs in through hooks and triggers. The ticket of record stays Dolibarr's.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eIt requires Dolibarr's Ticket module.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eWithout it there is nothing to measure, and the module says so on every screen rather than showing zeroes.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eIt does not correct your data.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eIt names what is missing and the Dolibarr field to put it in; the typing stays yours.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eIt does not send mail on your behalf.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eThe templates are provided and the delivery is scheduled, but the sending goes through your own Dolibarr mail configuration.\u003c\/li\u003e\n\u003cli\u003e\n\u003cb\u003eThe overdue count is computed for today only.\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eThe deadline a ticket carries is the one its live clock carries now, not the one it carried last month: counted for a past date it would be an invented figure, and the column says “not measured” instead.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003ePutting it to work\u003c\/h2\u003e\n\u003col\u003e\n\u003cli\u003eEnable Dolibarr's Ticket module if it is not already, then Helpdesk Support Pro. A complete demonstration set is already in place: six teams, three calendars, three service policies and thirteen months of real tickets, already measured.\u003c\/li\u003e\n\u003cli\u003eGrant the permissions to your groups. With no permission row the left-menu entries stay greyed out.\u003c\/li\u003e\n\u003cli\u003eDeclare your\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eworking calendars\u003c\/b\u003e: opening slots, on-call duty, public holidays. Every promise is measured against these and nothing else.\u003c\/li\u003e\n\u003cli\u003eCreate your\u003cspan\u003e \u003c\/span\u003e\u003cb\u003eservice policies\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eand their per-priority targets, then attach them to your teams — or to a ticket type, which wins over the team: a billing question and an outage do not promise the same thing.\u003c\/li\u003e\n\u003cli\u003eOpen the\u003cspan\u003e \u003c\/span\u003e\u003cb\u003epublic portal\u003c\/b\u003e\u003cspan\u003e \u003c\/span\u003eand put its address on your site or in your signature. Choose the team that receives the requests, the attachment formats accepted and their size.\u003c\/li\u003e\n\u003cli\u003eEnable the scheduled jobs if you want the clocks to advance by themselves, the escalations to go out and the daily snapshot to be taken. They ship disabled.\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003ch2\u003eTechnical summary\u003c\/h2\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eModule number\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e1768000\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eDolibarr\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e16 to 23\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003ePHP\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e7.1 to 8.4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eDepends on\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eTicket, Third parties\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eTables\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e39, prefix\u003cspan\u003e \u003c\/span\u003e\u003ccode\u003ellx_helpdesksupportpro_\u003c\/code\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eColumns\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e511\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003ePermissions\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e43 in 15 groups\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eConstants\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e31\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eScheduled jobs\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eDashboards\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e7\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eReports\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e58 in 8 families\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eREST API\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003e46 routes\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eExports\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eCSV, Excel, Word, PDF, JSON\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eLanguages\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eEnglish, French, German, Italian, Spanish\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003eService targets\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003efirst reply, resolution, periodic update\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cb\u003ePublic portal\u003c\/b\u003e\u003c\/td\u003e\n\u003ctd\u003eyes, no account, with a tracking code\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cdiv class=\"sig\"\u003eDeveloped by DoliResource\u003cbr\u003eCopyright © DoliResource\u003cbr\u003eWebsite :\u003cspan\u003e \u003c\/span\u003e\u003ca href=\"https:\/\/www.doliresource.com\"\u003ewww.doliresource.com\u003c\/a\u003e\n\u003c\/div\u003e","brand":"Dolibarr Resources","offers":[{"title":"Default Title","offer_id":54737835360574,"sku":null,"price":299.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0986\/4174\/0094\/files\/Image_IA_Canva_24_oct._2026_13_36_10.png?v=1792845411","url":"https:\/\/doliresource.com\/products\/helpdesk-support-pro","provider":"DoliResource","version":"1.0","type":"link"}