{"id":67952,"date":"2026-05-19T07:28:00","date_gmt":"2026-05-19T04:28:00","guid":{"rendered":"https:\/\/kavkom.com\/useful-information\/call-to-ticket-workflow-set-up-a-reliable-flow-to-create-route-and-trace-each-request-without-duplicates\/"},"modified":"2026-05-20T19:20:42","modified_gmt":"2026-05-20T16:20:42","slug":"call-to-ticket-workflow-set-up-a-reliable-flow-to-create-route-and-trace-each-request-without-duplicates","status":"publish","type":"post","link":"https:\/\/kavkom.com\/en\/articles\/telephony\/call-to-ticket-workflow-set-up-a-reliable-flow-to-create-route-and-trace-each-request-without-duplicates\/","title":{"rendered":"Call-to-ticket workflow: set up a reliable flow to create, route and trace each request without duplicates"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A call ends, the agent hangs up, and the request disappears. No trace, no follow-up, no ticket. The customer calls back two days later, no one knows what he&#8217;s talking about.  <\/p>\n\n<p class=\"wp-block-paragraph\">This is the problem faced by most support teams who manage their calls without a structured <strong>call-to-ticket workflow<\/strong>: the conversation exists, but the action that should result from it is nowhere to be found. Between untracked missed calls, double manual entry between VoIP telephony and the helpdesk, and misallocated requests due to a lack of clear routing rules, follow-up deteriorates without anyone knowing exactly where the problem lies. <\/p>\n\n<p class=\"wp-block-paragraph\">This guide shows you how to set up a reliable workflow, from the call event to the ticket in your helpdesk, with the right triggers, the right fields to inject automatically, and safeguards to avoid duplicates right from the start.<\/p>\n\n<h2 class=\"wp-block-heading\">When should a call trigger a support ticket?<\/h2>\n\n<p class=\"wp-block-paragraph\">Not every call deserves a ticket. A customer calling to confirm a schedule, a supplier checking a delivery address: creating a ticket for every ring means drowning your helpdesk in noise. And yet, some calls disappear after the hang-up when they should have triggered a follow-up. This is where the <strong>call-to-ticket workflow<\/strong> comes into its own: it&#8217;s not about automating everything, it&#8217;s about automating just that.   <\/p>\n\n<p class=\"wp-block-paragraph\">Here are the situations where automatic ticket creation brings real value.<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Missed calls and out-of-hours calls.<\/strong>  A prospect calls back at 7:30 p.m., but no one picks up. Without a ticket, this request no longer exists the next morning. With a trigger on the<strong>missed call to ticket<\/strong>, the agent finds the request in his queue as soon as he arrives, with the number, time and duration of the attempt.  <\/li>\n\n\n\n<li><strong>Complex after-sales requests.<\/strong>  The customer describes a technical problem during the call, but the resolution takes three days and involves two departments. A simple call log is not enough: you need a ticket with a status, an assignment and an exchange history that can be consulted by all the agents concerned. <\/li>\n\n\n\n<li><strong>Unsuccessful transfers between departments.<\/strong>  The caller is redirected to the technical department, but the line rings in a vacuum. Without an automatic ticket at this point, the request falls between two stools. <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">And this is where you need to distinguish between two things that many people confuse: the <strong>call log<\/strong> and the actionable ticket. The log records that a call has taken place (duration, agent, number). The ticket, on the other hand, records an action: a person in charge, a deadline, an evolving status. Kavkom logs each call with its metadata in its <a href=\"https:\/\/kavkom.com\/en\/team\/customer-service-software-for-support-teams\/\">customer service software<\/a>, enabling it to decide precisely which events trigger a ticket and which remain mere traces in the history.   <\/p>\n\n<p class=\"wp-block-paragraph\">Well-calibrated<strong>call-to-ticket automation<\/strong> means creating a ticket only when there&#8217;s an action to take behind it. Not before, not alongside. <\/p>\n\n<h2 class=\"wp-block-heading\">Technical prerequisites for linking your telephony and helpdesk systems<\/h2>\n\n<p class=\"wp-block-paragraph\">Before wiring up any triggers, there&#8217;s some groundwork to be done. A functioning <strong>call-to-ticket workflow<\/strong> rests on three technical pillars, and if one of them is missing, you&#8217;re going to produce incomplete, misrouted or duplicate tickets. <\/p>\n\n<p class=\"wp-block-paragraph\">First pillar: <strong>reliable VoIP telephony<\/strong>. We&#8217;re talking about a latency of less than 150 ms and a QoS (Quality of Service) configured on your network to prioritize voice traffic. If your calls cut out or crackle, the webhooks that forward call events to your helpdesk will also lose data en route. Kavkom, as a <a href=\"https:\/\/kavkom.com\/en\/products\/voip-telephony\/\">VoIP cloud telephony solution<\/a>, handles this layer natively with HD audio quality and intelligent call routing, ensuring that every event (off-hook, missed, transferred call) is captured cleanly on the server side.   <\/p>\n\n<p class=\"wp-block-paragraph\">Second pillar: <strong>a structured helpdesk<\/strong>. Your ticketing tool must have defined agent groups, clear statuses (open, in progress, escalated, resolved), and custom fields ready to receive call data (calling number, duration, agent involved). Without this structure, the automatically created ticket lands in an organizational void.  <\/p>\n\n<p class=\"wp-block-paragraph\">The third pillar, and one that many underestimate, is the <strong>link between VoIP and ticketing software<\/strong> via native integration. A REST API or webhook is the bridge between the two systems. Kavkom offers an open API and connectors via <a href=\"https:\/\/kavkom.com\/en\/integrations-en\/zapier-integration\/\">Zapier<\/a>, enabling you to link your helpdesk without heavy development. The call triggers an event, the event sends the data, and the ticket is created with the right pre-filled fields.   <\/p>\n\n<p class=\"wp-block-paragraph\">There&#8217;s one last point, which is often overlooked: <strong>your business rules need to be written before you get down to the technical side of things<\/strong>. What type of call creates a ticket? To which group? With what priority? These conditions determine all the parameters that follow. Without them, you&#8217;re automating in the dark.     <\/p>\n\n<div class=\"blog-cta-custom-basic-wrapper\">\n  <!-- \u2500\u2500 Colonne gauche \u2500\u2500 -->\n  <div class=\"blog-cta-custom-basic-left\">\n    <img decoding=\"async\" class=\"blog-cta-custom-basic-logo\" src=\"https:\/\/kavkom.com\/wp-content\/uploads\/2023\/09\/Kavkom-logo-white-footer.webp\" alt=\"Kavkom logo\"\/>\n    <!-- \u270f\ufe0f MODIFIER le texte d'accroche -->\n    <p class=\"blog-cta-custom-basic-headline\">Boost the productivity of your sales teams with Kavkom, the 100% cloud-based <strong>business telephony<\/strong> software.  <\/p>\n    <!-- \u270f\ufe0f MODIFIER href et texte du bouton -->\n    <a href=\"https:\/\/kavkom.com\/demander-une-demo\/\" class=\"blog-cta-custom-basic-btn\">Assess the feasibility of your integration with our experts<\/a>\n  <\/div>\n  <!-- \u2500\u2500 Colonne droite : visuel complet \u2500\u2500 -->\n  <div class=\"blog-cta-custom-basic-right\">\n    <img decoding=\"async\" class=\"blog-cta-custom-basic-visual\" src=\"https:\/\/kavkom.com\/wp-content\/uploads\/2026\/04\/CTA-bas-de-page-1920-x-850-px.png\" alt=\"Overview Kavkom\"\/>\n  <\/div>\n<\/div>\n\n<h2 class=\"wp-block-heading\">How to set up your call-to-ticket workflow in 4 steps<\/h2>\n\n<p class=\"wp-block-paragraph\">You&#8217;ve got your prerequisites in place: reliable VoIP telephony, structured helpdesk, ready integration. Now it&#8217;s time to put it all together in an order that makes sense. Setting up a <strong>call-to-ticket workflow<\/strong> without a method is like plugging in pipes at random: they leak everywhere.  <\/p>\n\n<p class=\"wp-block-paragraph\">The flow follows a simple chronological logic: first you decide which events count, then you choose which data goes into the ticket, then you define who receives it, and finally you check that everything works without creating duplicates. Each step conditions the next. <\/p>\n\n<h3 class=\"wp-block-heading\">Step 1: Define relevant triggers<\/h3>\n\n<p class=\"wp-block-paragraph\">Not every telephone event justifies the <strong>automatic creation of a support ticket<\/strong>. A call picked up in 3 seconds by the right agent, handled in 2 minutes, resolved: why clutter up your helpdesk? The trigger must correspond to a situation where there&#8217;s follow-up to be done.  <\/p>\n\n<p class=\"wp-block-paragraph\">Here are the VoIP events that usually merit a ticket:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Missed call<\/strong> without callback within 15 minutes<\/li>\n\n\n\n<li><strong>Abandon to queue<\/strong> after a set time (e.g. 45 seconds)<\/li>\n\n\n\n<li><strong>Choice of specific IVR<\/strong> for complaints or technical incidents<\/li>\n\n\n\n<li><strong>Failed transfer<\/strong> between two agent groups<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">The trap would be to trigger a ticket on every incoming call. You end up with 200 tickets a day, 150 of which require no action. Your agents spend more time closing empty tickets than dealing with real problems.  <\/p>\n\n<p class=\"wp-block-paragraph\">With Kavkom, the <a href=\"https:\/\/kavkom.com\/en\/feature\/call-routing\/ivr-interactive-voice-response\/\">customizable IVR<\/a> allows you to filter upstream: only the call paths you have identified as critical trigger the webhook event that creates the ticket. The others remain in the call log, and can be consulted in your helpdesk. <\/p>\n\n<h3 class=\"wp-block-heading\">Step 2: Mapping mandatory data fields<\/h3>\n\n<p class=\"wp-block-paragraph\">A ticket without the right information is like a post-it note without context. The agent who receives it must be able to act immediately, without calling the customer back to ask him what he&#8217;s already said. <\/p>\n\n<p class=\"wp-block-paragraph\">ITIL v4 best practice recommends a minimum of 9 fields for a ticket to be usable as soon as it is created. Adapted to a telephony context, here&#8217;s what your <strong>call-to-ticket workflow<\/strong> should automatically report: <\/p>\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Field type<\/th><th>Upstream data<\/th><th>Usefulness to the agent<\/th><\/tr><\/thead><tbody><tr><td>Identification<\/td><td>Caller number, precise time stamp<\/td><td>Know who called and when<\/td><\/tr><tr><td>Categorization<\/td><td>IVR selection, source queue<\/td><td>Understanding the nature of the request<\/td><\/tr><tr><td>Prioritization<\/td><td>Initial status (urgent, normal), associated ALS<\/td><td>Processing in the right order<\/td><\/tr><tr><td>Technical background<\/td><td>Link to call recording, assigned agent<\/td><td>Replay the exchange without disturbing the customer<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p class=\"wp-block-paragraph\">The link to the<strong>call recording<\/strong> is a field that many people forget, and yet it&#8217;s the one that changes everything. The level 2 agent who takes over the case can <a href=\"https:\/\/kavkom.com\/en\/useful-information\/replay-call\/\">listen to the call again,<\/a> instead of having the customer repeat it. Kavkom records each call natively and makes the link accessible via its API, enabling it to be injected directly into the ticket.  <\/p>\n\n<h3 class=\"wp-block-heading\">Step 3: Set routing and assignment rules<\/h3>\n\n<p class=\"wp-block-paragraph\">The ticket is created with the right data. All that remains is to send it to the right place. A badly routed ticket is one that lies dormant in the wrong queue for 48 hours before anyone realizes the error.  <\/p>\n\n<p class=\"wp-block-paragraph\">Three types of <strong>automatic routing of tickets after a call<\/strong> work well in practice:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>IVR routing.<\/strong>  Did the customer press &#8220;2&#8221; for technical support? The ticket goes directly to the technical team, not the sales team. <\/li>\n\n\n\n<li><strong>Assignment by CRM owner.<\/strong>  If the caller&#8217;s number is already attached to a contact in your CRM, the ticket is assigned to the sales or account executive who manages this customer. Kavkom synchronizes this data via its <a href=\"https:\/\/kavkom.com\/en\/products\/crm-hybrid\/\">native CRM integrations<\/a>, making this rule easy to implement. <\/li>\n\n\n\n<li><strong>Prioritization by SLA.<\/strong>  A call from a VIP customer (identified by number) generates a ticket with high priority and reduced processing time. The others follow the standard flow. <\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">The classic mistake: creating rules that are too complex from the outset. Start with 2 or 3 clear conditions, observe for two weeks, then refine. Simple routing that works is better than a 15-branch decision tree that nobody maintains.  <\/p>\n\n<h3 class=\"wp-block-heading\">Step 4: Test the flow and configure deduplication<\/h3>\n\n<p class=\"wp-block-paragraph\">Your workflow is in place on paper. Before rolling it out to the whole team, you need to test it with real calls. Not a staged test with fictitious data: a real caller, a real IVR path, a real ticket that lands in the helpdesk.  <\/p>\n\n<p class=\"wp-block-paragraph\">Make 10 to 15 test calls covering each scenario (missed call, queue abandonment, technical IVR choice, failed transfer). For each one, check that the ticket contains all the expected fields, that it arrives in the right queue, and that the SLA applies correctly. <\/p>\n\n<p class=\"wp-block-paragraph\">And here&#8217;s the point that everyone discovers too late: <strong>deduplication<\/strong>. A customer calls back three times in one hour with the same problem. Without any safeguards, you have three identical tickets. Your agents lose time, your load statistics are distorted.   <\/p>\n\n<p class=\"wp-block-paragraph\">The solution: define a <strong>unique deduplication key<\/strong> combining the caller&#8217;s number and a time window (e.g. 30 minutes). If a call from the same number arrives within this window, the system updates the existing ticket instead of creating a new one. Remember also to standardize number formats (spaces, area codes, hyphens) so that +33 6 12 34 56 78 and 06 12 34 56 78 are recognized as the same caller.  <\/p>\n\n<p class=\"wp-block-paragraph\">This testing and deduplication stage is what separates a clean <strong>call-to-ticket workflow<\/strong> from a duplicate factory. Take a week to adjust it before going into production. <\/p>\n\n<h2 class=\"wp-block-heading\">Common mistakes that ruin your automation<\/h2>\n\n<p class=\"wp-block-paragraph\">Your workflow is running, tickets are being created, everything seems to be running smoothly. Then, after two weeks, your agents start complaining: duplicate tickets everywhere, notifications that keep looping back, and requests that have been badly categorized because the IVR was sending nonsense. The problem is almost never the technology. It&#8217;s the configuration.   <\/p>\n\n<p class=\"wp-block-paragraph\">Here are the four pitfalls that turn a well-thought-out <strong>call-to-ticket workflow<\/strong> into a source of chaos.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>1. Massive duplication due to lack of deduplication key.<\/strong>  We talked about this in step 4, but it&#8217;s so common that it&#8217;s worth hammering home. A customer who calls back three times generates three tickets if you haven&#8217;t defined a time window per number. Worse: if number formats are not standardized (06 vs +336 vs 0033 6), your helpdesk treats the same caller as three separate people. Your <strong>agent load statistics<\/strong> become unusable, and the time wasted closing duplicates quickly adds up.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>2. Infinite automation loops.<\/strong>  Classic scenario: the helpdesk updates the status of a ticket, which triggers a webhook to telephony, which sends an event back to the helpdesk, which updates the status, which triggers the webhook again. In just a few minutes, you&#8217;ve got 400 notifications and a slow system. The solution: define <strong>explicit stop conditions<\/strong> in each rule. If the ticket already has the status &#8220;in progress&#8221;, the event must not restart the loop.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>3. An overly complex IVR that distorts routing.<\/strong>  More than 5 choices in a voice menu, and your callers press randomly to speak to someone. The resulting ticket lands in the wrong queue with the wrong categorization. Kavkom lets you set up an <a href=\"https:\/\/kavkom.com\/en\/feature\/call-routing\/ivr-interactive-voice-response\/\">IVR with short menus<\/a>, but you still have to resist the temptation to add 8 options &#8220;just in case&#8221;.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>4. Lack of a stable unique identifier.<\/strong> To ensure the <strong>traceability of requests<\/strong> between your telephony and helpdesk systems, each ticket must carry an identifier that does not change from one system to the other. If your CRM uses email as the key and your telephony uses the telephone number, you lose the link as soon as a customer calls from a different number. The solution: systematically link the calling number to a unique CRM contact via <a href=\"https:\/\/kavkom.com\/en\/useful-information\/crm-solution\/\">Kavkom&#8217;s CRM integrations<\/a>, and use this contact identifier as a pivot between all your tools.  <\/p>\n\n<p class=\"wp-block-paragraph\">These errors are not borderline cases. They are the problems most teams encounter in the first few weeks after deploying <strong>call-to-ticket automation<\/strong>. Correcting them in advance saves you hours of manual clean-up.  <\/p>\n\n<h2 class=\"wp-block-heading\">What indicators should be tracked once the workflow has been implemented?<\/h2>\n\n<p class=\"wp-block-paragraph\">Your <strong>call-to-ticket workflow<\/strong> has been running in production for a few days now. Tickets are being created, routing is working and duplicates are under control. But how do you know if all this is producing real results for your support team? Without metrics, you&#8217;re flying blind.   <\/p>\n\n<p class=\"wp-block-paragraph\">Four indicators are all you need to assess the health of your flow, and each tells a different part of the story.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Delay in handling tickets from missed calls.<\/strong>  This is your most revealing SLA. A missed call at 5.45pm that generates a ticket processed at 9.02am the next day is fine. The same ticket that sleeps until Thursday is a red flag. Measure the time between automatic ticket creation and the first agent action. If this time exceeds your target SLA, your notification or assignment rules probably have a hole in them.    <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>First contact resolution rate (FCR).<\/strong> Industry benchmarks place a good FCR at between 70 and 85%, depending on the sector<a href=\"https:\/\/bluetweak.com\/blog\/call-center-kpi-benchmarks\/\" target=\"_blank\" rel=\"noopener\">(BlueTweak, 2026<\/a>). With well-configured <strong>inbound call ticketing<\/strong>, the agent has access to the call recording, IVR path and CRM history as soon as the ticket is opened. They don&#8217;t need to call back to understand the context. This gain in information translates directly into a higher FCR.   <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Average processing time (AHT).<\/strong>  The general standard is around 6 minutes 10 seconds for all sectors, and between 4 and 7 minutes for standard voice service. What you&#8217;re interested in is the proportion of this time spent on manual entry. If your <strong>call-to-ticket automation<\/strong> works well, the after-call work (the time spent after hanging up to document the exchange) should drop significantly, since the ticket is already pre-filled.  <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>The rate of calls converted into useful tickets.<\/strong>  If 80% of your calls generate a ticket, but your agents close 60% without taking action, your triggers are too broad. Conversely, if some requests fall through the cracks, your triggers are too restrictive. Aim for a ratio where the vast majority of automatically generated tickets result in real action.  <\/p>\n\n<p class=\"wp-block-paragraph\">Kavkom collects all this data via its <a href=\"https:\/\/kavkom.com\/en\/team\/adaptable-to-all-types-of-teams\/\">integrated dashboards<\/a>: call volume, pick-up rate, duration, breakdown by agent. Cross-reference them with your helpdesk metrics to get a complete view of the flow. <\/p>\n\n<div class=\"blog-cta-custom-basic-wrapper\">\n  <!-- \u2500\u2500 Colonne gauche \u2500\u2500 -->\n  <div class=\"blog-cta-custom-basic-left\">\n    <img decoding=\"async\" class=\"blog-cta-custom-basic-logo\" src=\"https:\/\/kavkom.com\/wp-content\/uploads\/2023\/09\/Kavkom-logo-white-footer.webp\" alt=\"Kavkom logo\"\/>\n    <!-- \u270f\ufe0f MODIFIER le texte d'accroche -->\n    <p class=\"blog-cta-custom-basic-headline\">Boost the productivity of your sales teams with Kavkom, the 100% cloud-based <strong>business telephony<\/strong> software.  <\/p>\n    <!-- \u270f\ufe0f MODIFIER href et texte du bouton -->\n    <a href=\"https:\/\/kavkom.com\/demander-une-demo\/\" class=\"blog-cta-custom-basic-btn\">  Discover native Kavkom integration for your helpdesk  <\/a>\n  <\/div>\n  <!-- \u2500\u2500 Colonne droite : visuel complet \u2500\u2500 -->\n  <div class=\"blog-cta-custom-basic-right\">\n    <img decoding=\"async\" class=\"blog-cta-custom-basic-visual\" src=\"https:\/\/kavkom.com\/wp-content\/uploads\/2026\/04\/CTA-bas-de-page-1920-x-850-px.png\" alt=\"Overview Kavkom\"\/>\n  <\/div>\n<\/div>\n\n<h2 class=\"wp-block-heading\">The key to a smooth workflow<\/h2>\n\n<ul class=\"wp-block-list\">\n<li>Target relevant triggers, such as missed calls or specific IVR choices, to avoid polluting your helpdesk.<\/li>\n\n\n\n<li>Systematically map the recording link to give agents immediate context without having to repeat the client.<\/li>\n\n\n\n<li>Activate a time deduplication rule by number to stop the creation of duplicate tickets.<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Clean automation between your VoIP telephony and your support tool eliminates double entry and secures the tracking of every interaction. See also our <a href=\"https:\/\/kavkom.com\/en\/useful-information\/ringover-vs-kavkom\/\">Ringover vs. Kavkom<\/a> comparison to assess the flexibility of our native integrations. <\/p>\n\n<p class=\"wp-block-paragraph\">Ready to take action? <a href=\"https:\/\/kavkom.com\/demander-une-demo\/\">Book a free demo<\/a> and test our no-obligation solutions to streamline your support flows. <\/p>\n\n<style>\/* \u2500\u2500 Reset box-sizing \u2500\u2500 *\/\n  .blog-cta-custom-testimonial-wrapper,\n  .blog-cta-custom-testimonial-wrapper *,\n  .blog-cta-custom-testimonial-wrapper *::before,\n  .blog-cta-custom-testimonial-wrapper *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     CTA WRAPPER \u2014 carte blanche, bordure gauche orange\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .blog-cta-custom-testimonial-wrapper {\n    width: 100%;\n    max-width: 100%;\n    background-color: #ffffff;\n    border: 1px solid #E5E5E5;\n    border-left: 5px solid #FFA301;\n    border-radius: 12px;\n    padding: 24px 28px 24px 32px;\n    margin: 48px 0;\n    display: flex;\n    flex-direction: column;\n    gap: 20px;\n    overflow: hidden;\n    box-sizing: border-box;\n  }\n\n  \/* Ic\u00f4ne guillemet (orange Teachizy+) *\/\n  .blog-cta-custom-testimonial-quote-icon {\n    display: block;\n    width: 22px;\n    height: auto;\n    margin-bottom: 6px;\n  }\n\n  \/* Titre du t\u00e9moignage *\/\n  .blog-cta-custom-testimonial-heading {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif;\n    font-weight: 700;\n    font-size: 20px;\n    color: #111111;\n    line-height: 1.25;\n    margin: 4px 0 6px;\n  }\n\n  \/* Corps du t\u00e9moignage *\/\n  .blog-cta-custom-testimonial-body {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 14px;\n    color: #444444;\n    line-height: 1.65;\n    margin: 0;\n    word-wrap: break-word;\n    overflow-wrap: break-word;\n  }\n\n  \/* Zone auteur *\/\n  .blog-cta-custom-testimonial-author {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 14px 0 16px;\n    border-bottom: 1px solid #EEEEEE;\n  }\n\n  .blog-cta-custom-testimonial-author-logo {\n    width: 36px;\n    height: 36px;\n    object-fit: contain;\n    flex-shrink: 0;\n  }\n\n  \/* Placeholder logo \u2014 affich\u00e9 si l'image ne charge pas (orange Teachizy+) *\/\n  .blog-cta-custom-testimonial-author-logo-placeholder {\n    width: 36px;\n    height: 36px;\n    flex-shrink: 0;\n    display: flex;\n    align-items: flex-end;\n    gap: 3px;\n  }\n  .blog-cta-custom-testimonial-author-logo-placeholder span {\n    display: block;\n    background: #FFA301;\n    border-radius: 2px;\n    width: 9px;\n  }\n  .blog-cta-custom-testimonial-author-logo-placeholder span:nth-child(1) { height: 20px; }\n  .blog-cta-custom-testimonial-author-logo-placeholder span:nth-child(2) { height: 26px; }\n  .blog-cta-custom-testimonial-author-logo-placeholder span:nth-child(3) { height: 32px; }\n\n  .blog-cta-custom-testimonial-author-info {\n    display: flex;\n    flex-direction: column;\n    gap: 1px;\n  }\n\n  .blog-cta-custom-testimonial-author-name {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 13px;\n    color: rgba(0, 0, 0, 0.55);\n  }\n\n  .blog-cta-custom-testimonial-author-role {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 13px;\n    font-weight: 700;\n    color: #111111;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     ZONE BAS \u2014 rating + CTA\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  .blog-cta-custom-testimonial-bottom {\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n    min-width: 0;\n  }\n\n  .blog-cta-custom-testimonial-rating {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 15px;\n    color: #444444;\n    line-height: 1.5;\n    margin: 0;\n  }\n\n  .blog-cta-custom-testimonial-rating strong {\n    font-weight: 700;\n    color: #FFA301;\n    font-size: 16px;\n  }\n\n  .blog-cta-custom-testimonial-tagline {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 17px;\n    font-weight: 700;\n    color: #111111;\n    margin: 4px 0 0;\n  }\n\n  .blog-cta-custom-testimonial-btn {\n    display: inline-block;\n    max-width: 100%;\n    margin-top: 8px;\n    padding: 11px 36px;\n    background-color: #FFA301;\n    color: #0A0A0A !important;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 14px;\n    font-weight: 700;\n    text-decoration: none !important;\n    border-radius: 999px;\n    border: none;\n    cursor: pointer;\n    transition: background-color 0.2s ease;\n    align-self: flex-start;\n    box-sizing: border-box;\n  }\n\n  .blog-cta-custom-testimonial-btn:hover {\n    background-color: #E69100;\n  }\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     RESPONSIVE \u2014 mobile\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  @media (max-width: 767px) {\n    .blog-cta-custom-testimonial-wrapper {\n      padding: 20px 18px 20px 22px;\n      margin: 24px 0;\n      border-left-width: 4px;\n    }\n\n    .blog-cta-custom-testimonial-heading {\n      font-size: 18px;\n    }\n\n    .blog-cta-custom-testimonial-btn {\n      width: 100%;\n      text-align: center;\n      padding: 12px 24px;\n    }\n  }\n<\/style><style>\/* \u2500\u2500 Reset scop\u00e9 \u2500\u2500 *\/\n    .blog-cta-custom-basic-wrapper,\n    .blog-cta-custom-basic-wrapper *,\n    .blog-cta-custom-basic-wrapper *::before,\n    .blog-cta-custom-basic-wrapper *::after {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0;\n    }\n    \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       WRAPPER PRINCIPAL \u2014 blanc, bordure fine grise\n    \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n    .blog-cta-custom-basic-wrapper {\n      width: 100%;\n      max-width: 100%;\n      background-color: #ffffff;\n      border: 1px solid #E5E5E5;\n      border-radius: 12px;\n      padding: 20px 24px;\n      margin: 48px 0;\n      display: flex;\n      flex-direction: row;\n      align-items: center;\n      gap: 20px;\n      overflow: hidden;\n    }\n    \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       COLONNE GAUCHE \u2014 plus \u00e9troite (flex: 1)\n    \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n    .blog-cta-custom-basic-left {\n      flex: 1 1 0;\n      min-width: 0;\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: 12px;\n    }\n    .blog-cta-custom-basic-logo {\n      height: 24px;\n      width: auto;\n      display: block;\n    }\n    \/* \u270f\ufe0f MODIFIER le texte d'accroche *\/\n    .blog-cta-custom-basic-headline {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n      font-size: 14px;\n      font-weight: 400;\n      color: #1A1A1A;\n      line-height: 1.45;\n    }\n    .blog-cta-custom-basic-headline strong {\n      font-weight: 700;\n    }\n    \/* \u270f\ufe0f MODIFIER href et texte du bouton *\/\n    .blog-cta-custom-basic-btn {\n      display: inline-block;\n      max-width: 100%;\n      padding: 9px 22px;\n      background-color: #FFA301;\n      color: #0A0A0A !important;\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n      font-size: 13px;\n      font-weight: 700;\n      text-decoration: none !important;\n      border-radius: 999px;\n      border: none;\n      cursor: pointer;\n      transition: background-color 0.2s ease;\n    }\n    .blog-cta-custom-basic-btn:hover {\n      background-color: #E69100;\n    }\n    \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       COLONNE DROITE \u2014 plus large (flex: 1.3)\n    \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n    .blog-cta-custom-basic-right {\n      flex: 1.3 1 0;\n      min-width: 0;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n    .blog-cta-custom-basic-visual {\n      max-width: 100%;          \/* ne d\u00e9passe pas la colonne *\/\n      max-height: 180px;        \/* hauteur max \u2192 CTA reste fin *\/\n      width: auto;              \/* largeur libre selon ratio *\/\n      height: auto;              \/* hauteur libre selon ratio *\/\n      display: block;\n      border-radius: 6px;\n    }\n    \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       RESPONSIVE MOBILE\n    \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n    @media (max-width: 767px) {\n      .blog-cta-custom-basic-wrapper {\n        flex-direction: column;\n        padding: 16px 16px 0;\n        gap: 12px;\n      }\n      .blog-cta-custom-basic-left {\n        width: 100%;\n      }\n      .blog-cta-custom-basic-btn {\n        width: 100%;\n        text-align: center;\n        padding: 12px 18px;\n        font-size: 14px;\n      }\n      .blog-cta-custom-basic-right {\n        width: 100%;\n      }\n      .blog-cta-custom-basic-visual {\n        max-height: 200px;\n        border-radius: 0;\n      }\n    }\n  <\/style><style>\/* \u2500\u2500 Reset scop\u00e9 (fix d\u00e9bordement horizontal) \u2500\u2500 *\/\n  .blog-cta-custom-small-wrapper,\n  .blog-cta-custom-small-wrapper *,\n  .blog-cta-custom-small-wrapper *::before,\n  .blog-cta-custom-small-wrapper *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  .blog-cta-custom-small-wrapper {\n    width: 100%;\n    max-width: 100%;\n    border: 4px solid #FFA301;\n    border-radius: 16px;\n    padding: 12px;\n    margin: 48px 0;\n    overflow: hidden;\n  }\n  .blog-cta-custom-small-wrapper p {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-size: 16px;\n    font-weight: 400;\n    color: #1a1a1a;\n    line-height: 1.55;\n    margin: 0;\n    padding: 0;\n    word-wrap: break-word;\n    overflow-wrap: break-word;\n  }\n  .blog-cta-custom-small-wrapper a {\n    color: #2e6ff5;\n    text-decoration: none;\n    font-weight: 500;\n  }\n  .blog-cta-custom-small-wrapper a:hover {\n    text-decoration: underline;\n  }\n  \/* \u2500\u2500 Fix WordPress wpautop : neutralise les <br> et <p> vides inject\u00e9s juste apr\u00e8s le CTA \u2500\u2500 *\/\n  .blog-cta-custom-small-wrapper + br,\n  .blog-cta-custom-small-wrapper + p:empty {\n    display: none;\n  }\n  @media (max-width: 767px) {\n    .blog-cta-custom-small-wrapper {\n      margin: 24px 0;\n      padding: 10px;\n    }\n    .blog-cta-custom-small-wrapper p {\n      font-size: 15px;\n    }\n  }\n<\/style>\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A call ends, the agent hangs up, and the request disappears. No trace, no follow-up, no ticket. The customer calls back two days later, no one knows what he&#8217;s talking about. This is the problem faced by most support teams who manage their calls without a structured call-to-ticket workflow: the conversation exists, but the action [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":67943,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[52],"tags":[],"class_list":["post-67952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-telephony"],"acf":[],"_links":{"self":[{"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/posts\/67952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/comments?post=67952"}],"version-history":[{"count":1,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/posts\/67952\/revisions"}],"predecessor-version":[{"id":67954,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/posts\/67952\/revisions\/67954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/media\/67943"}],"wp:attachment":[{"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/media?parent=67952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/categories?post=67952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kavkom.com\/en\/wp-json\/wp\/v2\/tags?post=67952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}