{"id":9349,"date":"2026-03-23T12:17:11","date_gmt":"2026-03-23T12:17:11","guid":{"rendered":"https:\/\/cardiocases.com\/?page_id=9349"},"modified":"2026-03-25T13:18:22","modified_gmt":"2026-03-25T13:18:22","slug":"cardiocases-chatbot","status":"publish","type":"page","link":"https:\/\/cardiocases.com\/fr\/cardiocases-chatbot\/","title":{"rendered":"Cardiocases Chatbot"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"9349\" class=\"elementor elementor-9349\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d16ec26 e-flex e-con-boxed e-con e-parent\" data-id=\"d16ec26\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e70a116 elementor-widget elementor-widget-html\" data-id=\"e70a116\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:wght@400;500;600&family=DM+Mono:wght@400;500&display=swap');\r\n\r\n  .cc-chat-wrapper {\r\n    --cc-bg:        #0f1923;\r\n    --cc-surface:   #162030;\r\n    --cc-border:    #1e3048;\r\n    --cc-accent:    #00b4d8;\r\n    --cc-accent2:   #0077a8;\r\n    --cc-text:      #e2eaf2;\r\n    --cc-muted:     #7a9ab5;\r\n    --cc-user-bg:   #00b4d8;\r\n    --cc-user-text: #0a1520;\r\n    --cc-bot-bg:    #1a2d42;\r\n    --cc-radius:    14px;\r\n    --cc-font:      'DM Sans', sans-serif;\r\n    --cc-mono:      'DM Mono', monospace;\r\n\r\n    font-family: var(--cc-font);\r\n    background: var(--cc-bg);\r\n    border: 1px solid var(--cc-border);\r\n    border-radius: 20px;\r\n    overflow: hidden;\r\n    max-width: 80%;\r\n    margin: 0 auto;\r\n    box-shadow: 0 24px 64px rgba(0,0,0,0.5), 0 0 0 1px rgba(0,180,216,0.08);\r\n  }\r\n\r\n  .cc-header {\r\n    background: linear-gradient(135deg, #0d2137 0%, #0f2a45 100%);\r\n    border-bottom: 1px solid var(--cc-border);\r\n    padding: 18px 24px;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 14px;\r\n  }\r\n\r\n  .cc-header-icon {\r\n    width: 40px;\r\n    height: 40px;\r\n    background: linear-gradient(135deg, var(--cc-accent), var(--cc-accent2));\r\n    border-radius: 10px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .cc-header-icon svg {\r\n    width: 22px;\r\n    height: 22px;\r\n    fill: none;\r\n    stroke: #fff;\r\n    stroke-width: 2;\r\n    stroke-linecap: round;\r\n  }\r\n\r\n  .cc-header-text h3 { margin: 0; font-size: 15px; font-weight: 600; color: var(--cc-text); letter-spacing: -0.2px; }\r\n  .cc-header-text p  { margin: 2px 0 0; font-size: 12px; color: var(--cc-muted); }\r\n\r\n  .cc-status {\r\n    margin-left: auto;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 6px;\r\n    font-size: 12px;\r\n    color: var(--cc-muted);\r\n  }\r\n\r\n  .cc-status-dot {\r\n    width: 7px; height: 7px;\r\n    background: #2ecc71;\r\n    border-radius: 50%;\r\n    animation: cc-pulse 2s infinite;\r\n  }\r\n\r\n  @keyframes cc-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }\r\n\r\n  .cc-messages {\r\n    height: 420px;\r\n    overflow-y: auto;\r\n    padding: 24px 20px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 16px;\r\n    background: var(--cc-bg);\r\n  }\r\n\r\n  .cc-messages::-webkit-scrollbar       { width: 4px; }\r\n  .cc-messages::-webkit-scrollbar-track { background: transparent; }\r\n  .cc-messages::-webkit-scrollbar-thumb { background: var(--cc-border); border-radius: 4px; }\r\n\r\n  .cc-msg { display: flex; gap: 10px; max-width: 85%; animation: cc-fadein 0.25s ease; }\r\n\r\n  @keyframes cc-fadein { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }\r\n\r\n  .cc-msg.user { align-self: flex-end; flex-direction: row-reverse; }\r\n  .cc-msg.bot  { align-self: flex-start; }\r\n\r\n  .cc-avatar {\r\n    width: 30px; height: 30px;\r\n    border-radius: 8px;\r\n    display: flex; align-items: center; justify-content: center;\r\n    flex-shrink: 0;\r\n    font-size: 13px; font-weight: 600;\r\n    margin-top: 2px;\r\n  }\r\n\r\n  .cc-msg.user .cc-avatar { background: var(--cc-accent2); color: #fff; }\r\n  .cc-msg.bot  .cc-avatar { background: linear-gradient(135deg, var(--cc-accent), var(--cc-accent2)); color: #fff; }\r\n\r\n  .cc-bubble { padding: 12px 16px; border-radius: var(--cc-radius); font-size: 14px; line-height: 1.6; color: var(--cc-text); }\r\n\r\n  .cc-msg.user .cc-bubble { background: var(--cc-accent); color: var(--cc-user-text); border-bottom-right-radius: 4px; font-weight: 500; }\r\n  .cc-msg.bot  .cc-bubble { background: var(--cc-bot-bg); border: 1px solid var(--cc-border); border-bottom-left-radius: 4px; }\r\n\r\n  .cc-sources { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--cc-border); font-size: 11px; color: var(--cc-muted); }\r\n  .cc-sources span.cc-sources-heading { display: block; margin-bottom: 4px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }\r\n  .cc-sources a { color: var(--cc-accent); text-decoration: none; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-family: var(--cc-mono); font-size: 10.5px; margin-top: 2px; }\r\n  .cc-sources a:hover { text-decoration: underline; }\r\n  .cc-sources .cc-source-text { display: block; font-family: var(--cc-mono); font-size: 10.5px; margin-top: 2px; color: var(--cc-muted); }\r\n\r\n  .cc-typing .cc-bubble { padding: 14px 18px; }\r\n\r\n  .cc-dots { display: flex; gap: 5px; align-items: center; height: 14px; }\r\n  .cc-dots span { width: 6px; height: 6px; background: var(--cc-muted); border-radius: 50%; animation: cc-bounce 1.2s infinite; }\r\n  .cc-dots span:nth-child(2) { animation-delay: 0.2s; }\r\n  .cc-dots span:nth-child(3) { animation-delay: 0.4s; }\r\n\r\n  @keyframes cc-bounce { 0%, 80%, 100% { transform: translateY(0); opacity: 0.4; } 40% { transform: translateY(-6px); opacity: 1; } }\r\n\r\n  .cc-welcome { text-align: center; padding: 20px 10px 10px; color: var(--cc-muted); font-size: 13px; line-height: 1.6; }\r\n  .cc-welcome strong { display: block; font-size: 15px; color: var(--cc-text); margin-bottom: 6px; }\r\n\r\n  .cc-suggestions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-top: 14px; }\r\n\r\n  .cc-suggestion {\r\n    background: var(--cc-surface);\r\n    border: 1px solid var(--cc-border);\r\n    color: var(--cc-accent);\r\n    border-radius: 20px;\r\n    padding: 6px 14px;\r\n    font-size: 12.5px;\r\n    cursor: pointer;\r\n    transition: all 0.15s;\r\n    font-family: var(--cc-font);\r\n  }\r\n  .cc-suggestion:hover { background: var(--cc-accent); color: var(--cc-user-text); border-color: var(--cc-accent); }\r\n\r\n  .cc-input-area { padding: 16px 20px; background: var(--cc-surface); border-top: 1px solid var(--cc-border); display: flex; gap: 10px; align-items: flex-end; }\r\n\r\n  .cc-input {\r\n    flex: 1;\r\n    background: var(--cc-bg);\r\n    border: 1px solid var(--cc-border);\r\n    border-radius: 12px;\r\n    color: var(--cc-text);\r\n    font-family: var(--cc-font);\r\n    font-size: 14px;\r\n    padding: 10px 14px;\r\n    resize: none;\r\n    outline: none;\r\n    min-height: 42px;\r\n    max-height: 120px;\r\n    line-height: 1.5;\r\n    transition: border-color 0.2s;\r\n  }\r\n  .cc-input::placeholder { color: var(--cc-muted); }\r\n  .cc-input:focus { border-color: var(--cc-accent); }\r\n\r\n  .cc-send {\r\n    width: 42px; height: 42px;\r\n    background: var(--cc-accent);\r\n    border: none;\r\n    border-radius: 12px;\r\n    cursor: pointer;\r\n    display: flex; align-items: center; justify-content: center;\r\n    transition: all 0.15s;\r\n    flex-shrink: 0;\r\n  }\r\n  .cc-send:hover   { background: var(--cc-accent2); transform: scale(1.05); }\r\n  .cc-send:active  { transform: scale(0.97); }\r\n  .cc-send:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }\r\n  .cc-send svg { width: 18px; height: 18px; fill: none; stroke: #fff; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }\r\n\r\n  .cc-footer { padding: 10px 20px; background: var(--cc-surface); border-top: 1px solid var(--cc-border); font-size: 11px; color: var(--cc-muted); text-align: center; }\r\n\r\n  @media (max-width: 600px) { .cc-messages { height: 340px; } .cc-msg { max-width: 92%; } }\r\n<\/style>\r\n\r\n<div class=\"cc-chat-wrapper\" id=\"ccChat\">\r\n\r\n  <div class=\"cc-header\">\r\n    <div class=\"cc-header-icon\">\r\n      <svg viewbox=\"0 0 24 24\"><path d=\"M22 12A10 10 0 1 1 12 2\"\/><polyline points=\"22 4 12 14 9 11\"\/><\/svg>\r\n    <\/div>\r\n    <div class=\"cc-header-text\">\r\n      <h3>CardioCases Assistant<\/h3>\r\n      <p>Cardiac pacing, defibrillation &amp; ECG<\/p>\r\n    <\/div>\r\n    <div class=\"cc-status\">\r\n      <div class=\"cc-status-dot\"><\/div>\r\n      Online\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"cc-messages\" id=\"ccMessages\">\r\n    <div class=\"cc-welcome\">\r\n      <strong>Welcome to the CardioCases Assistant<\/strong>\r\n      Ask me anything about cardiac pacing, ICD programming, CRT, ECG interpretation, or device-specific settings.\r\n      <div class=\"cc-suggestions\">\r\n        <button class=\"cc-suggestion\" onclick=\"ccAskSuggestion(this)\">What is CRT?<\/button>\r\n        <button class=\"cc-suggestion\" onclick=\"ccAskSuggestion(this)\">How does an ICD detect VF?<\/button>\r\n        <button class=\"cc-suggestion\" onclick=\"ccAskSuggestion(this)\">Explain AV delay optimization<\/button>\r\n        <button class=\"cc-suggestion\" onclick=\"ccAskSuggestion(this)\">Medtronic pacing modes<\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"cc-input-area\">\r\n    <textarea\r\n      class=\"cc-input\"\r\n      id=\"ccInput\"\r\n      placeholder=\"Ask a question about cardiology...\"\r\n      rows=\"1\"\r\n      onkeydown=\"ccHandleKey(event)\"\r\n      oninput=\"ccAutoResize(this)\"\r\n    ><\/textarea>\r\n    <button class=\"cc-send\" id=\"ccSendBtn\" onclick=\"ccSend()\" title=\"Envoyer\">\r\n      <svg viewbox=\"0 0 24 24\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"\/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"\/><\/svg>\r\n    <\/button>\r\n  <\/div>\r\n\r\n  <div class=\"cc-footer\">\r\n    \u2695\ufe0f For educational purposes only \u2014 always verify with device manuals and consult a qualified professional\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\nvar CC_WORKER_URL = \"https:\/\/cardiocases-chatbot.lvkrimpen00.workers.dev\";\r\n\r\nvar ccHistory   = [];\r\nvar ccIsLoading = false;\r\n\r\nfunction ccHandleKey(e) {\r\n  if (e.key === \"Enter\" && !e.shiftKey) {\r\n    e.preventDefault();\r\n    ccSend();\r\n  }\r\n}\r\n\r\nfunction ccAutoResize(el) {\r\n  el.style.height = \"auto\";\r\n  el.style.height = Math.min(el.scrollHeight, 120) + \"px\";\r\n}\r\n\r\nfunction ccAskSuggestion(btn) {\r\n  document.getElementById(\"ccInput\").value = btn.textContent;\r\n  ccSend();\r\n}\r\n\r\n\/* \u2500\u2500 Format raw text into safe HTML \u2500\u2500 *\/\r\nfunction ccFormatText(text) {\r\n  return text\r\n    .replace(\/&\/g, \"&amp;\")\r\n    .replace(\/<\/g, \"&lt;\")\r\n    .replace(\/>\/g, \"&gt;\")\r\n    .replace(\/\\*\\*(.+?)\\*\\*\/g, \"<strong>$1<\/strong>\")\r\n    .replace(\/\\*(.+?)\\*\/g, \"<em>$1<\/em>\")\r\n    .replace(\/`(.+?)`\/g, \"<code>$1<\/code>\")\r\n    .replace(\/\\n\/g, \"<br>\");\r\n}\r\n\r\n\/* \u2500\u2500 Render sources into a bubble \u2500\u2500 *\/\r\nfunction ccRenderSources(bubble, sources) {\r\n  if (!sources || sources.length === 0) return;\r\n\r\n  var src = document.createElement(\"div\");\r\n  src.className = \"cc-sources\";\r\n\r\n  var heading = document.createElement(\"span\");\r\n  heading.className = \"cc-sources-heading\";\r\n  heading.textContent = \"Sources\";\r\n  src.appendChild(heading);\r\n\r\n  for (var i = 0; i < sources.length; i++) {\r\n    var s = sources[i];\r\n    var label = null;\r\n    var url   = null;\r\n\r\n    if (s !== null && typeof s === \"object\") {\r\n      label = s.label || null;\r\n      url   = s.url   || null;\r\n    } else {\r\n      var raw = String(s);\r\n      if (raw.startsWith(\"http\")) { url = raw; label = raw; }\r\n      else { label = raw; }\r\n    }\r\n\r\n    if (url) {\r\n      var a = document.createElement(\"a\");\r\n      a.href = url;\r\n      a.target = \"_blank\";\r\n      a.rel = \"noopener\";\r\n      a.textContent = label || url;\r\n      src.appendChild(a);\r\n    } else if (label) {\r\n      var span = document.createElement(\"span\");\r\n      span.className = \"cc-source-text\";\r\n      span.textContent = label;\r\n      src.appendChild(span);\r\n    }\r\n  }\r\n\r\n  bubble.appendChild(src);\r\n}\r\n\r\n\/* \u2500\u2500 Add a complete (non-streaming) message \u2500\u2500 *\/\r\nfunction ccAddMessage(role, text) {\r\n  var msgs = document.getElementById(\"ccMessages\");\r\n\r\n  var wrapper = document.createElement(\"div\");\r\n  wrapper.className = \"cc-msg \" + role;\r\n\r\n  var avatar = document.createElement(\"div\");\r\n  avatar.className = \"cc-avatar\";\r\n  avatar.textContent = role === \"user\" ? \"You\" : \"CC\";\r\n\r\n  var bubble = document.createElement(\"div\");\r\n  bubble.className = \"cc-bubble\";\r\n  bubble.innerHTML = ccFormatText(text);\r\n\r\n  wrapper.appendChild(avatar);\r\n  wrapper.appendChild(bubble);\r\n  msgs.appendChild(wrapper);\r\n  \/\/ Scroll inside the chat container so this message is at the top\r\n  msgs.scrollTop = wrapper.offsetTop - msgs.offsetTop;\r\n\r\n  return bubble;\r\n}\r\n\r\n\/* \u2500\u2500 Show typing indicator \u2500\u2500 *\/\r\nfunction ccShowTyping() {\r\n  var msgs = document.getElementById(\"ccMessages\");\r\n  var wrapper = document.createElement(\"div\");\r\n  wrapper.className = \"cc-msg bot cc-typing\";\r\n\r\n  var avatar = document.createElement(\"div\");\r\n  avatar.className = \"cc-avatar\";\r\n  avatar.textContent = \"CC\";\r\n\r\n  var bubble = document.createElement(\"div\");\r\n  bubble.className = \"cc-bubble\";\r\n  bubble.innerHTML = '<div class=\"cc-dots\"><span><\/span><span><\/span><span><\/span><\/div>';\r\n\r\n  wrapper.appendChild(avatar);\r\n  wrapper.appendChild(bubble);\r\n  msgs.appendChild(wrapper);\r\n  return wrapper;\r\n}\r\n\r\n\/* \u2500\u2500 Create an empty bot bubble ready for streaming \u2500\u2500 *\/\r\nfunction ccCreateStreamBubble() {\r\n  var msgs = document.getElementById(\"ccMessages\");\r\n\r\n  var wrapper = document.createElement(\"div\");\r\n  wrapper.className = \"cc-msg bot\";\r\n\r\n  var avatar = document.createElement(\"div\");\r\n  avatar.className = \"cc-avatar\";\r\n  avatar.textContent = \"CC\";\r\n\r\n  var bubble = document.createElement(\"div\");\r\n  bubble.className = \"cc-bubble\";\r\n\r\n  var textSpan = document.createElement(\"span\");\r\n  textSpan.className = \"cc-stream-text\";\r\n  bubble.appendChild(textSpan);\r\n\r\n  wrapper.appendChild(avatar);\r\n  wrapper.appendChild(bubble);\r\n  msgs.appendChild(wrapper);\r\n\r\n  return { bubble: bubble, textEl: textSpan, wrapper: wrapper };\r\n}\r\n\r\n\/* \u2500\u2500 Main send function with SSE streaming \u2500\u2500 *\/\r\nasync function ccSend() {\r\n  if (ccIsLoading) return;\r\n  var input = document.getElementById(\"ccInput\");\r\n  var question = input.value.trim();\r\n  if (!question) return;\r\n\r\n  var welcome = document.querySelector(\".cc-welcome\");\r\n  if (welcome) welcome.remove();\r\n\r\n  input.value = \"\";\r\n  input.style.height = \"auto\";\r\n\r\n  ccAddMessage(\"user\", question);\r\n  ccHistory.push({ role: \"user\", content: question });\r\n\r\n  var typingEl = ccShowTyping();\r\n  ccIsLoading = true;\r\n  document.getElementById(\"ccSendBtn\").disabled = true;\r\n\r\n  var fullAnswer   = \"\";\r\n  var sources      = [];\r\n  var streamBubble = null;\r\n\r\n  try {\r\n    var res = await fetch(CC_WORKER_URL, {\r\n      method:  \"POST\",\r\n      headers: { \"Content-Type\": \"application\/json\" },\r\n      body:    JSON.stringify({ question: question, history: ccHistory.slice(-8) }),\r\n    });\r\n\r\n    var contentType = res.headers.get(\"content-type\") || \"\";\r\n\r\n    \/* \u2500\u2500 SSE streaming response \u2500\u2500 *\/\r\n    if (contentType.indexOf(\"text\/event-stream\") !== -1) {\r\n\r\n      var reader = res.body.getReader();\r\n      var decoder = new TextDecoder();\r\n      var buffer = \"\";\r\n      var typingRemoved = false;\r\n\r\n      while (true) {\r\n        var result = await reader.read();\r\n        if (result.done) break;\r\n\r\n        buffer += decoder.decode(result.value, { stream: true });\r\n        var lines = buffer.split(\"\\n\");\r\n        buffer = lines.pop() || \"\";\r\n\r\n        for (var i = 0; i < lines.length; i++) {\r\n          var line = lines[i];\r\n          if (!line.startsWith(\"data: \")) continue;\r\n          var payload = line.slice(6).trim();\r\n          if (payload === \"[DONE]\") continue;\r\n\r\n          try {\r\n            var event = JSON.parse(payload);\r\n\r\n            if (event.type === \"sources\") {\r\n              sources = event.sources || [];\r\n            }\r\n\r\n            if (event.type === \"text\") {\r\n              \/\/ Remove typing indicator on first text chunk\r\n              if (!typingRemoved) {\r\n                typingEl.remove();\r\n                typingRemoved = true;\r\n                streamBubble = ccCreateStreamBubble();\r\n              }\r\n\r\n              fullAnswer += event.text;\r\n              \/\/ Re-render with formatting on each chunk\r\n              streamBubble.textEl.innerHTML = ccFormatText(fullAnswer);\r\n            }\r\n\r\n            if (event.type === \"error\") {\r\n              if (!typingRemoved) { typingEl.remove(); typingRemoved = true; }\r\n              ccAddMessage(\"bot\", \"Sorry, I encountered an error. Please try again.\");\r\n            }\r\n\r\n          } catch (e) {\r\n            \/\/ Skip unparseable lines\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ Remove typing if we never got text (edge case)\r\n      if (!typingRemoved) typingEl.remove();\r\n\r\n      \/\/ Append sources to the bubble after streaming completes\r\n      if (streamBubble && sources.length > 0) {\r\n        ccRenderSources(streamBubble.bubble, sources);\r\n      }\r\n\r\n      if (fullAnswer) {\r\n        ccHistory.push({ role: \"assistant\", content: fullAnswer });\r\n      }\r\n\r\n    \/* \u2500\u2500 Fallback: regular JSON response (e.g. \"no results\" case) \u2500\u2500 *\/\r\n    } else {\r\n      typingEl.remove();\r\n      var data = await res.json();\r\n\r\n      if (data.error) {\r\n        ccAddMessage(\"bot\", \"Sorry, I encountered an error. Please try again.\");\r\n      } else {\r\n        var bubble = ccAddMessage(\"bot\", data.answer || \"No answer received.\");\r\n        if (data.sources && data.sources.length > 0) {\r\n          ccRenderSources(bubble, data.sources);\r\n        }\r\n        ccHistory.push({ role: \"assistant\", content: data.answer });\r\n      }\r\n    }\r\n\r\n  } catch (err) {\r\n    typingEl.remove();\r\n    ccAddMessage(\"bot\", \"Could not reach the server. Please check your connection and try again.\");\r\n    console.error(err);\r\n  } finally {\r\n    ccIsLoading = false;\r\n    document.getElementById(\"ccSendBtn\").disabled = false;\r\n    input.focus();\r\n  }\r\n}\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>CardioCases Assistant Cardiac pacing, defibrillation &amp; ECG Online Welcome to the CardioCases Assistant Ask me anything about cardiac pacing, ICD programming, CRT, ECG interpretation, or device-specific settings. What is CRT? How does an ICD detect VF? Explain AV delay optimization Medtronic pacing modes \u2695\ufe0f For educational purposes only \u2014 always verify with device manuals and [&hellip;]<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-9349","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cardiocases Chatbot - Cardiocases<\/title>\n<meta name=\"description\" content=\"Cardiocases Chatbot\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cardiocases.com\/fr\/cardiocases-chatbot\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cardiocases Chatbot - Cardiocases\" \/>\n<meta property=\"og:description\" content=\"Cardiocases Chatbot\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cardiocases.com\/fr\/cardiocases-chatbot\/\" \/>\n<meta property=\"og:site_name\" content=\"Cardiocases\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-25T13:18:22+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cardiocases.com\/cardiocases-chatbot\/\",\"url\":\"https:\/\/cardiocases.com\/cardiocases-chatbot\/\",\"name\":\"Cardiocases Chatbot - Cardiocases\",\"isPartOf\":{\"@id\":\"https:\/\/cardiocases.com\/#website\"},\"datePublished\":\"2026-03-23T12:17:11+00:00\",\"dateModified\":\"2026-03-25T13:18:22+00:00\",\"description\":\"Cardiocases Chatbot\",\"breadcrumb\":{\"@id\":\"https:\/\/cardiocases.com\/cardiocases-chatbot\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cardiocases.com\/cardiocases-chatbot\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cardiocases.com\/cardiocases-chatbot\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cardiocases.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cardiocases Chatbot\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cardiocases.com\/#website\",\"url\":\"https:\/\/cardiocases.com\/\",\"name\":\"Cardiocases\",\"description\":\"Real cardiac device traces, pacemaker &amp; ICD learning \u2014 built by electrophysiologists\",\"publisher\":{\"@id\":\"https:\/\/cardiocases.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cardiocases.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cardiocases.com\/#organization\",\"name\":\"Cardiocases\",\"url\":\"https:\/\/cardiocases.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/cardiocases.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cardiocases.com\/wp-content\/uploads\/2025\/07\/cardiocases_logo.png\",\"contentUrl\":\"https:\/\/cardiocases.com\/wp-content\/uploads\/2025\/07\/cardiocases_logo.png\",\"width\":1755,\"height\":499,\"caption\":\"Cardiocases\"},\"image\":{\"@id\":\"https:\/\/cardiocases.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cardiocases\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cardiocases Chatbot - Cardiocases","description":"Cardiocases Chatbot","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cardiocases.com\/fr\/cardiocases-chatbot\/","og_locale":"fr_FR","og_type":"article","og_title":"Cardiocases Chatbot - Cardiocases","og_description":"Cardiocases Chatbot","og_url":"https:\/\/cardiocases.com\/fr\/cardiocases-chatbot\/","og_site_name":"Cardiocases","article_modified_time":"2026-03-25T13:18:22+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cardiocases.com\/cardiocases-chatbot\/","url":"https:\/\/cardiocases.com\/cardiocases-chatbot\/","name":"Cardiocases Chatbot - Cardiocases","isPartOf":{"@id":"https:\/\/cardiocases.com\/#website"},"datePublished":"2026-03-23T12:17:11+00:00","dateModified":"2026-03-25T13:18:22+00:00","description":"Cardiocases Chatbot","breadcrumb":{"@id":"https:\/\/cardiocases.com\/cardiocases-chatbot\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cardiocases.com\/cardiocases-chatbot\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cardiocases.com\/cardiocases-chatbot\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cardiocases.com\/"},{"@type":"ListItem","position":2,"name":"Cardiocases Chatbot"}]},{"@type":"WebSite","@id":"https:\/\/cardiocases.com\/#website","url":"https:\/\/cardiocases.com\/","name":"Cardiocases","description":"Real cardiac device traces, pacemaker &amp; ICD learning \u2014 built by electrophysiologists","publisher":{"@id":"https:\/\/cardiocases.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cardiocases.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/cardiocases.com\/#organization","name":"Cardiocases","url":"https:\/\/cardiocases.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/cardiocases.com\/#\/schema\/logo\/image\/","url":"https:\/\/cardiocases.com\/wp-content\/uploads\/2025\/07\/cardiocases_logo.png","contentUrl":"https:\/\/cardiocases.com\/wp-content\/uploads\/2025\/07\/cardiocases_logo.png","width":1755,"height":499,"caption":"Cardiocases"},"image":{"@id":"https:\/\/cardiocases.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cardiocases\/"]}]}},"_links":{"self":[{"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/pages\/9349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/comments?post=9349"}],"version-history":[{"count":43,"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/pages\/9349\/revisions"}],"predecessor-version":[{"id":9397,"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/pages\/9349\/revisions\/9397"}],"wp:attachment":[{"href":"https:\/\/cardiocases.com\/fr\/wp-json\/wp\/v2\/media?parent=9349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}