{"id":31447,"date":"2026-08-26T14:50:00","date_gmt":"2026-08-26T12:50:00","guid":{"rendered":"https:\/\/botnation.ai\/?p=31447"},"modified":"2026-08-26T17:48:31","modified_gmt":"2026-08-26T15:48:31","slug":"chatbot-webhook","status":"publish","type":"post","link":"https:\/\/botnation.ai\/fr\/chatbot-webhook\/","title":{"rendered":"Chatbot webhook : comment connecter votre bot \u00e0 vos outils en temps r\u00e9el"},"content":{"rendered":"<p><script>(function(){var s=document.createElement(\"style\");s.appendChild(document.createTextNode(\".bn-art{ --bn-cream:#faf8f2; --bn-card:#faf6ea; --bn-sand:#ebe3cb; --bn-sand-2:#f3ecd9; --bn-sand-zebra:#f6f0df; --bn-coral:#fe716b; --bn-coral-soft:#fdeeed; --bn-coral-line:#f6c9c6; --bn-coral-txt:#bd3a34; --bn-blue:#3358f0; --bn-blue-soft:#eef1fe; --bn-blue-line:#c9d4fb; --bn-green:#427632; --bn-green-soft:#eef6ea; --bn-ink:#3d351f; --bn-text:#414b56; --bn-muted:#6d6653; --bn-border:#e6dcc2; --bn-r:16px; --bn-r-sm:11px; --bn-sp:22px; --bn-sh:0 1px 2px rgba(61,53,31,.05),0 10px 26px rgba(61,53,31,.07); --bn-sh-sm:0 1px 2px rgba(61,53,31,.05),0 4px 12px rgba(61,53,31,.05); --bn-mono:'IBM Plex Mono','SFMono-Regular',ui-monospace,'Courier New',monospace; color:var(--bn-text); font-size:18px; line-height:1.75; max-width:820px; margin:0 auto; } .bn-art *{box-sizing:border-box} .bn-art p{margin:0 0 1.15em; color:var(--bn-text)} .bn-art h2{ color:var(--bn-ink); font-weight:700; line-height:1.25; font-size:1.72em; margin:2.2em 0 .7em; letter-spacing:-.01em; } .bn-art h3{color:var(--bn-ink); font-weight:700; font-size:1.22em; margin:1.8em 0 .5em} .bn-art a{color:#3f5cd6; text-decoration:underline; text-underline-offset:2px; text-decoration-thickness:1px} .bn-art a:hover{color:var(--bn-coral)} .bn-art strong{color:var(--bn-ink); font-weight:700} .bn-art ul,.bn-art ol{margin:0 0 1.3em; padding-left:1.25em} .bn-art li{margin:.4em 0} .bn-art ul li::marker{color:var(--bn-coral)} .bn-art ol li::marker{color:var(--bn-blue); font-weight:700} .bn-klabel{ display:inline-flex; align-items:center; gap:7px; font-family:var(--bn-mono); font-size:14px; font-weight:600; text-transform:uppercase; letter-spacing:.12em; color:var(--bn-coral); margin:0 0 .2em; } .bn-klabel svg{width:15px;height:15px;flex:none} .bn-tldr{ background:var(--bn-card); border:1px solid var(--bn-border); border-left:4px solid var(--bn-coral); border-radius:var(--bn-r); padding:20px 24px; margin:0 0 30px; box-shadow:var(--bn-sh-sm); } .bn-tldr p{margin:0; color:var(--bn-text)} .bn-tldr p+p{margin-top:.6em} .bn-toc{ background:var(--bn-sand-2); border:1px solid var(--bn-sand); border-radius:var(--bn-r); padding:18px 22px; margin:0 0 34px; } .bn-toc .bn-klabel{color:var(--bn-coral)} .bn-toc ol{margin:.4em 0 0; padding-left:1.2em; columns:2; column-gap:28px} .bn-toc li{margin:.25em 0; break-inside:avoid} .bn-toc a{color:var(--bn-ink); text-decoration:none; font-weight:600; font-size:.96em} .bn-toc a:hover{color:var(--bn-coral); text-decoration:underline} .bn-stats{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin:28px 0} .bn-stat{ background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:20px 18px; text-align:center; box-shadow:var(--bn-sh-sm); } .bn-stat b{display:block; font-size:2em; line-height:1.1; color:var(--bn-coral); font-weight:800; letter-spacing:-.02em} .bn-stat span{display:block; margin-top:6px; font-size:.86em; color:var(--bn-muted); line-height:1.45} .bn-stat:nth-child(2) b{color:var(--bn-blue)} .bn-stat:nth-child(3) b{color:var(--bn-ink)} .bn-grid{display:grid; grid-template-columns:1fr 1fr; gap:18px; margin:26px 0} .bn-card{ background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:22px; box-shadow:var(--bn-sh-sm); } .bn-card h4{margin:.1em 0 .35em; color:var(--bn-ink); font-size:1.06em; font-weight:700; display:flex; gap:9px; align-items:center} .bn-card h4 svg{width:20px;height:20px;flex:none;color:var(--bn-coral)} .bn-card p{margin:0; font-size:.96em} .bn-ex{ background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:20px 0; box-shadow:var(--bn-sh); position:relative; } .bn-ex-h{display:flex; align-items:center; gap:13px; margin-bottom:14px} .bn-ex-n{ flex:none; width:38px; height:38px; border-radius:11px; background:var(--bn-coral-soft); color:var(--bn-coral); display:flex; align-items:center; justify-content:center; font-weight:800; font-size:1.1em; font-family:var(--bn-mono); } .bn-ex-h h3{margin:0; font-size:1.18em} .bn-ex-tag{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.1em; color:var(--bn-muted); display:block; margin-top:2px} .bn-ex p{margin:.2em 0 .9em} .bn-ex .bn-ba{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:14px} .bn-ba div{border-radius:var(--bn-r-sm); padding:13px 15px; font-size:.9em; line-height:1.5} .bn-ba .biz{background:var(--bn-blue-soft); border:1px solid var(--bn-blue-line)} .bn-ba .cli{background:var(--bn-green-soft); border:1px solid #cfe6c4} .bn-ba b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; margin-bottom:4px; color:var(--bn-muted)} .bn-tablewrap{overflow-x:auto; margin:26px 0; border-radius:var(--bn-r); border:1px solid var(--bn-border); box-shadow:var(--bn-sh-sm)} .bn-art table{width:100%; border-collapse:collapse; background:var(--bn-card); font-size:.94em; min-width:520px} .bn-art thead th{background:var(--bn-ink); color:#fbf7ec; text-align:left; font-weight:700; padding:13px 16px; font-size:16px} .bn-art tbody td{padding:12px 16px; border-top:1px solid var(--bn-border); color:var(--bn-text); vertical-align:top; font-size:16px} .bn-art tbody tr:nth-child(even){background:var(--bn-sand-zebra)} .bn-art tbody td:first-child{font-weight:700; color:var(--bn-ink)} .bn-cols{display:grid; grid-template-columns:1fr 1fr; gap:18px; margin:26px 0} .bn-col{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:22px; box-shadow:var(--bn-sh-sm)} .bn-col h4{margin:0 0 12px; font-size:1.05em; color:var(--bn-ink); display:flex; align-items:center; gap:9px} .bn-col h4 svg{width:20px;height:20px;flex:none} .bn-col.biz h4 svg{color:var(--bn-blue)} .bn-col.cli h4 svg{color:var(--bn-green)} .bn-col.warn h4 svg{color:var(--bn-coral)} .bn-col ul{margin:0; padding:0; list-style:none} .bn-col li{position:relative; padding-left:26px; margin:.55em 0; font-size:.96em} .bn-col li::before{content:''; position:absolute; left:0; top:.5em; width:13px; height:13px; border-radius:50%; background:var(--bn-coral-soft); border:2px solid var(--bn-coral)} .bn-col.biz li::before{background:var(--bn-blue-soft); border-color:var(--bn-blue)} .bn-col.cli li::before{background:var(--bn-green-soft); border-color:var(--bn-green)} .bn-call{ display:flex; gap:14px; border-radius:var(--bn-r); padding:18px 20px; margin:24px 0; background:var(--bn-card); border:1px solid var(--bn-border); box-shadow:var(--bn-sh-sm); } .bn-call svg{width:22px; height:22px; flex:none; margin-top:1px} .bn-call b{color:var(--bn-ink)} .bn-call p{margin:0; font-size:.95em} .bn-call .bn-klabel{margin-bottom:3px} .bn-tip{border-left:4px solid var(--bn-green)} .bn-tip svg{color:var(--bn-green)} .bn-tip .bn-klabel{color:var(--bn-green)} .bn-warn{border-left:4px solid var(--bn-coral)} .bn-warn svg{color:var(--bn-coral)} .bn-warn .bn-klabel{color:var(--bn-coral)} .bn-info{border-left:4px solid var(--bn-blue)} .bn-info svg{color:var(--bn-blue)} .bn-info .bn-klabel{color:var(--bn-blue)} .bn-def{background:var(--bn-blue-soft); border:1px solid var(--bn-blue-line); border-radius:var(--bn-r); padding:20px 24px; margin:24px 0} .bn-def .bn-klabel{color:var(--bn-blue)} .bn-def p{margin:0} .bn-steps{counter-reset:s; list-style:none; padding:0; margin:24px 0} .bn-steps li{position:relative; padding:0 0 4px 56px; margin:0 0 18px; min-height:40px} .bn-steps li::before{ counter-increment:s; content:counter(s); position:absolute; left:0; top:0; width:40px; height:40px; border-radius:12px; background:var(--bn-coral); color:#fff; font-weight:800; font-family:var(--bn-mono); display:flex; align-items:center; justify-content:center; box-shadow:var(--bn-sh-sm); } .bn-steps li b{display:block; color:var(--bn-ink); margin-bottom:2px} .bn-check{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-check h3{margin:.1em 0 .3em} .bn-check>p{font-size:.95em; color:var(--bn-muted); margin-bottom:14px} .bn-check ul{list-style:none; padding:0; margin:0 0 18px} .bn-check li{margin:0; border-top:1px solid var(--bn-border)} .bn-check li:first-child{border-top:none} .bn-check label{display:flex; align-items:flex-start; gap:13px; padding:12px 2px; cursor:pointer; font-size:.97em; color:var(--bn-text)} .bn-check input{appearance:none; -webkit-appearance:none; flex:none; width:22px; height:22px; margin-top:1px; border:2px solid var(--bn-coral-line); border-radius:7px; background:#fff; cursor:pointer; position:relative; transition:.15s} .bn-check input:checked{background:var(--bn-coral); border-color:var(--bn-coral)} .bn-check input:checked::after{content:''; position:absolute; left:6px; top:2px; width:6px; height:11px; border:solid #fff; border-width:0 2.5px 2.5px 0; transform:rotate(45deg)} .bn-result{border-radius:var(--bn-r-sm); padding:16px 18px; background:var(--bn-coral-soft); border:1px solid var(--bn-coral-line); font-size:.96em} .bn-result b{color:var(--bn-ink)} .bn-result .bn-score{font-family:var(--bn-mono); font-weight:700; color:var(--bn-coral)} .bn-result .bnc-res{display:none; margin-top:10px} .bn-result .bnc-res.on{display:block} .bn-result .bnc-res p{margin:0; color:var(--bn-text)} .bn-faq{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); margin:0 0 12px; box-shadow:var(--bn-sh-sm); overflow:hidden} .bn-faq summary{cursor:pointer; padding:17px 20px; font-weight:700; color:var(--bn-ink); list-style:none; display:flex; justify-content:space-between; align-items:center; gap:14px; font-size:1.03em} .bn-faq summary::-webkit-details-marker{display:none} .bn-faq summary::after{content:'+'; font-family:var(--bn-mono); font-size:1.5em; color:var(--bn-coral); flex:none; line-height:1; transition:transform .2s} .bn-faq[open] summary::after{transform:rotate(45deg)} .bn-faq .bn-faq-b{padding:0 20px 18px; color:var(--bn-text)} .bn-faq .bn-faq-b p{margin:0} .bn-fig{margin:30px 0; text-align:center} .bn-fig img{width:100%; height:auto; border-radius:var(--bn-r); box-shadow:var(--bn-sh); display:block} .bn-fig figcaption{margin-top:10px; font-size:.85em; color:var(--bn-muted); font-style:italic} .bn-cta{background:var(--bn-ink); border-radius:var(--bn-r); padding:34px 32px; margin:36px 0 12px; text-align:center} .bn-cta h3{color:#fff; margin:0 0 .4em; font-size:1.4em} .bn-cta p{color:#e9e2cf; margin:0 auto 20px; max-width:560px; font-size:1em} .bn-cta-btn{display:inline-block; background:var(--bn-coral); color:#332c19 !important; text-decoration:none !important; font-weight:800; padding:15px 34px; border-radius:999px; font-size:1.02em; box-shadow:0 8px 22px rgba(254,113,107,.35); transition:.15s} .bn-cta-btn:hover{background:#ff8782; color:#fff !important} .bn-quiz{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-quiz .bnq-q{padding:14px 0; border-top:1px solid var(--bn-border)} .bn-quiz .bnq-q:first-of-type{border-top:none; padding-top:4px} .bn-quiz .bnq-qt{font-weight:700; color:var(--bn-ink); margin:0 0 10px; font-size:1.02em} .bn-quiz .bnq-opt{display:flex; align-items:flex-start; gap:12px; padding:9px 12px; margin:6px 0; cursor:pointer; font-size:.96em; color:var(--bn-text); border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); background:#fff; transition:.15s} .bn-quiz .bnq-opt:hover{border-color:var(--bn-coral-line); background:var(--bn-coral-soft)} .bn-quiz .bnq-opt input{appearance:none; -webkit-appearance:none; flex:none; width:20px; height:20px; margin-top:1px; border:2px solid var(--bn-coral-line); border-radius:50%; background:#fff; cursor:pointer; position:relative; transition:.15s} .bn-quiz .bnq-opt input:checked{border-color:var(--bn-coral)} .bn-quiz .bnq-opt input:checked::after{content:''; position:absolute; left:3px; top:3px; width:10px; height:10px; border-radius:50%; background:var(--bn-coral)} .bn-quiz .bnq-opt:has(input:checked){border-color:var(--bn-coral); background:var(--bn-coral-soft)} .bn-quiz .bnq-btn{margin-top:16px; display:inline-block; background:var(--bn-coral); color:#332c19; border:none; font-weight:800; font-size:1em; padding:13px 30px; border-radius:999px; cursor:pointer; box-shadow:0 6px 16px rgba(254,113,107,.28); transition:.15s; font-family:inherit} .bn-quiz .bnq-btn:hover{background:#ff8782} .bn-quiz .bnq-res{display:none; margin-top:18px; padding:18px 20px; border-radius:var(--bn-r-sm); background:var(--bn-blue-soft); border:1px solid var(--bn-blue-line)} .bn-quiz .bnq-res.on{display:block} .bn-quiz #bnq-agent{background:var(--bn-coral-soft); border-color:var(--bn-coral-line)} .bn-quiz #bnq-hybrid{background:var(--bn-green-soft); border-color:#cfe6c4} .bn-quiz .bnq-rt{font-weight:800; color:var(--bn-ink); margin:0 0 6px; font-size:1.08em} .bn-quiz .bnq-res p{margin:0} .bn-spectrum{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-spectrum h3{margin:.1em 0 .3em} .bn-spectrum>p{font-size:.95em; color:var(--bn-muted); margin:0 0 20px} .bn-spec-track{margin:26px 4px 4px} .bn-spec-range{-webkit-appearance:none; appearance:none; width:100%; height:8px; border-radius:999px; background:var(--bn-sand); outline:none; cursor:pointer; margin:0} .bn-spec-range::-webkit-slider-thumb{-webkit-appearance:none; appearance:none; width:26px; height:26px; border-radius:50%; background:var(--bn-coral); border:3px solid #fff; box-shadow:var(--bn-sh-sm); cursor:pointer} .bn-spec-range::-moz-range-thumb{width:26px; height:26px; border-radius:50%; background:var(--bn-coral); border:3px solid #fff; box-shadow:var(--bn-sh-sm); cursor:pointer} .bn-spec-stops{display:flex; justify-content:space-between; margin-top:13px; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.07em; color:var(--bn-muted); gap:8px} .bn-spec-stops span{flex:1; cursor:pointer; transition:.15s; text-align:center} .bn-spec-stops span:first-child{text-align:left} .bn-spec-stops span:last-child{text-align:right} .bn-spec-stops span.on{color:var(--bn-coral); font-weight:700} .bns-pane{display:none; margin-top:22px; border-radius:var(--bn-r-sm); padding:20px 22px; background:var(--bn-sand-2); border:1px solid var(--bn-sand)} .bns-pane.on{display:block} .bns-pane h4{margin:0 0 3px; color:var(--bn-ink); font-size:1.14em} .bns-tag{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.1em; color:var(--bn-coral); display:block; margin-bottom:11px} .bns-pane>p{margin:0; font-size:.96em; color:var(--bn-text)} .bns-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:15px} .bns-grid div{background:#fff; border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); padding:11px 14px; font-size:.9em; color:var(--bn-text)} .bns-grid b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.07em; color:var(--bn-muted); margin-bottom:3px} .bn-roi{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-roi h3{margin:.1em 0 .3em} .bn-roi>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-roi-fields{display:grid; grid-template-columns:1fr 1fr; gap:20px 28px; margin:18px 0 24px} .bn-roi-field:last-child{grid-column:1\/-1} .bn-roi-field label{display:block; font-size:.9em; color:var(--bn-text); font-weight:600; margin-bottom:11px} .bn-roi-field output{font-family:var(--bn-mono); font-weight:700; color:var(--bn-coral)} .bn-roi-out{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:4px} .bn-roi-stat{background:var(--bn-sand-2); border:1px solid var(--bn-sand); border-radius:var(--bn-r); padding:20px 16px; text-align:center} .bn-roi-stat b{display:block; font-size:1.85em; line-height:1.05; color:var(--bn-coral); font-weight:800; letter-spacing:-.02em; font-family:var(--bn-mono)} .bn-roi-stat:nth-child(2) b{color:var(--bn-blue)} .bn-roi-stat:nth-child(3) b{color:var(--bn-ink)} .bn-roi-stat span{display:block; margin-top:7px; font-size:.82em; color:var(--bn-muted); line-height:1.4} .bn-roi-note{font-size:16px; color:var(--bn-muted); margin:16px 0 0; font-style:italic} .bn-bot{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:22px 24px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-bot h3{margin:.1em 0 .3em} .bn-bot>p{font-size:.95em; color:var(--bn-muted); margin:0 0 16px} .bn-bot-win{border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); background:#fff; overflow:hidden} .bn-bot-bar{display:flex; align-items:center; gap:11px; padding:12px 16px; background:var(--bn-sand-2); border-bottom:1px solid var(--bn-border)} .bn-bot-ava{flex:none; width:32px; height:32px; border-radius:50%; background:var(--bn-coral-soft); display:flex; align-items:center; justify-content:center} .bn-bot-ava svg{width:19px; height:19px; color:var(--bn-coral)} .bn-bot-id b{display:block; color:var(--bn-ink); font-size:.95em; line-height:1.2} .bn-bot-id span{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-green); display:inline-flex; align-items:center; gap:5px} .bn-bot-id span::before{content:''; width:7px; height:7px; border-radius:50%; background:var(--bn-green)} .bn-bot-log{padding:16px; min-height:130px; max-height:320px; overflow-y:auto; display:flex; flex-direction:column; gap:10px} .bn-bot-msg{max-width:82%; padding:10px 14px; border-radius:15px; font-size:.95em; line-height:1.5} .bn-bot-msg.bot{align-self:flex-start; background:var(--bn-sand-2); color:var(--bn-text); border-bottom-left-radius:4px} .bn-bot-msg.user{align-self:flex-end; background:var(--bn-coral); color:#332c19; border-bottom-right-radius:4px} .bn-bot-quick{display:flex; flex-wrap:wrap; gap:8px; padding:2px 16px 14px} .bn-art .bn-bot-qbtn{font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:7px 14px; cursor:pointer; transition:.15s} .bn-art .bn-bot-qbtn:hover{background:var(--bn-coral-soft); border-color:var(--bn-coral)} .bn-bot-form{display:flex; gap:8px; padding:12px 16px; border-top:1px solid var(--bn-border); background:var(--bn-sand-2)} .bn-bot-input{flex:1; min-width:0; font-family:inherit; font-size:.95em; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-border); border-radius:999px; padding:10px 16px; outline:none} .bn-bot-input:focus{border-color:var(--bn-coral)} .bn-art .bn-bot-send{flex:none; font-family:inherit; font-weight:700; font-size:16px; color:#fff; background:var(--bn-coral); border:none; border-radius:999px; padding:10px 20px; cursor:pointer; transition:.15s} .bn-art .bn-bot-send:hover{background:#ff8782} .bn-art .bn-bot-note{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic} .bbot-kb,.bbot-fallback{display:none} .bn-shot{margin:16px 0 2px; border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); background:#fff; overflow:hidden} .bn-shot-bar{display:flex; align-items:center; gap:8px; padding:9px 13px; background:var(--bn-sand-2); border-bottom:1px solid var(--bn-border)} .bn-shot-dot{width:8px;height:8px;border-radius:50%;background:var(--bn-green);flex:none} .bn-shot-bar b{color:var(--bn-ink); font-size:.9em} .bn-shot-bar span{margin-left:auto; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.06em; color:var(--bn-muted)} .bn-shot-log{padding:13px 14px; display:flex; flex-direction:column; gap:8px} .bn-shot .bn-bot-msg{max-width:86%; font-size:.9em} .bn-shot-quick{display:flex; flex-wrap:wrap; gap:6px; margin-top:2px} .bn-shot-quick span{font-size:14px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:4px 11px} .bn-exlink{margin:13px 0 0; font-weight:700; display:flex; align-items:center; gap:6px} .bn-exlink svg{width:16px;height:16px;flex:none;color:var(--bn-coral)} .bn-lb{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-lb h3{margin:.1em 0 .3em} .bn-lb>p{font-size:.95em; color:var(--bn-muted); margin:0 0 16px} .bn-lb-ctrl{display:flex; flex-wrap:wrap; gap:11px; align-items:center; margin:0 0 16px} .bn-lb-ctrl br{display:none} .bn-lb-search{flex:1; min-width:200px; font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-border); border-radius:999px; padding:11px 18px; outline:none} .bn-lb-search:focus{border-color:var(--bn-coral)} .bn-lb-filters{display:flex; flex-wrap:wrap; gap:8px} .bn-art .bn-lb-fbtn{font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:9px 16px; cursor:pointer; transition:.15s} .bn-art .bn-lb-fbtn:hover{background:var(--bn-coral-soft)} .bn-art .bn-lb-fbtn.on{background:var(--bn-coral); color:#fff; border-color:var(--bn-coral)} .bn-lb .bn-lb-th{cursor:pointer; user-select:none; white-space:nowrap} .bn-lb .bn-lb-th:hover{color:#fbf7ec; opacity:.85} .bn-lb-rank{font-family:var(--bn-mono); font-weight:700; color:var(--bn-coral); text-align:center} .bn-lb-score{font-family:var(--bn-mono); font-weight:700; color:var(--bn-ink); text-align:right; white-space:nowrap} .lb-empty{padding:16px; text-align:center; color:var(--bn-muted); font-size:.95em} .bn-lb-foot{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic} @media(max-width:680px){ .bn-art{font-size:17px} .bn-stats,.bn-grid,.bn-cols,.bn-ex .bn-ba,.bns-grid,.bn-roi-fields,.bn-roi-out{grid-template-columns:1fr} .bn-roi-field:last-child{grid-column:auto} .bn-toc ol{columns:1} .bn-art h2{font-size:1.5em} .bn-bot-msg{max-width:90%} } .bn-art sup,.bn-art sub{font-size:14px;line-height:0} .bn-klabel.hc{color:var(--bn-coral-txt)} .bn-cdc{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-cdc h3{margin:.1em 0 .3em} .bn-cdc>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-cdc br{display:none} .bn-cdc p:empty{display:none; margin:0} .cdc-q{padding:15px 0; border-top:1px solid var(--bn-border)} .cdc-q:first-of-type{border-top:none; padding-top:2px} .bn-art .cdc-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .cdc-chips{display:flex; flex-wrap:wrap; gap:8px} .cdc-chips p:not([class]){display:contents} .bn-art .cdc-chip{display:inline-flex; align-items:center; font-size:16px; line-height:1.35; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:9px 16px; cursor:pointer; transition:.15s} .bn-art .cdc-chip:hover{background:var(--bn-coral-soft)} .bn-art .cdc-chip:has(input:checked){background:var(--bn-coral); color:#332c19; border-color:var(--bn-coral); font-weight:700} .cdc-chip input{position:absolute; opacity:0; width:1px; height:1px; pointer-events:none} .cdc-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .cdc-line{padding:14px 0; border-top:1px solid var(--bn-sand)} .cdc-line:first-of-type{border-top:none; padding-top:2px} .cdc-line p:not([class]){margin:0} .bn-art .cdc-line b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); margin-bottom:6px} .bn-art .cdc-line span{display:block; font-size:16px; line-height:1.62; color:var(--bn-text)} .bn-art .cdc-copy{margin-top:18px; display:inline-block; background:var(--bn-coral); color:#332c19; border:none; font-family:inherit; font-weight:800; font-size:16px; padding:13px 28px; border-radius:999px; cursor:pointer; box-shadow:0 6px 16px rgba(254,113,107,.28); transition:.15s} .bn-art .cdc-copy:hover{background:#ff8782} .bn-art .cdc-note{font-size:16px; color:var(--bn-muted); margin:12px 0 0; font-style:italic; min-height:1.5em} @media(max-width:680px){ .cdc-chips{flex-direction:column; align-items:stretch} .bn-art .cdc-chip{justify-content:flex-start} } .bn-niv{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-niv h3{margin:.1em 0 .3em} .bn-niv>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-niv br{display:none} .bn-niv p:empty{display:none; margin:0} .niv-q{padding:15px 0; border-top:1px solid var(--bn-border)} .niv-q:first-of-type{border-top:none; padding-top:2px} .bn-art .niv-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .niv-out{margin:24px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .bn-art .niv-score{display:flex; align-items:baseline; gap:10px; margin:0 0 13px} .bn-art .niv-score b{font-family:var(--bn-mono); font-size:2.1em; line-height:1; color:var(--bn-coral-txt); font-weight:800; letter-spacing:-.02em} .bn-art .niv-score span{font-size:16px; color:var(--bn-muted)} .niv-gauge{height:10px; border-radius:999px; background:var(--bn-sand); overflow:hidden; margin:0 0 18px} .niv-gauge p:not([class]){display:contents} .niv-gauge i{display:block; height:10px; background:var(--bn-coral); border-radius:999px; width:0} .nivv{display:none; border-radius:var(--bn-r-sm); padding:17px 19px; background:#fff; border:1px solid var(--bn-border)} .nivv.on{display:block} .bn-art .nivv b{display:block; font-size:1.08em; color:var(--bn-ink); margin-bottom:5px} .bn-art .nivv p{margin:0; font-size:16px; line-height:1.62} .bn-art .niv-weak{margin:15px 0 0; font-size:16px; color:var(--bn-text)} .bn-art .niv-weak b{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); display:block; margin-bottom:4px} .bn-art blockquote{margin:26px 0; padding:18px 22px; background:var(--bn-card); border:1px solid var(--bn-border); border-left:4px solid var(--bn-blue); border-radius:var(--bn-r); box-shadow:var(--bn-sh-sm)} .bn-art blockquote p{margin:0; font-size:17px; line-height:1.65; color:var(--bn-text)} .bn-chk{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-chk h3{margin:.1em 0 .3em} .bn-chk>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-chk br{display:none} .bn-chk p:empty{display:none; margin:0} .chk-doc{border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-border); padding:16px 18px; margin:0 0 6px} .bn-art .chk-doc b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); margin-bottom:6px} .bn-art .chk-doc span{display:block; font-size:16px; line-height:1.62; color:var(--bn-text)} .chk-q{padding:15px 0; border-top:1px solid var(--bn-border)} .bn-art .chk-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .chk-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .chk-pieces{display:grid; gap:10px; margin:0 0 16px} .chk-piece{border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-border); padding:12px 14px} .chk-piece.hit{border-color:var(--bn-green); background:var(--bn-green-soft)} .bn-art .chk-piece b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-muted); margin-bottom:5px} .bn-art .chk-piece.hit b{color:var(--bn-green)} .bn-art .chk-piece span{display:block; font-size:16px; line-height:1.6; color:var(--bn-text)} .bn-art .chk-verdict{border-radius:var(--bn-r-sm); padding:14px 16px; font-size:16px; line-height:1.55; background:var(--bn-green-soft); border:1px solid #cfe6c4; color:var(--bn-text); margin:0 0 12px} .bn-art .chk-verdict.ko{background:var(--bn-coral-soft); border-color:var(--bn-coral-line)} .bn-art .chk-stats{margin:0; font-size:16px; line-height:1.6; color:var(--bn-text)} .bn-art .chk-stats b{font-family:var(--bn-mono); color:var(--bn-coral-txt); font-weight:700} .bn-dev{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-dev h3{margin:.1em 0 .3em} .bn-dev>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-dev br{display:none} .bn-dev p:empty{display:none; margin:0} .dev-q{padding:15px 0; border-top:1px solid var(--bn-border)} .dev-q:first-of-type{border-top:none; padding-top:2px} .bn-art .dev-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .dev-out{margin:24px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .dev-tiles{display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin:0 0 16px} .dev-stat{background:#fff; border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); padding:16px 12px; text-align:center} .bn-art .dev-stat b{display:block; font-family:var(--bn-mono); font-size:1.5em; line-height:1.12; font-weight:800; letter-spacing:-.02em; color:var(--bn-coral-txt)} .bn-art .dev-stat:nth-child(2) b{color:var(--bn-blue)} .bn-art .dev-stat:nth-child(3) b{color:var(--bn-green)} .bn-art .dev-stat:nth-child(4) b{color:var(--bn-ink)} .bn-art .dev-stat span{display:block; margin-top:7px; font-size:14px; color:var(--bn-muted); line-height:1.4} .bn-art .dev-line{margin:0 0 14px; font-size:16px; line-height:1.6; color:var(--bn-text)} .bn-art .dev-line b{font-family:var(--bn-mono); color:var(--bn-coral-txt); font-weight:700} .dvv{display:none; border-radius:var(--bn-r-sm); padding:16px 18px; background:#fff; border:1px solid var(--bn-border)} .dvv.on{display:block} .bn-art .dvv b{display:block; font-size:1.06em; color:var(--bn-ink); margin-bottom:5px} .bn-art .dvv p{margin:0; font-size:16px; line-height:1.62} @media(max-width:680px){ .dev-tiles{grid-template-columns:1fr 1fr} } .bn-fig.doc img{max-width:520px; margin:0 auto} .bn-nlu{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-nlu h3{margin:.1em 0 .3em} .bn-nlu>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-nlu br{display:none} .bn-nlu p:empty{display:none; margin:0} .nlu-q{padding:15px 0; border-top:1px solid var(--bn-border)} .nlu-q:first-of-type{border-top:none; padding-top:2px} .bn-art .nlu-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .bn-art .nlu-in{width:100%; font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-border); border-radius:999px; padding:12px 18px; outline:none} .bn-art .nlu-in:focus{border-color:var(--bn-coral)} .nlu-ex{display:flex; flex-wrap:wrap; gap:8px; margin-top:12px} .nlu-ex p:not([class]){display:contents} .bn-art .nlu-exb{font-family:inherit; font-size:16px; line-height:1.35; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:9px 16px; cursor:pointer; transition:.15s; text-align:left} .bn-art .nlu-exb:hover{background:var(--bn-coral-soft)} .nlu-out{margin:24px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .bn-art .nlu-toks{margin:0 0 14px; font-size:16px; line-height:1.7; color:var(--bn-text)} .bn-art .nlu-toks b{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); display:block; margin-bottom:8px} .bn-art .nlu-tk{display:inline-block; font-family:var(--bn-mono); font-size:14px; background:#fff; border:1px solid var(--bn-border); border-radius:999px; padding:3px 11px; margin:0 6px 6px 0; color:var(--bn-ink)} .nlu-row{display:grid; grid-template-columns:1fr 130px 54px; gap:12px; align-items:center; padding:10px 0; border-top:1px solid var(--bn-sand)} .nlu-row:first-child{border-top:none} .bn-art .nlu-lab{font-size:16px; line-height:1.4; color:var(--bn-ink); font-weight:700} .nlu-bar{height:10px; border-radius:999px; background:var(--bn-sand); overflow:hidden} .nlu-bar i{display:block; height:10px; background:var(--bn-coral); border-radius:999px; width:0} .nlu-row.win .nlu-bar i{background:var(--bn-green)} .bn-art .nlu-sc{font-family:var(--bn-mono); font-size:16px; font-weight:700; color:var(--bn-coral-txt); text-align:right} .nlu-verdict{margin:16px 0 0; border-radius:var(--bn-r-sm); padding:16px 18px; background:#fff; border:1px solid var(--bn-border); border-left:4px solid var(--bn-green)} .nlu-verdict.ko{border-left-color:var(--bn-coral)} .bn-art .nlu-verdict b{display:block; font-size:1.06em; color:var(--bn-ink); margin-bottom:5px} .bn-art .nlu-verdict p{margin:0; font-size:16px; line-height:1.62} .bn-art .nlu-note{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic} @media(max-width:680px){ .nlu-row{grid-template-columns:minmax(0,1fr) 64px 48px; gap:9px} .bn-art .nlu-lab{font-size:16px} } @media(max-width:560px){ .nlu-row{grid-template-columns:minmax(0,1fr) auto; gap:7px 10px; padding:12px 0} .bn-art .nlu-lab{grid-column:1; grid-row:1} .bn-art .nlu-sc{grid-column:2; grid-row:1; text-align:right} .nlu-bar{grid-column:1\/3; grid-row:2} } .bn-art code{font-family:var(--bn-mono); font-size:16px; line-height:1.5; background:var(--bn-sand-2); border:1px solid var(--bn-sand); border-radius:6px; padding:1px 7px; color:var(--bn-ink); word-break:break-word} .bn-art pre{background:var(--bn-sand-2); border:1px solid var(--bn-sand); border-radius:var(--bn-r-sm); padding:16px 18px; overflow-x:auto; margin:22px 0} .bn-art pre code{background:none; border:none; padding:0; font-size:16px} .bn-hd{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-hd h3{margin:.1em 0 .3em} .bn-hd>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-hd br{display:none} .bn-hd p:empty{display:none; margin:0} .hd-q{padding:15px 0; border-top:1px solid var(--bn-border)} .hd-q:first-of-type{border-top:none; padding-top:2px} .bn-art .hd-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .hd-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .hd-head{display:grid; grid-template-columns:minmax(0,auto) minmax(0,1fr); gap:18px; align-items:center} .hd-n{font-family:var(--bn-mono); font-weight:800; line-height:1; color:var(--bn-ink); white-space:nowrap} .bn-art .hd-n span{font-size:34px} .bn-art .hd-n i{font-style:normal; font-size:16px; color:var(--bn-muted); font-weight:600} .hd-track{position:relative; height:14px; border-radius:999px; background:#fff; border:1px solid var(--bn-sand); overflow:hidden} .hd-fill{position:absolute; left:0; top:0; bottom:0; width:0; background:var(--bn-coral); transition:width .18s} .hd-parts{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-top:16px} .hd-part{background:#fff; border:1px solid var(--bn-sand); border-radius:var(--bn-r-sm); padding:11px 8px; text-align:center} .bn-art .hd-part span{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.05em; color:var(--bn-muted); line-height:1.3} .bn-art .hd-part b{display:block; font-family:var(--bn-mono); font-size:20px; font-weight:800; color:var(--bn-coral-txt); margin-top:4px} .hdv{display:none; margin-top:18px; border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-sand); padding:17px 19px} .hdv-1{display:block; border-left:4px solid var(--bn-green)} .hdv-2{border-left:4px solid var(--bn-blue)} .hdv-3{border-left:4px solid var(--bn-coral)} .hdv-4{border-left:4px solid var(--bn-ink)} .bn-art .hdv b{display:block; font-size:18px; line-height:1.4; color:var(--bn-ink); margin-bottom:7px} .bn-art .hdv p{margin:0; font-size:16px; line-height:1.62; color:var(--bn-text)} .bn-art .hd-note{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic; line-height:1.55} @media(max-width:680px){ .bn-hd{padding:20px 17px} .hd-out{padding:17px 15px} .hd-head{grid-template-columns:minmax(0,1fr); gap:12px} .hd-parts{grid-template-columns:repeat(2,minmax(0,1fr))} } .bn-tri{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-tri h3{margin:.1em 0 .3em} .bn-tri>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-tri br{display:none} .bn-tri p:empty{display:none; margin:0} .tri-q{padding:15px 0; border-top:1px solid var(--bn-border)} .tri-q:first-of-type{border-top:none; padding-top:2px} .bn-art .tri-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .tri-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .triv{display:none; border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-sand); padding:17px 19px} .triv-1{border-left:4px solid var(--bn-ink)} .triv-2{border-left:4px solid var(--bn-coral)} .triv-3{border-left:4px solid var(--bn-blue)} .triv-4{border-left:4px solid var(--bn-muted)} .triv-5{display:block; border-left:4px solid var(--bn-green)} .bn-art .triv em{display:block; font-style:normal; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.06em; color:var(--bn-coral-txt); margin-bottom:7px; line-height:1.4} .bn-art .triv b{display:block; font-size:18px; line-height:1.4; color:var(--bn-ink); margin-bottom:8px} .bn-art .triv p{margin:0 0 .7em; font-size:16px; line-height:1.62; color:var(--bn-text)} .bn-art .triv p:last-child{margin-bottom:0} .tri-lines{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin-top:16px} .tri-line{background:#fff; border:1px solid var(--bn-sand); border-radius:var(--bn-r-sm); padding:13px 15px} .bn-art .tri-line span{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.05em; color:var(--bn-muted); line-height:1.3; margin-bottom:6px} .bn-art .tri-line b{display:block; font-size:16px; line-height:1.55; color:var(--bn-ink); font-weight:600} .bn-art .tri-note{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic; line-height:1.55} .bn-tri .bn-tablewrap{margin-top:22px} .bn-art .tri-load{font-family:var(--bn-mono); font-size:16px; line-height:1.2; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:8px 15px; cursor:pointer; white-space:nowrap; transition:.15s} .bn-art .tri-load:hover{background:var(--bn-coral-soft)} @media(max-width:680px){ .bn-tri{padding:20px 17px} .tri-out{padding:17px 15px} .tri-lines{grid-template-columns:minmax(0,1fr)} } .bn-art .bn-steps ol{list-style:none;padding:0;margin:0} .bn-art .bn-tip,.bn-art .bn-warn,.bn-art .bn-info{background:var(--bn-card);border:1px solid var(--bn-border);border-radius:var(--bn-r);padding:18px 20px;margin:24px 0;box-shadow:var(--bn-sh-sm)} .bn-art .bn-tip{border-left:4px solid var(--bn-green)} .bn-art .bn-warn{border-left:4px solid var(--bn-coral)} .bn-art .bn-info{border-left:4px solid var(--bn-blue)} .bn-art .bn-tip .bn-klabel,.bn-art .bn-warn .bn-klabel,.bn-art .bn-info .bn-klabel{margin-bottom:6px} .bn-art .bn-tip p,.bn-art .bn-warn p,.bn-art .bn-info p{margin:0} .bn-art .bn-tri table{table-layout:fixed;min-width:640px} .bn-art .bn-tri th:nth-child(1),.bn-art .bn-tri td:nth-child(1){width:22%} .bn-art .bn-tri th:nth-child(2),.bn-art .bn-tri td:nth-child(2){width:14%} .bn-art .bn-tri th:nth-child(3),.bn-art .bn-tri td:nth-child(3){width:14%} .bn-art .bn-tri th:nth-child(4),.bn-art .bn-tri td:nth-child(4){width:13%} .bn-art .bn-tri th:nth-child(5),.bn-art .bn-tri td:nth-child(5){width:22%} .bn-art .bn-tri th:nth-child(6),.bn-art .bn-tri td:nth-child(6){width:15%} .bn-art .bn-tri thead th,.bn-art .bn-tri tbody td{padding:11px 8px} .bn-art .tri-load{padding:4px 10px} .bn-art .bn-cta-in{text-align:center;margin:26px 0} .bn-lng{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-lng h3{margin:.1em 0 .3em} .bn-lng>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-lng br{display:none} .bn-lng p:empty{display:none; margin:0} .lng-q{padding:15px 0; border-top:1px solid var(--bn-border)} .lng-q:first-of-type{border-top:none; padding-top:2px} .bn-art .lng-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .lng-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .lng-lines{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px} .lng-line{background:#fff; border:1px solid var(--bn-sand); border-radius:var(--bn-r-sm); padding:13px 15px} .bn-art .lng-line b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.05em; color:var(--bn-muted); line-height:1.3; margin-bottom:6px} .bn-art .lng-line span{display:block; font-size:16px; line-height:1.55; color:var(--bn-ink); font-weight:600} .lngv{display:none; margin-top:16px; border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-sand); padding:17px 19px} .lngv-1{display:block; border-left:4px solid var(--bn-blue)} .lngv-2{border-left:4px solid var(--bn-coral)} .lngv-3{border-left:4px solid var(--bn-green)} .lngv-4{border-left:4px solid var(--bn-ink)} .bn-art .lngv em{display:block; font-style:normal; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.06em; color:var(--bn-coral-txt); margin-bottom:7px; line-height:1.4} .bn-art .lngv b{display:block; font-size:18px; line-height:1.4; color:var(--bn-ink); margin-bottom:8px} .bn-art .lngv p{margin:0 0 .7em; font-size:16px; line-height:1.62; color:var(--bn-text)} .bn-art .lngv p:last-child{margin-bottom:0} .bn-art .lng-note{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic; line-height:1.55} .bn-lng .bn-tablewrap{margin-top:22px} .bn-art .bn-lng table{table-layout:fixed; min-width:620px} .bn-art .bn-lng th:nth-child(1),.bn-art .bn-lng td:nth-child(1){width:26%} .bn-art .bn-lng th:nth-child(2),.bn-art .bn-lng td:nth-child(2){width:28%} .bn-art .bn-lng th:nth-child(3),.bn-art .bn-lng td:nth-child(3){width:32%} .bn-art .bn-lng th:nth-child(4),.bn-art .bn-lng td:nth-child(4){width:14%} .bn-art .bn-lng thead th,.bn-art .bn-lng tbody td{padding:11px 10px} @media(max-width:680px){ .bn-lng{padding:20px 17px} .lng-out{padding:17px 15px} .lng-lines{grid-template-columns:minmax(0,1fr)} }.whc{background:var(--bn-card);border:1px solid var(--bn-border);border-radius:var(--bn-r);padding:26px;margin:26px 0;box-shadow:var(--bn-sh-sm)}.whc h3{margin:.1em 0 .3em;font-size:1.22em}.whc-q{margin:20px 0 0}.whc-qt{font-weight:700;color:var(--bn-ink);margin:0 0 10px;font-size:.98em}.whc-hint{margin:20px 0 0;padding:14px 16px;background:var(--bn-sand-2);border:1px dashed var(--bn-sand);border-radius:var(--bn-r-sm);color:var(--bn-muted);font-size:.95em}.whc-out{display:none;margin-top:18px;border-top:1px dashed var(--bn-border);padding-top:14px}.whc-out.show{display:block}.whc-line{display:none;padding:10px 0;border-top:1px solid var(--bn-border)}.whc-line:first-child{border-top:none}.whc-line.on{display:flex;align-items:flex-start;gap:14px;flex-wrap:wrap}.whc-line b{flex:1 1 190px;font-family:var(--bn-mono);font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--bn-coral-txt);min-width:0}.whc-line span{flex:2 1 280px;font-size:.95em;color:var(--bn-text);min-width:0}.bn-art .bn-code{background:var(--bn-ink);color:#f5efdc;border-radius:var(--bn-r-sm);padding:18px 22px;overflow-x:auto;font-family:var(--bn-mono);font-size:.88em;line-height:1.65;margin:20px 0;white-space:pre-wrap;word-break:break-word}\"));document.head.appendChild(s);})();<\/script><\/p>\n<div class=\"bn-art\">\n<div class=\"bn-tldr\">\n<span class=\"bn-klabel\">En bref<\/span>\n<ul>\n<li>Un <strong>webhook<\/strong> est un appel HTTP d\u00e9clench\u00e9 par un \u00e9v\u00e9nement : le chatbot pousse les donn\u00e9es d\u2019une conversation vers un service externe (CRM, tableur, ERP), sans que ce service ait \u00e0 interroger quoi que ce soit.<\/li>\n<li>Sur Botnation, l\u2019\u00e9l\u00e9ment <strong>Webhook<\/strong> importe et exporte automatiquement des donn\u00e9es vers n\u2019importe quel syst\u00e8me HTTP : URL <strong>HTTPS<\/strong> obligatoire, appel en <strong>POST ou GET<\/strong>, en-t\u00eate personnalis\u00e9, param\u00e8tres, bouton de test.<\/li>\n<li>Deux options changent tout : le <strong>traitement synchrone<\/strong> (le chatbot attend la r\u00e9ponse, l\u2019ordre des \u00e9tapes est garanti) et le <strong>traitement de la r\u00e9ponse JSON<\/strong>, qui suit un format pr\u00e9cis et bascule automatiquement en mode synchrone.<\/li>\n<li>Les erreurs les plus fr\u00e9quentes : webhook plac\u00e9 <strong>avant<\/strong> la collecte des donn\u00e9es, cache activ\u00e9 sans raison (un cache r\u00e9gl\u00e9 sur une heure limite l\u2019appel \u00e0 une fois par heure), r\u00e9ponse au-del\u00e0 du d\u00e9lai document\u00e9 (<strong>10 secondes<\/strong>), JSON mal form\u00e9.<\/li>\n<li>Pas besoin de coder c\u00f4t\u00e9 Botnation : l\u2019\u00e9l\u00e9ment Webhook se configure en no-code sur la plateforme. C\u00f4t\u00e9 service externe, l\u2019endpoint qui re\u00e7oit l\u2019appel, son authentification et le format de r\u00e9ponse peuvent demander une intervention technique. Et Botnation propose aussi des <strong>services de cr\u00e9ation de chatbot sur mesure<\/strong> avec son offre Entreprise, sur devis.<\/li>\n<\/ul>\n<\/div>\n<p>Votre chatbot vient de collecter une commande, un num\u00e9ro de t\u00e9l\u00e9phone ou une adresse. Que se passe-t-il ensuite ? Dans beaucoup de projets, la r\u00e9ponse honn\u00eate est : rien d\u2019automatis\u00e9. Un collaborateur recopie la commande dans le CRM, un fichier CSV est export\u00e9 une fois par semaine, ou la donn\u00e9e dort dans la base du chatbot et n\u2019atteint jamais le logiciel m\u00e9tier.<\/p>\n<p>Le <strong>webhook<\/strong> est la r\u00e9ponse technique \u00e0 cette question, et sa configuration c\u00f4t\u00e9 Botnation se fait sans code. C\u2019est le m\u00e9canisme qui permet \u00e0 un chatbot de dire \u00e0 un autre logiciel : \u00ab il vient de se passer quelque chose, voici les donn\u00e9es, \u00e0 toi de jouer \u00bb. Connecter un chatbot \u00e0 un <a href=\"https:\/\/botnation.ai\/fr\/produits\/generation-de-leads\/\">module de g\u00e9n\u00e9ration de leads<\/a>, \u00e0 un <a href=\"https:\/\/botnation.ai\/fr\/produits\/e-commerce\/\">module e-commerce<\/a> ou \u00e0 un ERP passe presque toujours par l\u00e0.<\/p>\n<p>Une int\u00e9gration r\u00e9ussie ne se mesure pas au nombre de webhooks branch\u00e9s. Commencez par un seul flux, celui qui soulage le plus votre \u00e9quipe : une commande vers l\u2019ERP, un lead vers le CRM. Rendez-le fiable, mesurez son d\u00e9lai de r\u00e9ponse, puis branchez le suivant. La file d\u2019attente d\u00e9di\u00e9e de Botnation absorbe les appels, mais chaque service lent ajoute de l\u2019attente \u00e0 la conversation : la sobri\u00e9t\u00e9 est aussi une d\u00e9cision d\u2019architecture, et elle se paie en minutes de conversation gagn\u00e9es.<\/p>\n<p>Sur Google, la requ\u00eate \u00ab chatbot webhook \u00bb renvoie surtout des documentations techniques de plateformes de chatbot et des tutoriels d\u2019int\u00e9gration, souvent en anglais, rarement un guide orient\u00e9 d\u00e9cision qui dit quand l\u2019utiliser, comment le configurer et pourquoi \u00e7a casse. Cet article fait les trois, \u00e0 partir de la documentation officielle de Botnation et de cas concrets, avec en bonus un configurateur de flux.<\/p>\n<p class=\"bn-cta-in\"><a class=\"bn-cta-btn\" href=\"https:\/\/start.botnation.ai\/login\">Cr\u00e9ez votre chatbot gratuitement<\/a><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Sommaire<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #3d351f;color:#3d351f\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #3d351f;color:#3d351f\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Webhook_et_chatbot_la_definition_qui_compte\" >Webhook et chatbot : la d\u00e9finition qui compte<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Pourquoi_un_chatbot_a_besoin_dun_webhook_quatre_cas_concrets\" >Pourquoi un chatbot a besoin d\u2019un webhook : quatre cas concrets<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Une_commande_du_chat_doit_finir_dans_votre_back-office\" >Une commande du chat doit finir dans votre back-office<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Un_lead_qualifie_doit_atterrir_dans_le_CRM\" >Un lead qualifi\u00e9 doit atterrir dans le CRM<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Les_options_de_lelement_Webhook_ce_qui_change_tout\" >Les options de l\u2019\u00e9l\u00e9ment Webhook : ce qui change tout<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Les_reglages_de_lappel\" >Les r\u00e9glages de l\u2019appel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Traitement_synchrone_ou_asynchrone\" >Traitement synchrone ou asynchrone ?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Traiter_la_reponse_JSON\" >Traiter la r\u00e9ponse JSON<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Le_format_de_reponse_JSON_decode\" >Le format de r\u00e9ponse JSON, d\u00e9cod\u00e9<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#A_vous_configurez_votre_flux_webhook\" >\u00c0 vous : configurez votre flux webhook<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#No-code_ou_developpeur_qui_branche_votre_webhook\" >No-code ou d\u00e9veloppeur : qui branche votre webhook ?<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Cote_plateforme_Botnation\" >C\u00f4t\u00e9 plateforme Botnation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Cote_service_externe\" >C\u00f4t\u00e9 service externe<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Les_six_erreurs_qui_font_echouer_un_webhook\" >Les six erreurs qui font \u00e9chouer un webhook<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Ce_que_ca_coute\" >Ce que \u00e7a co\u00fbte<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Questions_frequentes\" >Questions fr\u00e9quentes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Ce_quil_faut_retenir\" >Ce qu\u2019il faut retenir<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/botnation.ai\/fr\/chatbot-webhook\/#Connectez_votre_chatbot_a_votre_ecosysteme\" >Connectez votre chatbot \u00e0 votre \u00e9cosyst\u00e8me<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 id=\"definition\"><span class=\"ez-toc-section\" id=\"Webhook_et_chatbot_la_definition_qui_compte\"><\/span>Webhook et chatbot : la d\u00e9finition qui compte<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"bn-def\">\n<span class=\"bn-klabel\">D\u00e9finition<\/span>\n<p>Un <strong>webhook<\/strong> est un appel HTTP d\u00e9clench\u00e9 par un \u00e9v\u00e9nement : on parle aussi de \u00ab callback HTTP \u00bb. Au lieu de demander r\u00e9guli\u00e8rement \u00e0 un service \u00ab as-tu du nouveau ? \u00bb, votre chatbot lui envoie une requ\u00eate d\u00e8s que l\u2019\u00e9v\u00e9nement se produit, avec les donn\u00e9es de la conversation en param\u00e8tres. Le service r\u00e9pond en quelques millisecondes, ou pas du tout. Le comportement d\u00e9pend alors du mode choisi : en <strong>traitement synchrone<\/strong>, le chatbot attend la r\u00e9ponse, et une s\u00e9quence de redirection peut \u00eatre pr\u00e9vue si le service ne r\u00e9pond pas ou renvoie une erreur ; en <strong>asynchrone<\/strong>, il poursuit sa conversation pendant que l\u2019appel part en parall\u00e8le.<\/p>\n<\/div>\n<p>Trois propri\u00e9t\u00e9s distinguent le webhook des autres modes d\u2019\u00e9change :<\/p>\n<ul>\n<li><strong>Il est \u00e9v\u00e9nementiel.<\/strong> L\u2019appel part au moment pr\u00e9cis o\u00f9 la variable est collect\u00e9e (une adresse e-mail, un num\u00e9ro de commande, une localisation), pas \u00e0 une heure fixe.<\/li>\n<li><strong>Il est \u00ab push \u00bb.<\/strong> Le service externe n\u2019a rien \u00e0 installer ni \u00e0 interroger : il expose une URL, et c\u2019est Botnation qui l\u2019appelle.<\/li>\n<li><strong>Il est synchrone ou asynchrone.<\/strong> Le chatbot peut attendre la r\u00e9ponse (traitement synchrone) ou continuer sa conversation pendant que l\u2019appel part en parall\u00e8le (traitement asynchrone). On verra que ce choix est d\u00e9cisif.<\/li>\n<\/ul>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>M\u00e9thode<\/th>\n<th>Comment \u00e7a marche<\/th>\n<th>Quand la choisir<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Interrogation d\u2019API<\/td>\n<td>Un service interroge r\u00e9guli\u00e8rement le chatbot pour r\u00e9cup\u00e9rer ses donn\u00e9es.<\/td>\n<td>Cas rares : la donn\u00e9e doit \u00eatre lue par un syst\u00e8me qui ne peut pas \u00eatre appel\u00e9.<\/td>\n<\/tr>\n<tr>\n<td>Webhook<\/td>\n<td>Le chatbot pousse la donn\u00e9e au moment de l\u2019\u00e9v\u00e9nement, vers une URL HTTPS.<\/td>\n<td>Cas standard : CRM, tableur, ERP, API m\u00e9tier, notification \u00e0 un service tiers.<\/td>\n<\/tr>\n<tr>\n<td>Export manuel<\/td>\n<td>Un humain copie les donn\u00e9es ou exporte un fichier depuis la plateforme.<\/td>\n<td>Volume faible, ou p\u00e9riode de d\u00e9marrage avant d\u2019automatiser.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Le webhook n\u2019a donc rien d\u2019exotique : c\u2019est le canal standard entre un chatbot et le reste du syst\u00e8me d\u2019information. Ce qui varie, ce sont les options de configuration et les pi\u00e8ges. C\u2019est le sujet des sections suivantes.<\/p>\n<h2 id=\"cas-usage\"><span class=\"ez-toc-section\" id=\"Pourquoi_un_chatbot_a_besoin_dun_webhook_quatre_cas_concrets\"><\/span>Pourquoi un chatbot a besoin d\u2019un webhook : quatre cas concrets<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"bn-ex\">\n<div class=\"bn-ex-h\">\n<div class=\"bn-ex-n\">1<\/div>\n<div>\n<h3><span class=\"ez-toc-section\" id=\"Une_commande_du_chat_doit_finir_dans_votre_back-office\"><\/span>Une commande du chat doit finir dans votre back-office<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">E-commerce et logistique<\/span><\/p><\/div>\n<\/div>\n<p>Le client choisit un produit, saisit son adresse et valide dans le chat. Le chatbot enregistre la commande, puis un webhook appelle le syst\u00e8me de gestion de commandes avec le num\u00e9ro, le client et l\u2019adresse. Le back-office d\u00e9clenche l\u2019exp\u00e9dition et peut renvoyer au chatbot le statut de livraison.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>C\u00f4t\u00e9 entreprise<\/b>Le module e-commerce Botnation g\u00e8re la transaction, et le webhook transmet la commande \u00e0 l\u2019ERP ou au prestataire logistique, sans saisie manuelle.<\/div>\n<div class=\"cli\"><b>C\u00f4t\u00e9 client<\/b>Le client obtient une confirmation imm\u00e9diate, puis un suivi \u00e0 jour dans la conversation, sur <a href=\"https:\/\/botnation.ai\/fr\/canaux\/\">le canal de son choix<\/a>.<\/div>\n<\/div>\n<\/div>\n<div class=\"bn-ex\">\n<div class=\"bn-ex-h\">\n<div class=\"bn-ex-n\">2<\/div>\n<div>\n<h3><span class=\"ez-toc-section\" id=\"Un_lead_qualifie_doit_atterrir_dans_le_CRM\"><\/span>Un lead qualifi\u00e9 doit atterrir dans le CRM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">G\u00e9n\u00e9ration de leads<\/span><\/p><\/div>\n<\/div>\n<p>Le chatbot qualifie : nom, entreprise, budget, projet. \u00c0 la fin du parcours, un webhook envoie le dossier complet au CRM, qui cr\u00e9e le prospect et affecte un commercial. Sans webhook, il faut consulter le chatbot de temps en temps ou recopier les fiches : le d\u00e9lai de traitement explose, et les leads refroidissent.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>C\u00f4t\u00e9 entreprise<\/b>Le <a href=\"https:\/\/botnation.ai\/fr\/produits\/generation-de-leads\/\">module de g\u00e9n\u00e9ration de leads<\/a> qualifie, le webhook \u00e9crit dans le CRM, et l\u2019\u00e9quipe de vente travaille sur un seul outil.<\/div>\n<div class=\"cli\"><b>C\u00f4t\u00e9 client<\/b>Il obtient une r\u00e9ponse imm\u00e9diate, et un contact commercial rapide, sans avoir \u00e0 resaisir ses informations.<\/div>\n<\/div>\n<\/div>\n<p>La documentation officielle de Botnation cite d\u2019autres configurations simples et puissantes :<\/p>\n<ul>\n<li>R\u00e9cup\u00e9rer chaque matin vos <strong>derni\u00e8res actualit\u00e9s<\/strong> depuis votre serveur, sans les saisir \u00e0 la main dans l\u2019arborescence du chatbot.<\/li>\n<li>Envoyer la <strong>ville ou les coordonn\u00e9es GPS<\/strong> collect\u00e9es, et recevoir en r\u00e9ponse un message avec la m\u00e9t\u00e9o \u00e0 7 jours et une image g\u00e9n\u00e9r\u00e9e par votre syst\u00e8me.<\/li>\n<li>Transmettre un <strong>num\u00e9ro de commande<\/strong> et recevoir le statut de la livraison, avec mise \u00e0 jour des variables de l\u2019utilisateur.<\/li>\n<li>Envoyer le <strong>titre d\u2019un film<\/strong> demand\u00e9 par l\u2019utilisateur, et recevoir une bande annonce depuis votre base de donn\u00e9es vid\u00e9o.<\/li>\n<\/ul>\n<p>Ces exemples sont tir\u00e9s de l\u2019article <a href=\"https:\/\/botnation.ai\/fr\/support\/api-botnation-importer-et-exporter-des-donnees-par-webhook\/\">\u00ab API Botnation : importer et exporter des donn\u00e9es par webhook \u00bb<\/a>, qui reste la r\u00e9f\u00e9rence \u00e0 lire avant de brancher votre premier flux.<\/p>\n<h2 id=\"options\"><span class=\"ez-toc-section\" id=\"Les_options_de_lelement_Webhook_ce_qui_change_tout\"><\/span>Les options de l\u2019\u00e9l\u00e9ment Webhook : ce qui change tout<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dans la plateforme Botnation, le webhook est un <strong>\u00e9l\u00e9ment de l\u2019arborescence<\/strong>, comme un message ou une question. Il se place dans le sc\u00e9nario, et se r\u00e8gle avec quelques champs, sans une ligne de code.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Les_reglages_de_lappel\"><\/span>Les r\u00e9glages de l\u2019appel<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>URL en HTTPS<\/strong> obligatoirement : le protocole s\u00e9curis\u00e9 est impos\u00e9 par la plateforme.<\/li>\n<li><strong>M\u00e9thode POST ou GET<\/strong>, au choix, selon ce que le service externe attend.<\/li>\n<li><strong>Param\u00e8tres<\/strong> ajout\u00e9s directement dans l\u2019URL, ou via l\u2019option \u00ab + Ajouter un param\u00e8tre \u00bb, avec les variables du chatbot entre accolades.<\/li>\n<li><strong>En-t\u00eate personnalis\u00e9<\/strong> pour les services qui exigent une cl\u00e9 d\u2019authentification.<\/li>\n<li><strong>Bouton \u00ab Tester le Webhook \u00bb<\/strong> pour v\u00e9rifier l\u2019URL avant la mise en production ; si l\u2019URL contient des variables, la plateforme propose de les simuler en saisissant des valeurs de test.<\/li>\n<\/ul>\n<div class=\"bn-fig\">\n<img decoding=\"async\" src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-webhook-capa1.jpg\" alt=\"Interface du testeur de webhook de la plateforme Botnation, avec les champs de param\u00e8tres et le bouton Tester le Webhook\"><figcaption>Dans la documentation de Botnation, le bouton \u00ab Tester le Webhook \u00bb appelle l\u2019URL renseign\u00e9e et confirme qu\u2019elle est valide.<\/figcaption><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Traitement_synchrone_ou_asynchrone\"><\/span>Traitement synchrone ou asynchrone ?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Le <strong>traitement synchrone<\/strong> met le chatbot en pause le temps que le webhook d\u00e9livre sa r\u00e9ponse. La documentation officielle donne un exemple \u00e9clairant : deux fonctions webhook \u00e0 la suite. La fonction A ajoute un utilisateur dans une base de donn\u00e9es, la fonction B compte le nombre total d\u2019utilisateurs et range la valeur dans une variable. Si A n\u2019est pas termin\u00e9e quand B d\u00e9marre, le compteur est faux. Le traitement synchrone sur A impose l\u2019ordre des ex\u00e9cutions.<\/p>\n<p>Si l\u2019option n\u2019est pas coch\u00e9e, le chatbot ex\u00e9cute la requ\u00eate en parall\u00e8le et poursuit sa conversation : c\u2019est le traitement <strong>asynchrone<\/strong>. Il est adapt\u00e9 \u00e0 la collecte seule, quand aucun r\u00e9sultat n\u2019est exploit\u00e9 dans la suite du sc\u00e9nario.<\/p>\n<p>En mode synchrone, une <strong>s\u00e9quence de redirection en cas d\u2019erreur<\/strong> peut \u00eatre s\u00e9lectionn\u00e9e : si le webhook ne r\u00e9pond pas ou retourne une erreur, l\u2019utilisateur est dirig\u00e9 vers le sc\u00e9nario choisi au lieu de rester bloqu\u00e9.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Traiter_la_reponse_JSON\"><\/span>Traiter la r\u00e9ponse JSON<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pour une utilisation avanc\u00e9e, l\u2019\u00e9l\u00e9ment Webhook peut <strong>lire et traiter la r\u00e9ponse<\/strong> renvoy\u00e9e par l\u2019appel HTTP. C\u2019est ce qui permet de g\u00e9n\u00e9rer des r\u00e9ponses personnalis\u00e9es \u00e0 partir de donn\u00e9es de vos propres serveurs : messages textes, images, vid\u00e9os, audios, variables ou boutons. Quand cette option est activ\u00e9e, le traitement synchrone est activ\u00e9 automatiquement. La documentation pr\u00e9voit alors une r\u00e9ponse en <strong>moins de 10 secondes<\/strong> : au-del\u00e0, la connexion est interrompue et la r\u00e9ponse annul\u00e9e. Ce seuil est un comportement document\u00e9 de l\u2019option, pas un engagement de performance de la plateforme. Pour les contenus r\u00e9utilisables (une actualit\u00e9, la m\u00e9t\u00e9o d\u2019une m\u00eame ville), la r\u00e9ponse peut \u00eatre <strong>mise en cache<\/strong> de quelques minutes \u00e0 plusieurs jours ; la documentation demande alors du JSON encod\u00e9 en UTF-8, avec l\u2019en-t\u00eate <strong>content-type application\/json<\/strong> recommand\u00e9.<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>R\u00f4le<\/th>\n<th>Ce qu\u2019il faut retenir<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>URL + m\u00e9thode<\/td>\n<td>D\u00e9finit la cible de l\u2019appel<\/td>\n<td>HTTPS obligatoire, POST ou GET selon le service<\/td>\n<\/tr>\n<tr>\n<td>Param\u00e8tres<\/td>\n<td>Transmet les variables du chatbot<\/td>\n<td>Ajoutez-les \u00e0 l\u2019URL ou via l\u2019option d\u00e9di\u00e9e<\/td>\n<\/tr>\n<tr>\n<td>En-t\u00eate personnalis\u00e9<\/td>\n<td>Authentifie l\u2019appel<\/td>\n<td>Indispensable pour la plupart des API<\/td>\n<\/tr>\n<tr>\n<td>Tester le Webhook<\/td>\n<td>V\u00e9rifie l\u2019URL avant production<\/td>\n<td>Simulez les variables avec des valeurs de test<\/td>\n<\/tr>\n<tr>\n<td>Traitement synchrone<\/td>\n<td>Met le chatbot en attente de r\u00e9ponse<\/td>\n<td>\u00c0 activer si l\u2019\u00e9tape suivante d\u00e9pend de l\u2019appel<\/td>\n<\/tr>\n<tr>\n<td>Redirection en cas d\u2019erreur<\/td>\n<td>S\u00e9quence de secours<\/td>\n<td>\u00c9vite un utilisateur bloqu\u00e9 en cours de sc\u00e9nario<\/td>\n<\/tr>\n<tr>\n<td>Traiter la r\u00e9ponse JSON<\/td>\n<td>Exploite la r\u00e9ponse du service<\/td>\n<td>Active le synchrone ; r\u00e9ponse attendue sous 10 secondes (documentation)<\/td>\n<\/tr>\n<tr>\n<td>Cache<\/td>\n<td>R\u00e9utilise une r\u00e9ponse identique<\/td>\n<td>R\u00e9servez-le aux donn\u00e9es r\u00e9utilisables uniquement<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"bn-warn\">\n<span class=\"bn-klabel\">Attention<\/span>\n<p>Votre webhook doit toujours \u00eatre plac\u00e9 <strong>apr\u00e8s<\/strong> la collecte des donn\u00e9es, jamais avant : sinon il n\u2019a rien \u00e0 envoyer. Et \u00e9vitez de surcharger votre chatbot d\u2019appels webhook : Botnation met les appels dans une file d\u2019attente d\u00e9di\u00e9e, et une attente longue sur un service externe lent peut ralentir fortement les performances. Ne connectez par webhook que des services dont le temps de r\u00e9ponse est instantan\u00e9.<\/p>\n<\/div>\n<div class=\"bn-tip\">\n<span class=\"bn-klabel\">Astuce<\/span>\n<p>Pour \u00eatre certain qu\u2019une variable contient bien une information avant son exp\u00e9dition, affichez-la temporairement dans un message juste avant le webhook : si le message est vide, c\u2019est le webhook qu\u2019il faut d\u00e9placer.<\/p>\n<\/div>\n<h2 id=\"format-json\"><span class=\"ez-toc-section\" id=\"Le_format_de_reponse_JSON_decode\"><\/span>Le format de r\u00e9ponse JSON, d\u00e9cod\u00e9<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Quand le traitement de la r\u00e9ponse est activ\u00e9, le service externe doit r\u00e9pondre en JSON pur encod\u00e9 en UTF-8 ; la documentation recommande l\u2019en-t\u00eate content-type <strong>application\/json<\/strong>. Le format attendu par la plateforme tient dans un sch\u00e9ma tr\u00e8s court :<\/p>\n<div class=\"bn-code\">{<br>\n  \u00ab\u00a0botnation\u00a0\u00bb: \u00ab\u00a0v1\u00a0\u00bb,<br>\n  \u00ab\u00a0reply\u00a0\u00bb: [<br>\n    { \u00ab\u00a0type\u00a0\u00bb: \u00ab\u00a0text\u00a0\u00bb, \u00ab\u00a0value\u00a0\u00bb: \u00ab\u00a0Hello\u00a0\u00bb }<br>\n  ]<br>\n}<\/div>\n<p>La cl\u00e9 <strong>botnation<\/strong> avec la valeur <strong>v1<\/strong> est obligatoire pour que la r\u00e9ponse soit prise en compte. Le tableau <strong>reply<\/strong> contient ensuite un ou plusieurs \u00e9l\u00e9ments, chacun avec un type et une valeur. La r\u00e9ponse doit contenir uniquement le JSON : rien avant, rien apr\u00e8s, pas m\u00eame une ligne de log.<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Type<\/th>\n<th>R\u00f4le<\/th>\n<th>Exemple d\u2019usage<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>text<\/td>\n<td>Affiche un texte<\/td>\n<td>Message de confirmation, variable inject\u00e9e avec {{variable}}<\/td>\n<\/tr>\n<tr>\n<td>delay<\/td>\n<td>Ins\u00e8re un d\u00e9lai entre deux \u00e9l\u00e9ments<\/td>\n<td>Pause de quelques secondes avant un second message<\/td>\n<\/tr>\n<tr>\n<td>image, video, audio<\/td>\n<td>Affichent un m\u00e9dia<\/td>\n<td>JPEG, MP4 ou MP3 h\u00e9berg\u00e9s sur votre serveur<\/td>\n<\/tr>\n<tr>\n<td>set<\/td>\n<td>Affecte une variable utilisateur<\/td>\n<td>Enregistre une valeur, r\u00e9utilis\u00e9e avec {{nom}}<\/td>\n<\/tr>\n<tr>\n<td>set_gobal<\/td>\n<td>Affecte une variable globale<\/td>\n<td>R\u00e9utilisable dans tout le chatbot avec {{%%nom%%}}<\/td>\n<\/tr>\n<tr>\n<td>button<\/td>\n<td>Affiche des boutons<\/td>\n<td>3 boutons maximum, avec redirection vers un mot-cl\u00e9<\/td>\n<\/tr>\n<tr>\n<td>quickreply<\/td>\n<td>Affiche des r\u00e9ponses rapides<\/td>\n<td>11 boutons maximum, avec ic\u00f4ne optionnelle<\/td>\n<\/tr>\n<tr>\n<td>web_url<\/td>\n<td>Ouvre un site web<\/td>\n<td>Ratio compact, tall, full ou current<\/td>\n<\/tr>\n<tr>\n<td>phone_call<\/td>\n<td>Lance un appel t\u00e9l\u00e9phonique<\/td>\n<td>Num\u00e9ro avec l\u2019indicatif du pays<\/td>\n<\/tr>\n<tr>\n<td>location<\/td>\n<td>Demande la g\u00e9olocalisation<\/td>\n<td>Uniquement sur Facebook Messenger<\/td>\n<\/tr>\n<tr>\n<td>carousel<\/td>\n<td>Affiche un carrousel de pages<\/td>\n<td>Ratio horizontal ou square, plusieurs pages et boutons<\/td>\n<\/tr>\n<tr>\n<td>redirect<\/td>\n<td>Redirige vers une s\u00e9quence<\/td>\n<td>Par mot-cl\u00e9 ou par identifiant de bloc<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"bn-tip\">\n<span class=\"bn-klabel\">Astuce<\/span>\n<p>Une virgule oubli\u00e9e ou une accolade doubl\u00e9e suffit \u00e0 annuler la r\u00e9ponse. Utilisez un validateur JSON en ligne avant de publier votre service : c\u2019est le cas le plus fr\u00e9quent des \u00ab webhooks qui ne fonctionnent pas \u00bb, et il se corrige en une seconde.<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"A_vous_configurez_votre_flux_webhook\"><\/span>\u00c0 vous : configurez votre flux webhook<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Quatre r\u00e9ponses suffisent pour obtenir une configuration recommand\u00e9e, adapt\u00e9e au format de r\u00e9ponse attendu par Botnation et aux pi\u00e8ges de cette section.<\/p>\n<div class=\"whc\" id=\"bn-whc\">\n<div class=\"whc-q\">\n<p class=\"whc-qt\">Qu\u2019est-ce qui d\u00e9clenche l\u2019appel ?<\/p>\n<div class=\"cdc-chips\">\n<label class=\"cdc-chip\" for=\"whc-ev1\"><input type=\"radio\" id=\"whc-ev1\" name=\"whcEv\" data-p=\"1\"> Une variable vient d\u2019\u00eatre collect\u00e9e<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-ev2\"><input type=\"radio\" id=\"whc-ev2\" name=\"whcEv\" data-p=\"2\"> Une commande ou un achat<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-ev3\"><input type=\"radio\" id=\"whc-ev3\" name=\"whcEv\" data-p=\"3\"> Une ville ou un GPS<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-ev4\"><input type=\"radio\" id=\"whc-ev4\" name=\"whcEv\" data-p=\"4\"> Un texte libre<\/label>\n<\/div>\n<\/div>\n<div class=\"whc-q\">\n<p class=\"whc-qt\">O\u00f9 envoyer les donn\u00e9es ?<\/p>\n<div class=\"cdc-chips\">\n<label class=\"cdc-chip\" for=\"whc-dt1\"><input type=\"radio\" id=\"whc-dt1\" name=\"whcDt\" data-p=\"1\"> CRM<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-dt2\"><input type=\"radio\" id=\"whc-dt2\" name=\"whcDt\" data-p=\"2\"> Tableur (Google Sheets)<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-dt3\"><input type=\"radio\" id=\"whc-dt3\" name=\"whcDt\" data-p=\"3\"> ERP ou base interne<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-dt4\"><input type=\"radio\" id=\"whc-dt4\" name=\"whcDt\" data-p=\"4\"> API m\u00e9tier<\/label>\n<\/div>\n<\/div>\n<div class=\"whc-q\">\n<p class=\"whc-qt\">Quel mode d\u2019ex\u00e9cution ?<\/p>\n<div class=\"cdc-chips\">\n<label class=\"cdc-chip\" for=\"whc-md1\"><input type=\"radio\" id=\"whc-md1\" name=\"whcMd\" data-p=\"1\"> Synchrone : attendre la r\u00e9ponse<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-md2\"><input type=\"radio\" id=\"whc-md2\" name=\"whcMd\" data-p=\"2\"> Asynchrone : en parall\u00e8le<\/label>\n<\/div>\n<\/div>\n<div class=\"whc-q\">\n<p class=\"whc-qt\">Faut-il traiter la r\u00e9ponse ?<\/p>\n<div class=\"cdc-chips\">\n<label class=\"cdc-chip\" for=\"whc-js1\"><input type=\"radio\" id=\"whc-js1\" name=\"whcJs\" data-p=\"1\"> Oui : utiliser la r\u00e9ponse du service<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-js2\"><input type=\"radio\" id=\"whc-js2\" name=\"whcJs\" data-p=\"2\"> Non : simple collecte<\/label>\n<\/div>\n<\/div>\n<p class=\"whc-hint\" id=\"whc-hint\">Choisissez vos quatre r\u00e9ponses ci-dessus : la configuration recommand\u00e9e appara\u00eetra ici, avec les r\u00e9glages \u00e0 v\u00e9rifier avant de publier votre flux.<\/p>\n<div class=\"whc-out\" id=\"whc-out\">\n<div class=\"whc-line\" id=\"whcA1\"><b>Donn\u00e9es envoy\u00e9es<\/b><span>La variable collect\u00e9e juste avant l\u2019appel. Placez toujours le webhook apr\u00e8s la collecte des donn\u00e9es, sinon il n\u2019a rien \u00e0 envoyer.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcA2\"><b>Donn\u00e9es envoy\u00e9es<\/b><span>Le num\u00e9ro de commande ou l\u2019identifiant collect\u00e9 dans la conversation, transmis en param\u00e8tre de l\u2019URL.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcA3\"><b>Donn\u00e9es envoy\u00e9es<\/b><span>La ville ou les coordonn\u00e9es GPS collect\u00e9es aupr\u00e8s de l\u2019utilisateur.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcA4\"><b>Donn\u00e9es envoy\u00e9es<\/b><span>Le texte saisi par l\u2019utilisateur, transmis en param\u00e8tre \u00e0 votre service.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB1\"><b>Appel<\/b><span>Appel POST vers votre CRM, URL en HTTPS obligatoire, en-t\u00eate personnalis\u00e9 si le CRM exige une cl\u00e9, param\u00e8tres ajout\u00e9s directement dans l\u2019URL.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB2\"><b>Appel<\/b><span>Appel POST vers votre tableur connect\u00e9, URL HTTPS fournie par le service, donn\u00e9es pass\u00e9es en param\u00e8tres.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB3\"><b>Appel<\/b><span>Appel POST vers votre ERP ou votre base interne : URL HTTPS fournie par votre \u00e9quipe technique, en-t\u00eate d\u2019authentification personnalis\u00e9.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB4\"><b>Appel<\/b><span>Appel POST ou GET selon l\u2019endpoint de votre API m\u00e9tier : URL HTTPS, param\u00e8tres personnalis\u00e9s, en-t\u00eate d\u00e9di\u00e9 pour l\u2019authentification.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcC1\"><b>Ex\u00e9cution<\/b><span>Traitement synchrone : le chatbot met son ex\u00e9cution en pause et attend la r\u00e9ponse du service. \u00c0 choisir si une \u00e9tape suivante d\u00e9pend de cet appel, par exemple compter les utilisateurs apr\u00e8s un ajout.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcC2\"><b>Ex\u00e9cution<\/b><span>Traitement asynchrone : l\u2019appel part en parall\u00e8le et l\u2019utilisateur continue sans attendre. V\u00e9rifiez quand m\u00eame l\u2019ordre de vos fonctions si l\u2019une d\u00e9pend de l\u2019autre.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcD1\"><b>R\u00e9ponse et erreurs<\/b><span>Traitement de la r\u00e9ponse activ\u00e9 : le synchrone s\u2019active automatiquement, la documentation pr\u00e9voit une r\u00e9ponse en moins de 10 secondes, en JSON pur encod\u00e9 en UTF-8 avec l\u2019en-t\u00eate application\/json recommand\u00e9, au format botnation v1 avec le tableau reply. Mettez en cache si la r\u00e9ponse est r\u00e9utilisable, comme la m\u00e9t\u00e9o ou les actualit\u00e9s.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcD2\"><b>R\u00e9ponse et erreurs<\/b><span>Simple collecte : n\u2019activez pas le traitement de la r\u00e9ponse, configurez la s\u00e9quence de redirection en cas d\u2019erreur, et r\u00e9servez le cache aux donn\u00e9es r\u00e9utilisables, car un cache r\u00e9gl\u00e9 sur une heure limite l\u2019appel \u00e0 une fois par heure maximum.<\/span><\/div>\n<\/div>\n<\/div>\n<p><script>(function(){var r=document.getElementById(\"bn-whc\");if(!r){return;}function sel(n){var e=r.querySelector(\"input[name='\"+n+\"']:checked\");return e?e.getAttribute(\"data-p\"):\"\";}function sw(prefix,n){var i;for(i=1;5>i;i++){var el=document.getElementById(prefix+i);if(el){if(i===n){el.classList.add(\"on\");}else{el.classList.remove(\"on\");}}}}function up(){var a=sel(\"whcEv\"),b=sel(\"whcDt\"),c=sel(\"whcMd\"),d=sel(\"whcJs\"),h=document.getElementById(\"whc-hint\"),o=document.getElementById(\"whc-out\");if(!a||!b||!c||!d){h.style.display=\"block\";o.classList.remove(\"show\");return;}sw(\"whcA\",parseInt(a,10));sw(\"whcB\",parseInt(b,10));sw(\"whcC\",parseInt(c,10));sw(\"whcD\",parseInt(d,10));h.style.display=\"none\";o.classList.add(\"show\");}r.addEventListener(\"change\",up);})();<\/script><\/p>\n<h2 id=\"no-code\"><span class=\"ez-toc-section\" id=\"No-code_ou_developpeur_qui_branche_votre_webhook\"><\/span>No-code ou d\u00e9veloppeur : qui branche votre webhook ?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Le webhook de Botnation se configure dans l\u2019\u00e9diteur, par des champs et des cases \u00e0 cocher : pas de code, pas de serveur \u00e0 maintenir. C\u2019est le produit d\u2019une plateforme no-code, et c\u2019est le cas d\u2019usage qui convient \u00e0 la majorit\u00e9 des \u00e9quipes marketing, support ou e-commerce.<\/p>\n<p>Mais il y a l\u2019autre face du miroir : le service qui re\u00e7oit l\u2019appel. Une API de CRM n\u2019est pas toujours triviale \u00e0 documenter, un ERP interne peut exiger un travail d\u2019ing\u00e9nierie, et le format de r\u00e9ponse JSON doit \u00eatre respect\u00e9 au mot pr\u00e8s. C\u2019est l\u00e0 qu\u2019intervient le second m\u00e9tier de Botnation. En plus d\u2019\u00e9diter la plateforme, Botnation r\u00e9alise des <strong>chatbots sur mesure<\/strong> via son offre Entreprise, avec ses <strong>experts en cr\u00e9ation de chatbot<\/strong> : configuration du bot, branchements, sc\u00e9narios, livraison. Le prix et les d\u00e9lais passent par un <a href=\"https:\/\/botnation.ai\/fr\/chatbot-devis\/\">devis<\/a>.<\/p>\n<p>L\u2019avantage qui fait la diff\u00e9rence : l\u2019\u00e9quipe qui construit votre chatbot est celle qui \u00e9dite la plateforme. Pour un m\u00e9tier tr\u00e8s sp\u00e9cifique, une r\u00e9gie sur place ou un int\u00e9grateur d\u00e9j\u00e0 en poste chez vous, une agence tierce reste une option l\u00e9gitime : cela se discute, et c\u2019est m\u00eame un point de confiance pour un projet \u00e0 fort enjeu.<\/p>\n<div class=\"bn-cols\">\n<div class=\"bn-col biz\">\n<h4><span class=\"ez-toc-section\" id=\"Cote_plateforme_Botnation\"><\/span><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 7h18M3 12h18M3 17h18\"><\/path><\/svg>C\u00f4t\u00e9 plateforme Botnation<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>\u00c9l\u00e9ment Webhook en no-code, avec champs et cases \u00e0 cocher<\/li>\n<li>Bouton de test et simulation des variables<\/li>\n<li>Documentation officielle en fran\u00e7ais et en anglais<\/li>\n<li>Support et experts en cr\u00e9ation de chatbot sur devis<\/li>\n<\/ul>\n<\/div>\n<div class=\"bn-col cli\">\n<h4><span class=\"ez-toc-section\" id=\"Cote_service_externe\"><\/span><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 6h16M4 12h10M4 18h14\"><\/path><\/svg>C\u00f4t\u00e9 service externe<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>Une URL HTTPS expos\u00e9e et document\u00e9e<\/li>\n<li>Une r\u00e9ponse JSON valide en moins de 10 secondes (recommandation document\u00e9e)<\/li>\n<li>Un en-t\u00eate d\u2019authentification si l\u2019API l\u2019exige<\/li>\n<li>Un d\u00e9lai d\u2019ing\u00e9nierie, parfois chez un prestataire<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"bn-info\">\n<span class=\"bn-klabel\">Bon \u00e0 savoir<\/span>\n<p>Pour un CRM ou un tableur grand public, le branchement c\u00f4t\u00e9 Botnation se fait sans code : ces services exposent eux-m\u00eames une URL de webhook, il suffit de la coller dans l\u2019\u00e9l\u00e9ment et de tester. L\u2019exposition de l\u2019URL, l\u2019authentification ou un format de r\u00e9ponse particulier peuvent en revanche demander une intervention technique. Si votre logiciel m\u00e9tier est une coquille ferm\u00e9e, c\u2019est l\u00e0 que l\u2019offre Entreprise de Botnation prend le relais, sur <a href=\"https:\/\/botnation.ai\/fr\/tarifs\/\">devis<\/a>.<\/p>\n<\/div>\n<h2 id=\"erreurs\"><span class=\"ez-toc-section\" id=\"Les_six_erreurs_qui_font_echouer_un_webhook\"><\/span>Les six erreurs qui font \u00e9chouer un webhook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>La documentation traitant des pannes est courte, et c\u2019est instructif : presque tout se r\u00e9sume \u00e0 six cas, dont trois sont des r\u00e9glages.<\/p>\n<ol class=\"bn-steps\">\n<li><b>Activer le cache sans raison.<\/b> Si l\u2019appel ne part pas \u00e0 chaque fois, c\u2019est certainement la case \u00ab cache \u00bb qui est coch\u00e9e \u00e0 tort. Si vous activez un cache r\u00e9gl\u00e9 sur une heure, l\u2019appel n\u2019est envoy\u00e9 qu\u2019une fois par heure maximum, alors que vous voulez chaque \u00e9v\u00e9nement. Le cache est fait pour une information r\u00e9utilisable, comme la m\u00e9t\u00e9o.<\/li>\n<li><b>Placer le webhook avant la collecte.<\/b> \u00c0 cet endroit, le webhook n\u2019a aucune donn\u00e9e \u00e0 envoyer. Le test simple : afficher la variable dans un message juste avant l\u2019appel, et v\u00e9rifier qu\u2019elle n\u2019est pas vide.<\/li>\n<li><b>D\u00e9passer le d\u00e9lai de r\u00e9ponse.<\/b> Pour le traitement de la r\u00e9ponse JSON, la documentation indique une r\u00e9ponse attendue en moins de 10 secondes ; au-del\u00e0, la connexion est interrompue et la r\u00e9ponse annul\u00e9e. Un serveur lent ou une base lourde est un cas d\u2019\u00e9cole.<\/li>\n<li><b>R\u00e9pondre autre chose que du JSON pur.<\/b> Une ligne de log, un espace blanc ou un apostrophe mal plac\u00e9e avant ou apr\u00e8s le JSON suffit \u00e0 annuler la r\u00e9ponse. L\u2019en-t\u00eate content-type application\/json est recommand\u00e9 par la documentation, et l\u2019encodage doit \u00eatre UTF-8.<\/li>\n<li><b>Oublier le synchrone quand l\u2019ordre compte.<\/b> Deux fonctions encha\u00een\u00e9es sans attente produisent des r\u00e9sultats faux, comme le compteur d\u2019utilisateurs lanc\u00e9 avant la fin de l\u2019ajout.<\/li>\n<li><b>Ne pas pr\u00e9voir la s\u00e9quence de redirection.<\/b> En cas d\u2019erreur, sans redirection configur\u00e9e, l\u2019utilisateur reste sur place et le parcours s\u2019arr\u00eate net. Une redirection vers un message de confirmation ou vers un conseiller r\u00e8gle le probl\u00e8me.<\/li>\n<\/ol>\n<div class=\"bn-fig\">\n<img decoding=\"async\" src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-webhook-capa2.jpg\" alt=\"Page d'aide de Botnation : pourquoi mon webhook ne fonctionne pas toujours, avec l'aper\u00e7u de l'\u00e9l\u00e9ment Webhook\"><figcaption>Une page d\u2019aide d\u00e9di\u00e9e r\u00e9pond au cas le plus fr\u00e9quent : le cache activ\u00e9 \u00e0 tort sur l\u2019\u00e9l\u00e9ment Webhook.<\/figcaption><\/div>\n<p>Et si un doute persiste, la page <a href=\"https:\/\/botnation.ai\/fr\/support\/pourquoi-mon-webhook-ne-fonctionne-pas-toujours\/\">\u00ab Pourquoi mon webhook ne fonctionne pas toujours \u00bb<\/a> du support Botnation fait le tour de la question, cas de cache compris.<\/p>\n<h2 id=\"prix\"><span class=\"ez-toc-section\" id=\"Ce_que_ca_coute\"><\/span>Ce que \u00e7a co\u00fbte<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Les webhooks font partie des fonctions incluses dans les offres payantes de Botnation : la page Tarifs les mentionne parmi les fonctionnalit\u00e9s comprises dans le plan (consult\u00e9e le 26\/08\/2026). L\u2019\u00e9l\u00e9ment Webhook est un composant standard de l\u2019\u00e9diteur, pas une option \u00e0 acheter s\u00e9par\u00e9ment. Le compte gratuit sert surtout \u00e0 cr\u00e9er et tester avant la mise en ligne. Ce qui change selon le plan, ce sont les limites d\u2019usage (utilisateurs, cr\u00e9dits, fonctionnalit\u00e9s avanc\u00e9es) :<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Offre<\/th>\n<th>Prix<\/th>\n<th>Ce qui compte pour un projet webhook<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>GRATUIT<\/td>\n<td>0 \u20ac<\/td>\n<td>Cr\u00e9er et tester un premier flux avant publication ; la mise en ligne d\u00e9marre \u00e0 39 \u20ac\/mois (page Tarifs, consult\u00e9e le 26\/08\/2026)<\/td>\n<\/tr>\n<tr>\n<td>BASIC<\/td>\n<td>39 \u20ac \/ mois<\/td>\n<td>500 utilisateurs et 500 cr\u00e9dits IA offerts une seule fois<\/td>\n<\/tr>\n<tr>\n<td>PRO<\/td>\n<td>59 \u20ac \/ mois<\/td>\n<td>1 000 utilisateurs et 1 000 cr\u00e9dits IA offerts une seule fois<\/td>\n<\/tr>\n<tr>\n<td>ENTREPRISE<\/td>\n<td>Sur mesure<\/td>\n<td>Services de cr\u00e9ation de chatbot, responsable de compte d\u00e9di\u00e9, support premium<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u00c0 titre de rep\u00e8re : pour un d\u00e9veloppement de chatbot men\u00e9 par vos propres moyens, hors plateforme SaaS, la page Tarifs de Botnation indique \u00ab en g\u00e9n\u00e9ral entre 5 000 \u20ac et 30 000 \u20ac, voire bien plus, selon les fonctionnalit\u00e9s \u00bb, et pr\u00e9cise que ces fourchettes sont indicatives (consult\u00e9e le 26\/08\/2026). C\u00f4t\u00e9 Botnation, la fourchette exacte d\u00e9pend du p\u00e9rim\u00e8tre, et l\u2019offre Entreprise se n\u00e9gocie <a href=\"https:\/\/botnation.ai\/fr\/chatbot-devis\/\">sur devis<\/a>, comme toute prestation sur mesure : le bon r\u00e9flexe est de d\u00e9crire le flux cible et de demander l\u2019estimation.<\/p>\n<h2 id=\"faq\"><span class=\"ez-toc-section\" id=\"Questions_frequentes\"><\/span>Questions fr\u00e9quentes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<details class=\"bn-faq\">\n<summary>Un webhook est-il une API ?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Un webhook utilise HTTP, comme une API, mais le sens de la communication est invers\u00e9. Avec une API classique, c\u2019est votre syst\u00e8me qui interroge le service \u00e0 la demande. Avec un webhook, c\u2019est le service qui vous pr\u00e9vient au moment de l\u2019\u00e9v\u00e9nement : le chatbot appelle l\u2019URL, et le service r\u00e9pond. Dit autrement, une API qui permet de lire des donn\u00e9es, un webhook sert \u00e0 pousser des donn\u00e9es au bon moment.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Faut-il savoir coder pour brancher un webhook sur Botnation ?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Non. Dans Botnation, l\u2019\u00e9l\u00e9ment Webhook se configure par des champs : URL, m\u00e9thode, param\u00e8tres, en-t\u00eate, cases \u00e0 cocher pour le mode synchrone et le traitement de la r\u00e9ponse. Aucune ligne de code dans la plateforme. C\u00f4t\u00e9 service externe, l\u2019URL doit \u00eatre expos\u00e9e et savoir r\u00e9pondre au format attendu : cela peut demander une intervention technique, et c\u2019est l\u00e0 que l\u2019offre Entreprise de Botnation peut intervenir.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Le traitement synchrone ralentit-il mon chatbot ?<\/summary>\n<div class=\"bn-faq-b\">\n<p>En mode synchrone, le chatbot attend la r\u00e9ponse du service avant de poursuivre : le temps de r\u00e9ponse s\u2019ajoute donc au parcours. Pour le traitement de la r\u00e9ponse JSON, la documentation d\u00e9crit un d\u00e9lai de 10 secondes : au-del\u00e0, la connexion est interrompue et la r\u00e9ponse annul\u00e9e. La documentation recommande de ne brancher par webhook que des services dont le temps de r\u00e9ponse est instantan\u00e9, et d\u2019utiliser le cache pour les contenus r\u00e9utilisables. Pour une simple collecte, le mode asynchrone laisse la conversation continuer.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Puis-je utiliser un webhook pour envoyer un message WhatsApp proactif ?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Oui, c\u2019est un cas d\u2019usage typique. Le webhook d\u00e9clenche l\u2019envoi depuis votre service (par exemple un changement de statut), et Botnation transmet le message sur le canal WhatsApp de votre choix. Les bonnes pratiques des messages proactifs sont d\u00e9taill\u00e9es dans la page <a href=\"https:\/\/botnation.ai\/fr\/support\/notifications-whatsapp\/\">Notifications WhatsApp<\/a> du support, et le choix du canal se fait sur la page <a href=\"https:\/\/botnation.ai\/fr\/canaux\/\">Canaux<\/a>.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Pourquoi mon webhook ne fonctionne que parfois ?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Le cas le plus fr\u00e9quent est le cache activ\u00e9 sur l\u2019\u00e9l\u00e9ment Webhook : si le cache est activ\u00e9 avec une dur\u00e9e d\u2019une heure, l\u2019appel n\u2019est envoy\u00e9 qu\u2019une fois par heure, d\u2019o\u00f9 une impression d\u2019\u00e9chec al\u00e9atoire. V\u00e9rifiez aussi que le webhook est bien plac\u00e9 apr\u00e8s la collecte des donn\u00e9es, que le service r\u00e9pond dans le d\u00e9lai document\u00e9 (moins de 10 secondes) et que la r\u00e9ponse est un JSON pur, sans rien avant ni apr\u00e8s.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Quel plan pour commencer ?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Un compte GRATUIT permet de cr\u00e9er et tester votre premier flux webhook (sans carte bancaire, page Tarifs consult\u00e9e le 26\/08\/2026) ; la mise en ligne de votre chatbot d\u00e9marre \u00e0 39 \u20ac\/mois et les webhooks font partie des fonctions incluses. Pour un projet qui monte en charge et avec des fonctionnalit\u00e9s avanc\u00e9es, les offres BASIC et PRO couvrent les besoins d\u2019une \u00e9quipe. Et si vous voulez que le flux soit con\u00e7u et configur\u00e9 par des experts, l\u2019offre ENTREPRISE inclut les services de cr\u00e9ation de chatbot, <a href=\"https:\/\/botnation.ai\/fr\/chatbot-devis\/\">sur devis<\/a>.<\/p>\n<\/div>\n<\/details>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"Ce_quil_faut_retenir\"><\/span>Ce qu\u2019il faut retenir<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Un webhook n\u2019est pas une technologie r\u00e9serv\u00e9e aux d\u00e9veloppeurs : c\u2019est le standard de connexion entre un chatbot et un syst\u00e8me d\u2019information, et sa configuration c\u00f4t\u00e9 Botnation se fait sans code. Trois r\u00e8gles de base \u00e9vitent la plupart des pannes : placer le webhook apr\u00e8s la collecte, activer le synchrone quand l\u2019ordre des \u00e9tapes compte, et ne pas activer le cache pour une donn\u00e9e qui doit circuler \u00e0 chaque \u00e9v\u00e9nement.<\/p>\n<p>Et quand le format de r\u00e9ponse ou l\u2019ERP se complique, vous avez le choix : configurer vous-m\u00eame dans l\u2019\u00e9diteur, ou confier le flux \u00e0 l\u2019\u00e9quipe Botnation qui \u00e9dite la plateforme. Dans les deux cas, les cas d\u2019usage sont d\u00e9j\u00e0 document\u00e9s, test\u00e9s et illustr\u00e9s dans le support officiel.<\/p>\n<div class=\"bn-cta\">\n<h3><span class=\"ez-toc-section\" id=\"Connectez_votre_chatbot_a_votre_ecosysteme\"><\/span>Connectez votre chatbot \u00e0 votre \u00e9cosyst\u00e8me<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Cr\u00e9ez votre compte gratuit, construisez votre premier flux webhook vers votre CRM ou votre tableur et testez-le avant la mise en ligne de votre chatbot. Pour un projet sur mesure, demandez un devis : nos experts en cr\u00e9ation de chatbot r\u00e9pondent en ligne.<\/p>\n<p><a class=\"bn-cta-btn\" href=\"https:\/\/botnation.ai\/fr\/tarifs\/\">Voir les offres<\/a><\/p>\n<p><a href=\"https:\/\/botnation.ai\/fr\/chatbot-devis\/\">Demander un devis<\/a> \u00b7 <a href=\"https:\/\/botnation.ai\/fr\/contact\/\">Contacter un expert<\/a> \u00b7 <a href=\"https:\/\/botnation.ai\/fr\/clients\/\">Ils nous font confiance<\/a><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>En bref Un webhook est un appel HTTP d\u00e9clench\u00e9 par un \u00e9v\u00e9nement : le chatbot pousse les donn\u00e9es d\u2019une conversation vers un service externe (CRM, tableur, ERP), sans que ce service ait \u00e0 interroger quoi que ce soit. Sur Botnation, l\u2019\u00e9l\u00e9ment Webhook importe et exporte automatiquement des donn\u00e9es vers n\u2019importe quel syst\u00e8me HTTP : URL [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":31444,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[346],"tags":[],"class_list":["post-31447","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chatbot"],"acf":[],"_links":{"self":[{"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/posts\/31447","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/comments?post=31447"}],"version-history":[{"count":6,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/posts\/31447\/revisions"}],"predecessor-version":[{"id":31460,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/posts\/31447\/revisions\/31460"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/media\/31444"}],"wp:attachment":[{"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/media?parent=31447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/categories?post=31447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botnation.ai\/fr\/wp-json\/wp\/v2\/tags?post=31447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}