{"id":31452,"date":"2026-08-26T14:50:00","date_gmt":"2026-08-26T12:50:00","guid":{"rendered":"https:\/\/botnation.ai\/chatbot-webhook\/"},"modified":"2026-08-26T17:48:35","modified_gmt":"2026-08-26T15:48:35","slug":"chatbot-webhook","status":"publish","type":"post","link":"https:\/\/botnation.ai\/en\/chatbot-webhook\/","title":{"rendered":"Chatbot Webhook: How to Connect Your Bot to Your Tools in Real Time"},"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<p><\/p>\n<div class=\"bn-art\">\n<div class=\"bn-tldr\">\n<span class=\"bn-klabel\">In short<\/span>\n<ul>\n<li>A <strong>webhook<\/strong> is an HTTP call triggered by an event: the chatbot pushes the data of a conversation to an external system (CRM, spreadsheet, ERP), without that system having to poll anything.<\/li>\n<li>In Botnation, the <strong>Webhook<\/strong> element automatically imports and exports data to any HTTP system: mandatory <strong>HTTPS<\/strong> URL, <strong>POST or GET<\/strong> call, custom header, parameters, test button.<\/li>\n<li>Two options change everything: <strong>synchronous processing<\/strong> (the chatbot waits for the answer, the order of the steps is guaranteed) and <strong>JSON response processing<\/strong>, which follows a precise format and automatically switches to synchronous mode.<\/li>\n<li>The most frequent mistakes: a webhook placed <strong>before<\/strong> data collection, a cache enabled for no reason (a cache set to one hour limits the call to once per hour), an answer beyond the documented delay (<strong>10 seconds<\/strong>), malformed JSON.<\/li>\n<li>No coding needed on the Botnation side: the Webhook element is configured in no-code mode on the platform. On the external side, the endpoint that receives the call, its authentication and the answer format may require technical work. Botnation also provides <strong>custom chatbot creation services<\/strong> with its Entreprise offer, on a quote.<\/li>\n<\/ul>\n<\/div>\n<p>Your chatbot has just collected an order, a phone number or an address. What happens next? In many projects, the honest answer is: nothing automated. An employee copies the order into the CRM, a CSV file is exported once a week, or the data sleeps in the chatbot database and never reaches the business software.<\/p>\n<p>The <strong>webhook<\/strong> is the technical answer to that question, and its configuration on the Botnation side requires no code. It is the mechanism that lets a chatbot tell another piece of software: \u201csomething just happened, here is the data, your turn\u201d. Connecting a chatbot to a <a href=\"https:\/\/botnation.ai\/en\/products\/lead-generation\/\">lead generation module<\/a>, to an <a href=\"https:\/\/botnation.ai\/en\/products\/e-commerce\/\">e-commerce module<\/a> or to an ERP almost always goes through it.<\/p>\n<p>A successful integration is not measured by the number of webhooks connected. Start with a single flow, the one that relieves your team the most: an order to the ERP, a lead to the CRM. Make it reliable, measure its response time, then connect the next one. Botnation\u2019s dedicated queue absorbs the calls, but each slow service adds wait to the conversation: restraint is an architecture decision too, and it pays off in minutes of conversation gained.<\/p>\n<p>On Google, the \u201cchatbot webhook\u201d query mostly returns technical documentation from chatbot platforms and integration tutorials, often in English, rarely a decision-oriented guide that says when to use it, how to configure it and why it breaks. This article does all three, based on the official Botnation documentation and real use cases, plus a bonus flow configurator.<\/p>\n<p class=\"bn-cta-in\"><a class=\"bn-cta-btn\" href=\"https:\/\/start.botnation.ai\/login\">Create your chatbot for free<\/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\">Summary<\/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\/en\/chatbot-webhook\/#Webhook_and_chatbot_the_definition_that_matters\" >Webhook and chatbot: the definition that matters<\/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\/en\/chatbot-webhook\/#Why_a_chatbot_needs_a_webhook_four_real_cases\" >Why a chatbot needs a webhook: four real cases<\/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\/en\/chatbot-webhook\/#An_order_from_the_chat_must_reach_your_back_office\" >An order from the chat must reach your 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\/en\/chatbot-webhook\/#A_qualified_lead_must_land_in_the_CRM\" >A qualified lead must land in the 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\/en\/chatbot-webhook\/#The_Webhook_element_options_what_changes_everything\" >The Webhook element options: what changes everything<\/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\/en\/chatbot-webhook\/#The_call_settings\" >The call settings<\/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\/en\/chatbot-webhook\/#Synchronous_or_asynchronous_processing\" >Synchronous or asynchronous processing?<\/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\/en\/chatbot-webhook\/#Process_the_JSON_response\" >Process the JSON response<\/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\/en\/chatbot-webhook\/#The_JSON_response_format_decoded\" >The JSON response format, decoded<\/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\/en\/chatbot-webhook\/#Your_turn_configure_your_webhook_flow\" >Your turn: configure your webhook flow<\/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\/en\/chatbot-webhook\/#No-code_or_developer_who_connects_your_webhook\" >No-code or developer: who connects your 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\/en\/chatbot-webhook\/#On_the_Botnation_platform_side\" >On the Botnation platform side<\/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\/en\/chatbot-webhook\/#On_the_external_service_side\" >On the external service side<\/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\/en\/chatbot-webhook\/#The_six_mistakes_that_break_a_webhook\" >The six mistakes that break a 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\/en\/chatbot-webhook\/#What_it_costs\" >What it costs<\/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\/en\/chatbot-webhook\/#Frequently_asked_questions\" >Frequently asked questions<\/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\/en\/chatbot-webhook\/#What_to_remember\" >What to remember<\/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\/en\/chatbot-webhook\/#Connect_your_chatbot_to_your_ecosystem\" >Connect your chatbot to your ecosystem<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 id=\"definition\"><span class=\"ez-toc-section\" id=\"Webhook_and_chatbot_the_definition_that_matters\"><\/span>Webhook and chatbot: the definition that matters<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"bn-def\">\n<span class=\"bn-klabel\">Definition<\/span>\n<p>A <strong>webhook<\/strong> is an HTTP call triggered by an event: it is also called an \u201cHTTP callback\u201d. Instead of regularly asking a service \u201cdo you have anything new?\u201d, your chatbot sends it a request as soon as the event happens, with the conversation data as parameters. The service answers within a few milliseconds, or not at all. What happens then depends on the mode: with <strong>synchronous processing<\/strong>, the chatbot waits for the answer, and a redirect sequence can be set up if the service does not answer or returns an error; with <strong>asynchronous processing<\/strong>, the conversation continues while the call goes out in parallel.<\/p>\n<\/div>\n<p>Three properties distinguish the webhook from other exchange modes:<\/p>\n<ul>\n<li><strong>It is event-driven.<\/strong> The call goes out at the exact moment the variable is collected (an email address, an order number, a location), not at a scheduled time.<\/li>\n<li><strong>It is push-based.<\/strong> The external service has nothing to install and nothing to poll: it exposes a URL, and Botnation calls it.<\/li>\n<li><strong>It is synchronous or asynchronous.<\/strong> The chatbot can wait for the answer (synchronous processing) or keep the conversation running while the call goes out in parallel (asynchronous processing). We will see that this choice is decisive.<\/li>\n<\/ul>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>How it works<\/th>\n<th>When to choose it<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>API polling<\/td>\n<td>A service regularly queries the chatbot to fetch its data.<\/td>\n<td>Rare cases: the data must be read by a system that cannot be called.<\/td>\n<\/tr>\n<tr>\n<td>Webhook<\/td>\n<td>The chatbot pushes the data at the moment of the event, to an HTTPS URL.<\/td>\n<td>Standard case: CRM, spreadsheet, ERP, business API, notification to a third-party service.<\/td>\n<\/tr>\n<tr>\n<td>Manual export<\/td>\n<td>A human copies the data or exports a file from the platform.<\/td>\n<td>Low volume, or a startup phase before automating.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>A webhook is therefore nothing exotic: it is the standard channel between a chatbot and the rest of the information system. What varies is the configuration options and the pitfalls. That is what the next sections are about.<\/p>\n<h2 id=\"cas-usage\"><span class=\"ez-toc-section\" id=\"Why_a_chatbot_needs_a_webhook_four_real_cases\"><\/span>Why a chatbot needs a webhook: four real cases<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=\"An_order_from_the_chat_must_reach_your_back_office\"><\/span>An order from the chat must reach your back office<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">E-commerce and logistics<\/span><\/p><\/div>\n<\/div>\n<p>The customer picks a product, enters the address and validates in the chat. The chatbot records the order, then a webhook calls the order management system with the number, the customer and the address. The back office triggers the shipment and can send the delivery status back to the chatbot.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>Business side<\/b>The Botnation e-commerce module handles the transaction, and the webhook forwards the order to the ERP or the logistics provider, with no manual entry.<\/div>\n<div class=\"cli\"><b>Customer side<\/b>The customer gets an immediate confirmation, then up-to-date tracking in the conversation, on <a href=\"https:\/\/botnation.ai\/en\/channels\/\">the channel of their choice<\/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=\"A_qualified_lead_must_land_in_the_CRM\"><\/span>A qualified lead must land in the CRM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">Lead generation<\/span><\/p><\/div>\n<\/div>\n<p>The chatbot qualifies: name, company, budget, project. At the end of the journey, a webhook sends the full file to the CRM, which creates the prospect and assigns a salesperson. Without a webhook, you have to check the chatbot from time to time or retype the records: the processing time explodes and the leads go cold.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>Business side<\/b>The <a href=\"https:\/\/botnation.ai\/en\/products\/lead-generation\/\">lead generation module<\/a> qualifies, the webhook writes into the CRM, and the sales team works in a single tool.<\/div>\n<div class=\"cli\"><b>Customer side<\/b>The customer gets an immediate answer and a fast sales contact, without having to re-enter their details.<\/div>\n<\/div>\n<\/div>\n<p>The official Botnation documentation lists other simple yet powerful setups:<\/p>\n<ul>\n<li>Fetch your <strong>latest news<\/strong> every morning from your server, without entering it by hand in the chatbot tree.<\/li>\n<li>Send the <strong>city or GPS coordinates<\/strong> collected, and receive in return a message with the 7-day weather and an image generated by your system.<\/li>\n<li>Forward an <strong>order number<\/strong> and receive the delivery status, with an update of the user\u2019s variables.<\/li>\n<li>Send the <strong>title of a movie<\/strong> asked for by the user, and receive a trailer from your video database.<\/li>\n<\/ul>\n<p>These examples come from the article <a href=\"https:\/\/botnation.ai\/en\/support\/json-api-mode-automatically-import-and-export-chatbot-data-via-webhook\/\">\u201cAPI Botnation: importing and exporting data via webhook\u201d<\/a>, still the reference to read before plugging in your first flow.<\/p>\n<h2 id=\"options\"><span class=\"ez-toc-section\" id=\"The_Webhook_element_options_what_changes_everything\"><\/span>The Webhook element options: what changes everything<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In the Botnation platform, the webhook is an <strong>element of the tree<\/strong>, like a message or a question. It is placed in the scenario and configured with a few fields, without a single line of code.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"The_call_settings\"><\/span>The call settings<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>HTTPS URL<\/strong> mandatory: the secure protocol is enforced by the platform.<\/li>\n<li><strong>POST or GET method<\/strong>, at your choice, depending on what the external service expects.<\/li>\n<li><strong>Parameters<\/strong> added directly in the URL, or through the \u201c+ Add parameter\u201d option, with the chatbot variables between braces.<\/li>\n<li><strong>Custom header<\/strong> for services that require an authentication key.<\/li>\n<li><strong>\u201cTest Webhook\u201d button<\/strong> to check the URL before going live; if the URL contains variables, the platform lets you simulate them by entering test values.<\/li>\n<\/ul>\n<div class=\"bn-fig\">\n<img decoding=\"async\" src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-webhook-capa1-en.jpg\" alt=\"Botnation platform webhook tester interface, with parameter fields and the Test Webhook button\"><figcaption>In the Botnation documentation, the \u201cTest Webhook\u201d button calls the URL you entered and confirms that it is valid.<\/figcaption><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Synchronous_or_asynchronous_processing\"><\/span>Synchronous or asynchronous processing?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>Synchronous processing<\/strong> puts the chatbot on hold while the webhook delivers its answer. The official documentation gives a telling example: two webhook functions in a row. Function A adds a user to a database, function B counts the total number of users and stores the value in a variable. If A has not finished when B starts, the counter is wrong. Synchronous processing on A enforces the order of execution.<\/p>\n<p>If the option is not checked, the chatbot performs the request in parallel and continues its conversation: this is <strong>asynchronous<\/strong> processing. It suits collection only, when no result is used later in the scenario.<\/p>\n<p>In synchronous mode, a <strong>redirect sequence on error<\/strong> can be selected: if the webhook does not answer or returns an error, the user is sent to the chosen scenario instead of being stuck.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Process_the_JSON_response\"><\/span>Process the JSON response<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For advanced use, the Webhook element can <strong>read and process the response<\/strong> returned by the HTTP call. This is what makes it possible to generate custom answers from data on your own servers: text messages, images, videos, audio, variables or buttons. When this option is enabled, synchronous processing is activated automatically. The documentation then expects an answer within <strong>10 seconds<\/strong>: beyond that, the connection is interrupted and the answer cancelled. This limit is a documented behavior of the option, not a guarantee of platform performance. For reusable content (news, the weather of the same city), the answer can be <strong>cached<\/strong> for a few minutes up to several days, with JSON encoded in UTF-8, and <strong>application\/json<\/strong> as the content-type header recommended by the documentation.<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>Role<\/th>\n<th>What to remember<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>URL + method<\/td>\n<td>Defines the target of the call<\/td>\n<td>HTTPS mandatory, POST or GET depending on the service<\/td>\n<\/tr>\n<tr>\n<td>Parameters<\/td>\n<td>Carries the chatbot variables<\/td>\n<td>Add them to the URL or through the dedicated option<\/td>\n<\/tr>\n<tr>\n<td>Custom header<\/td>\n<td>Authenticates the call<\/td>\n<td>Essential for most APIs<\/td>\n<\/tr>\n<tr>\n<td>Test Webhook<\/td>\n<td>Checks the URL before production<\/td>\n<td>Simulate the variables with test values<\/td>\n<\/tr>\n<tr>\n<td>Synchronous processing<\/td>\n<td>Makes the chatbot wait for the answer<\/td>\n<td>Enable it if the next step depends on the call<\/td>\n<\/tr>\n<tr>\n<td>Redirect on error<\/td>\n<td>Fallback sequence<\/td>\n<td>Prevents a user stuck in the middle of a scenario<\/td>\n<\/tr>\n<tr>\n<td>Process the JSON response<\/td>\n<td>Uses the service answer<\/td>\n<td>Activates synchronous mode; answer expected in under 10 seconds (documentation)<\/td>\n<\/tr>\n<tr>\n<td>Cache<\/td>\n<td>Reuses an identical answer<\/td>\n<td>Reserve it for reusable data only<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"bn-warn\">\n<span class=\"bn-klabel\">Careful<\/span>\n<p>Your webhook must always be placed <strong>after<\/strong> data collection, never before: otherwise it has nothing to send. And avoid overloading your chatbot with webhook calls: Botnation puts the calls in a queue dedicated to your chatbot, and a long wait on a slow external service can severely slow down performance. Only connect services with instant response times through a webhook.<\/p>\n<\/div>\n<div class=\"bn-tip\">\n<span class=\"bn-klabel\">Tip<\/span>\n<p>To be sure that a variable actually contains information before it is sent, display it temporarily in a message just before the webhook: if the message is empty, the webhook is the one to move.<\/p>\n<\/div>\n<h2 id=\"format-json\"><span class=\"ez-toc-section\" id=\"The_JSON_response_format_decoded\"><\/span>The JSON response format, decoded<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>When response processing is enabled, the external service must answer in pure JSON encoded in UTF-8; the documentation recommends the <strong>application\/json<\/strong> content-type header. The format expected by the platform fits in a very short schema:<\/p>\n<div class=\"bn-code\">{<br>\n  \u201cbotnation\u201d: \u201cv1\u201d,<br>\n  \u201creply\u201d: [<br>\n    { \u201ctype\u201d: \u201ctext\u201d, \u201cvalue\u201d: \u201cHello\u201d }<br>\n  ]<br>\n}<\/div>\n<p>The <strong>botnation<\/strong> key with the value <strong>v1<\/strong> is mandatory for the answer to be taken into account. The <strong>reply<\/strong> array then contains one or more elements, each with a type and a value. The answer must contain only the JSON: nothing before, nothing after, not even a log line.<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Type<\/th>\n<th>Role<\/th>\n<th>Usage example<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>text<\/td>\n<td>Displays a text<\/td>\n<td>Confirmation message, variable injected with {{variable}}<\/td>\n<\/tr>\n<tr>\n<td>delay<\/td>\n<td>Inserts a delay between two elements<\/td>\n<td>A few seconds pause before a second message<\/td>\n<\/tr>\n<tr>\n<td>image, video, audio<\/td>\n<td>Display a media<\/td>\n<td>JPEG, MP4 or MP3 hosted on your server<\/td>\n<\/tr>\n<tr>\n<td>set<\/td>\n<td>Sets a user variable<\/td>\n<td>Stores a value, reused with {{name}}<\/td>\n<\/tr>\n<tr>\n<td>set_gobal<\/td>\n<td>Sets a global variable<\/td>\n<td>Reusable across the whole chatbot with {{%%name%%}}<\/td>\n<\/tr>\n<tr>\n<td>button<\/td>\n<td>Displays buttons<\/td>\n<td>3 buttons maximum, with redirect to a keyword<\/td>\n<\/tr>\n<tr>\n<td>quickreply<\/td>\n<td>Displays quick replies<\/td>\n<td>11 buttons maximum, with optional icon<\/td>\n<\/tr>\n<tr>\n<td>web_url<\/td>\n<td>Opens a website<\/td>\n<td>Ratio compact, tall, full or current<\/td>\n<\/tr>\n<tr>\n<td>phone_call<\/td>\n<td>Starts a phone call<\/td>\n<td>Number with the country code<\/td>\n<\/tr>\n<tr>\n<td>location<\/td>\n<td>Asks for geolocation<\/td>\n<td>Facebook Messenger only<\/td>\n<\/tr>\n<tr>\n<td>carousel<\/td>\n<td>Displays a carousel of pages<\/td>\n<td>Horizontal or square ratio, several pages and buttons<\/td>\n<\/tr>\n<tr>\n<td>redirect<\/td>\n<td>Redirects to a sequence<\/td>\n<td>By keyword or by block identifier<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"bn-tip\">\n<span class=\"bn-klabel\">Tip<\/span>\n<p>A missing comma or a doubled brace is enough to cancel the answer. Use an online JSON validator before publishing your service: it is the most common case of \u201cwebhooks that do not work\u201d, and it is fixed in one second.<\/p>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Your_turn_configure_your_webhook_flow\"><\/span>Your turn: configure your webhook flow<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Four answers are enough to get a recommended configuration, adapted to the answer format expected by Botnation and to the pitfalls of this section.<\/p>\n<div class=\"whc\" id=\"bn-whc\">\n<div class=\"whc-q\">\n<p class=\"whc-qt\">What triggers the call?<\/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\"> A variable was just collected<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-ev2\"><input type=\"radio\" id=\"whc-ev2\" name=\"whcEv\" data-p=\"2\"> An order or a purchase<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-ev3\"><input type=\"radio\" id=\"whc-ev3\" name=\"whcEv\" data-p=\"3\"> A city or a GPS position<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-ev4\"><input type=\"radio\" id=\"whc-ev4\" name=\"whcEv\" data-p=\"4\"> A free text<\/label>\n<\/div>\n<\/div>\n<div class=\"whc-q\">\n<p class=\"whc-qt\">Where should the data go?<\/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\"> Spreadsheet (Google Sheets)<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-dt3\"><input type=\"radio\" id=\"whc-dt3\" name=\"whcDt\" data-p=\"3\"> ERP or internal database<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-dt4\"><input type=\"radio\" id=\"whc-dt4\" name=\"whcDt\" data-p=\"4\"> Business API<\/label>\n<\/div>\n<\/div>\n<div class=\"whc-q\">\n<p class=\"whc-qt\">Which execution mode?<\/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\"> Synchronous: wait for the answer<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-md2\"><input type=\"radio\" id=\"whc-md2\" name=\"whcMd\" data-p=\"2\"> Asynchronous: in parallel<\/label>\n<\/div>\n<\/div>\n<div class=\"whc-q\">\n<p class=\"whc-qt\">Should the answer be processed?<\/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\"> Yes: use the service answer<\/label><br>\n<label class=\"cdc-chip\" for=\"whc-js2\"><input type=\"radio\" id=\"whc-js2\" name=\"whcJs\" data-p=\"2\"> No: simple collection<\/label>\n<\/div>\n<\/div>\n<p class=\"whc-hint\" id=\"whc-hint\">Choose your four answers above: the recommended configuration will appear here, with the settings to verify before publishing your flow.<\/p>\n<div class=\"whc-out\" id=\"whc-out\">\n<div class=\"whc-line\" id=\"whcA1\"><b>Data sent<\/b><span>The variable collected just before the call. Always place the webhook after data collection, otherwise it has nothing to send.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcA2\"><b>Data sent<\/b><span>The order number or identifier collected in the conversation, passed as a URL parameter.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcA3\"><b>Data sent<\/b><span>The city or GPS coordinates collected from the user.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcA4\"><b>Data sent<\/b><span>The text entered by the user, passed as a parameter to your service.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB1\"><b>Call<\/b><span>POST call to your CRM, mandatory HTTPS URL, custom header if the CRM requires a key, parameters added directly in the URL.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB2\"><b>Call<\/b><span>POST call to your connected spreadsheet, HTTPS URL provided by the service, data passed as parameters.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB3\"><b>Call<\/b><span>POST call to your ERP or your internal database: HTTPS URL provided by your technical team, custom authentication header.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcB4\"><b>Call<\/b><span>POST or GET call depending on the endpoint of your business API: HTTPS URL, custom parameters, dedicated header for authentication.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcC1\"><b>Execution<\/b><span>Synchronous processing: the chatbot pauses its execution and waits for the service answer. Choose this if a later step depends on the call, for example counting users after an addition.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcC2\"><b>Execution<\/b><span>Asynchronous processing: the call goes out in parallel and the user keeps going without waiting. Still check the order of your functions if one depends on the other.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcD1\"><b>Answer and errors<\/b><span>Response processing enabled: synchronous mode is activated automatically, the documentation expects an answer in under 10 seconds, in pure JSON encoded in UTF-8 with the recommended application\/json header, in the botnation v1 format with the reply array. Cache the answer if it is reusable, like weather or news.<\/span><\/div>\n<div class=\"whc-line\" id=\"whcD2\"><b>Answer and errors<\/b><span>Simple collection: do not enable response processing, set up the redirect sequence on error, and keep the cache for reusable data only, since a cache set to one hour limits the call to once per hour at most.<\/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_or_developer_who_connects_your_webhook\"><\/span>No-code or developer: who connects your webhook?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The Botnation webhook is configured in the editor, through fields and checkboxes: no code, no server to maintain. This is the result of a no-code platform, and it suits most marketing, support or e-commerce teams.<\/p>\n<p>But there is the other side of the coin: the service that receives the call. A CRM API is not always simple to document, an internal ERP can require engineering work, and the JSON answer format must be respected to the letter. This is where Botnation\u2019s second trade comes in. On top of publishing the platform, Botnation builds <strong>custom chatbots<\/strong> through its Entreprise offer, with its <strong>chatbot creation experts<\/strong>: bot configuration, integrations, scenarios, delivery. Price and timing go through a quote, <a href=\"https:\/\/botnation.ai\/en\/contact\/\">contact the sales team<\/a>.<\/p>\n<p>The advantage that makes the difference: the team that builds your chatbot is the one that publishes the platform. For a very specific business, an on-site team or an integrator already in place, a third-party agency remains a legitimate option: it is worth discussing, and it is even a point of trust for a high-stakes project.<\/p>\n<div class=\"bn-cols\">\n<div class=\"bn-col biz\">\n<h4><span class=\"ez-toc-section\" id=\"On_the_Botnation_platform_side\"><\/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>On the Botnation platform side<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>Webhook element in no-code mode, with fields and checkboxes<\/li>\n<li>Test button and variable simulation<\/li>\n<li>Official documentation in French and English<\/li>\n<li>Support and chatbot creation experts on a quote<\/li>\n<\/ul>\n<\/div>\n<div class=\"bn-col cli\">\n<h4><span class=\"ez-toc-section\" id=\"On_the_external_service_side\"><\/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>On the external service side<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>An exposed and documented HTTPS URL<\/li>\n<li>A valid JSON answer in under 10 seconds (documented recommendation)<\/li>\n<li>An authentication header if the API requires it<\/li>\n<li>Engineering time, sometimes with a provider<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"bn-info\">\n<span class=\"bn-klabel\">Good to know<\/span>\n<p>For a mainstream CRM or spreadsheet, the Botnation-side setup requires no code: most common services expose their own webhook URL, you just paste it into the element and test. Exposing the URL, authentication or a specific answer format may however require technical work. If your business software is a closed box, that is where Botnation\u2019s Entreprise offer takes over, <a href=\"https:\/\/botnation.ai\/en\/contact\/\">on a quote<\/a>.<\/p>\n<\/div>\n<h2 id=\"erreurs\"><span class=\"ez-toc-section\" id=\"The_six_mistakes_that_break_a_webhook\"><\/span>The six mistakes that break a webhook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The documentation about failures is short, and that is telling: almost everything comes down to six cases, three of which are settings.<\/p>\n<ol class=\"bn-steps\">\n<li><b>Enabling the cache for no reason.<\/b> If the call does not go out every time, it is certainly the \u201ccache\u201d box that is checked wrongly. If you enable a cache set to one hour, the call is only sent once per hour at most, while you want every event. The cache is made for reusable information, like the weather.<\/li>\n<li><b>Placing the webhook before collection.<\/b> In that spot, the webhook has no data to send. The simple test: display the variable in a message just before the call, and check that it is not empty.<\/li>\n<li><b>Exceeding the answer delay.<\/b> For JSON response processing, the documentation expects an answer in under 10 seconds; beyond that, the connection is interrupted and the answer cancelled. A slow server or a heavy database is a textbook case.<\/li>\n<li><b>Answering with anything but pure JSON.<\/b> A log line, a blank space or a misplaced apostrophe before or after the JSON is enough to cancel the answer. The application\/json content-type header is recommended by the documentation, and the encoding must be UTF-8.<\/li>\n<li><b>Forgetting synchronous mode when order matters.<\/b> Two chained functions without waiting produce wrong results, like a user counter started before the end of the addition.<\/li>\n<li><b>Not planning the redirect sequence.<\/b> On error, without a configured redirect, the user stays in place and the journey stops dead. A redirect to a confirmation message or to an advisor fixes the problem.<\/li>\n<\/ol>\n<div class=\"bn-fig\">\n<img decoding=\"async\" src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-webhook-capa2-en.jpg\" alt=\"Botnation support documentation showing the JSON reply format with the botnation v1 key and the reply array\"><figcaption>The official documentation shows the exact JSON shape expected when the service answers: botnation v1, then the reply array and its types.<\/figcaption><\/div>\n<p>And if any doubt remains, the <a href=\"https:\/\/botnation.ai\/en\/support\/why-my-webhook-doesnt-always-work\/\">\u201cWhy my webhook doesn\u2019t always work\u201d<\/a> help page covers the question, cache case included.<\/p>\n<h2 id=\"prix\"><span class=\"ez-toc-section\" id=\"What_it_costs\"><\/span>What it costs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Webhooks are among the features included in Botnation\u2019s paid plans: the Pricing page lists them among what \u201cyour chatbot plan includes\u201d (consulted on 26\/08\/2026). The Webhook element is a standard component of the editor, not an option to buy separately. The free account is mainly for creating and testing before going live. What changes with the plan is usage limits (users, credits, advanced features):<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Offer<\/th>\n<th>Price<\/th>\n<th>What matters for a webhook project<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>FOR FREE<\/td>\n<td>\u20ac0<\/td>\n<td>Create and test a first flow before publication; going live starts at \u20ac39\/month (Pricing page, consulted on 26\/08\/2026)<\/td>\n<\/tr>\n<tr>\n<td>BASIC<\/td>\n<td>\u20ac39 \/ month<\/td>\n<td>500 users and 500 AI credits offered once<\/td>\n<\/tr>\n<tr>\n<td>PRO<\/td>\n<td>\u20ac59 \/ month<\/td>\n<td>1,000 users and 1,000 AI credits offered once<\/td>\n<\/tr>\n<tr>\n<td>ENTREPRISE<\/td>\n<td>On demand<\/td>\n<td>Chatbot creation management, dedicated account manager, premium support<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>As a market reference: for a chatbot developed by your own means, outside the SaaS platform, Botnation\u2019s Pricing page states \u201cit will generally cost between \u20ac5,000 and \u20ac30,000, or even more, depending on the features you need\u201d, and adds that these ranges are indicative (consulted on 26\/08\/2026). On the Botnation side, the exact range depends on the scope, and the Entreprise offer is negotiated <a href=\"https:\/\/botnation.ai\/en\/contact\/\">on a quote<\/a>, like any custom service: the right reflex is to describe the target flow and ask for the estimate.<\/p>\n<h2 id=\"faq\"><span class=\"ez-toc-section\" id=\"Frequently_asked_questions\"><\/span>Frequently asked questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<details class=\"bn-faq\">\n<summary>Is a webhook an API?<\/summary>\n<div class=\"bn-faq-b\">\n<p>A webhook uses HTTP, like an API, but the direction of the communication is reversed. With a classic API, it is your system that queries the service on demand. With a webhook, it is the service that notifies you at the moment of the event: the chatbot calls the URL, and the service answers. In other words, an API lets you read data, a webhook pushes data at the right moment.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Do I need to know how to code to connect a webhook on Botnation?<\/summary>\n<div class=\"bn-faq-b\">\n<p>No. In Botnation, the Webhook element is configured through fields: URL, method, parameters, header, checkboxes for synchronous mode and response processing. No line of code in the platform. On the external side, the URL must be exposed and able to answer in the expected format: this may require technical work, and that is where Botnation\u2019s Entreprise offer can step in.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Does synchronous processing slow down my chatbot?<\/summary>\n<div class=\"bn-faq-b\">\n<p>In synchronous mode, the chatbot waits for the service answer before continuing: the response time is therefore added to the journey. For JSON response processing, the documentation describes a 10-second delay: beyond that, the connection is interrupted and the answer cancelled. The documentation recommends connecting only services with instant response times through a webhook, and using the cache for reusable content. For a simple collection, asynchronous mode lets the conversation continue.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Can I use a webhook to send a proactive WhatsApp message?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Yes, this is a typical use case. The webhook triggers the send from your service (for example a status change), and Botnation delivers the message on the WhatsApp channel of your choice. The best practices for proactive messages are detailed in the <a href=\"https:\/\/botnation.ai\/en\/support\/whatsapp-notifications-how-do-i-send-proactive-messages-marketing-messages-to-my-contacts\/\">WhatsApp Notifications<\/a> help page, and channel selection happens on the <a href=\"https:\/\/botnation.ai\/en\/channels\/\">Channels<\/a> page.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Why does my webhook only work sometimes?<\/summary>\n<div class=\"bn-faq-b\">\n<p>The most common case is the cache enabled on the Webhook element: if the cache is enabled with a one-hour duration, the call is only sent once per hour, which feels like random failure. Also check that the webhook is placed after data collection, that the service answers within the documented delay (under 10 seconds) and that the answer is pure JSON, with nothing before or after.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Which plan should I start with?<\/summary>\n<div class=\"bn-faq-b\">\n<p>A FOR FREE account lets you create and test your first webhook flow (no credit card, Pricing page consulted on 26\/08\/2026); launching your chatbot starts at \u20ac39\/month and webhooks are among the included features. For a project that grows and needs advanced features, the BASIC and PRO offers cover a team\u2019s needs. And if you want the flow to be designed and configured by experts, the ENTREPRISE offer includes chatbot creation services, <a href=\"https:\/\/botnation.ai\/en\/contact\/\">on a quote<\/a>.<\/p>\n<\/div>\n<\/details>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"What_to_remember\"><\/span>What to remember<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A webhook is not a technology reserved for developers: it is the standard connection between a chatbot and an information system, and its configuration on the Botnation side requires no code. Three basic rules avoid most failures: place the webhook after collection, enable synchronous mode when the order of steps matters, and do not enable the cache for data that must flow at every event.<\/p>\n<p>And when the answer format or the ERP gets complicated, you have a choice: configure it yourself in the editor, or hand the flow to the Botnation team that publishes the platform. In both cases, the use cases are already documented, tested and illustrated in the official support.<\/p>\n<div class=\"bn-cta\">\n<h3><span class=\"ez-toc-section\" id=\"Connect_your_chatbot_to_your_ecosystem\"><\/span>Connect your chatbot to your ecosystem<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Create your free account, build your first webhook flow to your CRM or your spreadsheet and test it before launching your chatbot. For a custom project, ask for a quote: our chatbot creation experts answer online.<\/p>\n<p><a class=\"bn-cta-btn\" href=\"https:\/\/botnation.ai\/en\/pricing\/\">See the offers<\/a><\/p>\n<p><a href=\"https:\/\/botnation.ai\/en\/contact\/\">Ask for a quote<\/a> \u00b7 <a href=\"https:\/\/botnation.ai\/en\/contact\/\">Talk to an expert<\/a> \u00b7 <a href=\"https:\/\/botnation.ai\/en\/clients\/\">They trust us<\/a><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In short A webhook is an HTTP call triggered by an event: the chatbot pushes the data of a conversation to an external system (CRM, spreadsheet, ERP), without that system having to poll anything. In Botnation, the Webhook element automatically imports and exports data to any HTTP system: mandatory HTTPS URL, POST or GET call, [&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":[362],"tags":[],"class_list":["post-31452","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chatbot-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts\/31452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/comments?post=31452"}],"version-history":[{"count":5,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts\/31452\/revisions"}],"predecessor-version":[{"id":31461,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts\/31452\/revisions\/31461"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/media\/31444"}],"wp:attachment":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/media?parent=31452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/categories?post=31452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/tags?post=31452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}