[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"doc-\u002Fit\u002Fdocs\u002Fcanaux\u002Fwebhook":3,"docs-nav-it":538},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"body":10,"_type":532,"_id":533,"_source":534,"_file":535,"_stem":536,"_extension":537},"\u002Fit\u002Fdocs\u002Fcanaux\u002Fwebhook","canaux",false,"","Webhook HTTP","Ricezione generica di eventi HTTP da qualsiasi sistema: firma HMAC, rotazione del segreto, formato del payload, risposta e chiamate GET.",{"type":11,"children":12,"toc":523},"root",[13,29,36,56,62,111,186,204,210,252,313,318,330,349,355,398,404,485,491],{"type":14,"tag":15,"props":16,"children":17},"element","p",{},[18,21,27],{"type":19,"value":20},"text","Il canale ",{"type":14,"tag":22,"props":23,"children":24},"strong",{},[25],{"type":19,"value":26},"webhook",{"type":19,"value":28}," è il punto di ingresso generico per collegare qualsiasi sistema in grado di effettuare un POST HTTP. È l'opzione da scegliere quando non esiste un canale dedicato per la tua sorgente.",{"type":14,"tag":30,"props":31,"children":33},"h2",{"id":32},"quando-usarlo",[34],{"type":19,"value":35},"Quando usarlo",{"type":14,"tag":37,"props":38,"children":39},"ul",{},[40,46,51],{"type":14,"tag":41,"props":42,"children":43},"li",{},[44],{"type":19,"value":45},"Collegare uno strumento interno (ERP, applicazione aziendale, gateway di pagamento).",{"type":14,"tag":41,"props":47,"children":48},{},[49],{"type":19,"value":50},"Ricevere eventi da una piattaforma di terze parti che offre webhook generici.",{"type":14,"tag":41,"props":52,"children":53},{},[54],{"type":19,"value":55},"Innescare una pipeline da un cron esterno o da una CI.",{"type":14,"tag":30,"props":57,"children":59},{"id":58},"configurazione",[60],{"type":19,"value":61},"Configurazione",{"type":14,"tag":63,"props":64,"children":65},"ol",{},[66,85,99],{"type":14,"tag":41,"props":67,"children":68},{},[69,71,76,78,83],{"type":19,"value":70},"Nell'editor del modello, configura il nodo ",{"type":14,"tag":22,"props":72,"children":73},{},[74],{"type":19,"value":75},"Start",{"type":19,"value":77}," con un ricevitore ",{"type":14,"tag":22,"props":79,"children":80},{},[81],{"type":19,"value":82},"Webhook in entrata",{"type":19,"value":84},".",{"type":14,"tag":41,"props":86,"children":87},{},[88,90,97],{"type":19,"value":89},"betool genera un URL pubblico (",{"type":14,"tag":91,"props":92,"children":94},"code",{"className":93},[],[95],{"type":19,"value":96},"https:\u002F\u002Fplatform.betool.ai\u002Fentries\u002Fwebhook\u002F\u003Ctoken>",{"type":19,"value":98},").",{"type":14,"tag":41,"props":100,"children":101},{},[102,104,109],{"type":19,"value":103},"(Consigliato) Definisci un ",{"type":14,"tag":22,"props":105,"children":106},{},[107],{"type":19,"value":108},"segreto HMAC",{"type":19,"value":110}," nella configurazione del ricevitore.",{"type":14,"tag":15,"props":112,"children":113},{},[114,116,122,124,130,132,138,140,146,148,154,156,162,163,169,171,177,179,185],{"type":19,"value":115},"Quando è configurato un segreto, il tuo sistema deve firmare il body grezzo di ogni richiesta — ",{"type":14,"tag":91,"props":117,"children":119},{"className":118},[],[120],{"type":19,"value":121},"HMAC-SHA256(secret, body)",{"type":19,"value":123},", in esadecimale — e passare la firma nell'header ",{"type":14,"tag":91,"props":125,"children":127},{"className":126},[],[128],{"type":19,"value":129},"X-Webhook-Signature",{"type":19,"value":131},", nella forma ",{"type":14,"tag":91,"props":133,"children":135},{"className":134},[],[136],{"type":19,"value":137},"sha256=\u003Chex>",{"type":19,"value":139}," o solo ",{"type":14,"tag":91,"props":141,"children":143},{"className":142},[],[144],{"type":19,"value":145},"\u003Chex>",{"type":19,"value":147},". Il nome dell'header e l'algoritmo (",{"type":14,"tag":91,"props":149,"children":151},{"className":150},[],[152],{"type":19,"value":153},"sha256",{"type":19,"value":155},", ",{"type":14,"tag":91,"props":157,"children":159},{"className":158},[],[160],{"type":19,"value":161},"sha384",{"type":19,"value":155},{"type":14,"tag":91,"props":164,"children":166},{"className":165},[],[167],{"type":19,"value":168},"sha512",{"type":19,"value":170},") sono configurabili, ad esempio per seguire la convenzione ",{"type":14,"tag":91,"props":172,"children":174},{"className":173},[],[175],{"type":19,"value":176},"X-Hub-Signature-256",{"type":19,"value":178}," di GitHub. Qualsiasi richiesta senza una firma valida viene quindi rifiutata (",{"type":14,"tag":91,"props":180,"children":182},{"className":181},[],[183],{"type":19,"value":184},"401",{"type":19,"value":98},{"type":14,"tag":187,"props":188,"children":190},"alert",{"type":189},"warning",[191],{"type":14,"tag":15,"props":192,"children":193},{},[194,196,202],{"type":19,"value":195},"Viene verificato solo questo formato: un HMAC esadecimale del body grezzo. Una firma con timestamp (",{"type":14,"tag":91,"props":197,"children":199},{"className":198},[],[200],{"type":19,"value":201},"t=…,v1=…",{"type":19,"value":203},") o codificata in base64 non verrà riconosciuta.",{"type":14,"tag":30,"props":205,"children":207},{"id":206},"formato-del-payload",[208],{"type":19,"value":209},"Formato del payload",{"type":14,"tag":15,"props":211,"children":212},{},[213,215,220,222,228,230,236,237,243,245,251],{"type":19,"value":214},"Invii ",{"type":14,"tag":22,"props":216,"children":217},{},[218],{"type":19,"value":219},"qualsiasi JSON",{"type":19,"value":221},". betool non vincola la struttura. Il payload viene esposto alla pipeline sotto ",{"type":14,"tag":91,"props":223,"children":225},{"className":224},[],[226],{"type":19,"value":227},"webhook.payload",{"type":19,"value":229}," (con le sue sotto-chiavi); anche gli header, il metodo e la query string sono disponibili sotto ",{"type":14,"tag":91,"props":231,"children":233},{"className":232},[],[234],{"type":19,"value":235},"webhook.headers",{"type":19,"value":155},{"type":14,"tag":91,"props":238,"children":240},{"className":239},[],[241],{"type":19,"value":242},"webhook.method",{"type":19,"value":244}," e ",{"type":14,"tag":91,"props":246,"children":248},{"className":247},[],[249],{"type":19,"value":250},"webhook.query",{"type":19,"value":84},{"type":14,"tag":15,"props":253,"children":254},{},[255,257,263,265,271,273,279,281,287,289,295,297,303,305,311],{"type":19,"value":256},"Il body viene letto in base al suo ",{"type":14,"tag":91,"props":258,"children":260},{"className":259},[],[261],{"type":19,"value":262},"Content-Type",{"type":19,"value":264},": JSON analizzato, modulo (",{"type":14,"tag":91,"props":266,"children":268},{"className":267},[],[269],{"type":19,"value":270},"application\u002Fx-www-form-urlencoded",{"type":19,"value":272},") come dizionario, XML e ",{"type":14,"tag":91,"props":274,"children":276},{"className":275},[],[277],{"type":19,"value":278},"text\u002F*",{"type":19,"value":280}," come testo grezzo, ",{"type":14,"tag":91,"props":282,"children":284},{"className":283},[],[285],{"type":19,"value":286},"multipart\u002Fform-data",{"type":19,"value":288}," come campi + file allegati (",{"type":14,"tag":91,"props":290,"children":292},{"className":291},[],[293],{"type":19,"value":294},"webhook.payload._files",{"type":19,"value":296},"), qualsiasi altro tipo (PDF, immagine, archivio…) salvato come file. Un body compresso in ",{"type":14,"tag":91,"props":298,"children":300},{"className":299},[],[301],{"type":19,"value":302},"gzip",{"type":19,"value":304}," viene decompresso. Dimensione massima: 50 MB (",{"type":14,"tag":91,"props":306,"children":308},{"className":307},[],[309],{"type":19,"value":310},"413",{"type":19,"value":312}," oltre).",{"type":14,"tag":15,"props":314,"children":315},{},[316],{"type":19,"value":317},"Esempio:",{"type":14,"tag":319,"props":320,"children":325},"pre",{"className":321,"code":323,"language":324,"meta":7},[322],"language-bash","curl -X POST https:\u002F\u002Fplatform.betool.ai\u002Fentries\u002Fwebhook\u002Fabc123 \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"X-Webhook-Signature: sha256=$SIGNATURE\" \\\n  -d '{\n    \"type\": \"order.created\",\n    \"order_id\": \"ord_42\",\n    \"amount_cents\": 9900,\n    \"customer_email\": \"client@exemple.com\"\n  }'\n","bash",[326],{"type":14,"tag":91,"props":327,"children":328},{"__ignoreMap":7},[329],{"type":19,"value":323},{"type":14,"tag":15,"props":331,"children":332},{},[333,335,341,342,348],{"type":19,"value":334},"La pipeline può quindi collegare un agent che legge direttamente ",{"type":14,"tag":91,"props":336,"children":338},{"className":337},[],[339],{"type":19,"value":340},"webhook.payload.customer_email",{"type":19,"value":244},{"type":14,"tag":91,"props":343,"children":345},{"className":344},[],[346],{"type":19,"value":347},"webhook.payload.amount_cents",{"type":19,"value":84},{"type":14,"tag":30,"props":350,"children":352},{"id":351},"risposta",[353],{"type":19,"value":354},"Risposta",{"type":14,"tag":15,"props":356,"children":357},{},[358,360,366,368,377,379,388,390,396],{"type":19,"value":359},"Due modalità di risposta (",{"type":14,"tag":91,"props":361,"children":363},{"className":362},[],[364],{"type":19,"value":365},"response_mode",{"type":19,"value":367},"): ",{"type":14,"tag":22,"props":369,"children":370},{},[371],{"type":14,"tag":91,"props":372,"children":374},{"className":373},[],[375],{"type":19,"value":376},"sync",{"type":19,"value":378}," (predefinita) blocca fino al risultato della pipeline e lo restituisce nella risposta; ",{"type":14,"tag":22,"props":380,"children":381},{},[382],{"type":14,"tag":91,"props":383,"children":385},{"className":384},[],[386],{"type":19,"value":387},"ack",{"type":19,"value":389}," restituisce immediatamente un ",{"type":14,"tag":91,"props":391,"children":393},{"className":392},[],[394],{"type":19,"value":395},"202 Accepted",{"type":19,"value":397}," dopo aver messo l'evento in una coda durevole (la pipeline viene eseguita in seguito, con nuovi tentativi) — da scegliere per i provider che vanno in timeout presto.",{"type":14,"tag":30,"props":399,"children":401},{"id":400},"chiamate-get-opzione",[402],{"type":19,"value":403},"Chiamate GET (opzione)",{"type":14,"tag":15,"props":405,"children":406},{},[407,409,415,417,423,425,431,433,439,441,446,448,454,456,461,463,468,470,476,478,483],{"type":19,"value":408},"Per impostazione predefinita è accettato solo ",{"type":14,"tag":91,"props":410,"children":412},{"className":411},[],[413],{"type":19,"value":414},"POST",{"type":19,"value":416},": un ",{"type":14,"tag":91,"props":418,"children":420},{"className":419},[],[421],{"type":19,"value":422},"GET",{"type":19,"value":424}," riceve ",{"type":14,"tag":91,"props":426,"children":428},{"className":427},[],[429],{"type":19,"value":430},"405",{"type":19,"value":432},". Per un partner che impone una consultazione in ",{"type":14,"tag":91,"props":434,"children":436},{"className":435},[],[437],{"type":19,"value":438},"GET ?action=…",{"type":19,"value":440},", spunta ",{"type":14,"tag":22,"props":442,"children":443},{},[444],{"type":19,"value":445},"Accetta anche GET",{"type":19,"value":447}," (",{"type":14,"tag":91,"props":449,"children":451},{"className":450},[],[452],{"type":19,"value":453},"allow_get",{"type":19,"value":455},"). La query string diventa allora ",{"type":14,"tag":91,"props":457,"children":459},{"className":458},[],[460],{"type":19,"value":227},{"type":19,"value":462},", nella stessa forma di un POST di un modulo: la pipeline non deve sapere quale metodo è stato usato. Un ",{"type":14,"tag":91,"props":464,"children":466},{"className":465},[],[467],{"type":19,"value":422},{"type":19,"value":469}," non porta body (rifiutato con ",{"type":14,"tag":91,"props":471,"children":473},{"className":472},[],[474],{"type":19,"value":475},"400",{"type":19,"value":477},") e non è compatibile con la firma HMAC (rifiutato con ",{"type":14,"tag":91,"props":479,"children":481},{"className":480},[],[482],{"type":19,"value":430},{"type":19,"value":484}," finché è impostato un segreto). Un identificativo passato nella query compare nei log di accesso: preferisci POST quando il partner lo consente.",{"type":14,"tag":30,"props":486,"children":488},{"id":487},"sicurezza",[489],{"type":19,"value":490},"Sicurezza",{"type":14,"tag":37,"props":492,"children":493},{},[494,499,518],{"type":14,"tag":41,"props":495,"children":496},{},[497],{"type":19,"value":498},"Firma le tue richieste (HMAC) non appena l'endpoint gestisce qualcosa di diverso da un test.",{"type":14,"tag":41,"props":500,"children":501},{},[502,504,509,511,516],{"type":19,"value":503},"Il segreto si può cambiare in qualsiasi momento nella configurazione del ricevitore (rotazione). Una volta salvato, non viene mai più mostrato: il campo indica ",{"type":14,"tag":22,"props":505,"children":506},{},[507],{"type":19,"value":508},"« •••••• salvato — digita per sostituire »",{"type":19,"value":510},", e ",{"type":14,"tag":22,"props":512,"children":513},{},[514],{"type":19,"value":515},"Rimuovi",{"type":19,"value":517}," lo cancella (la firma non viene più verificata).",{"type":14,"tag":41,"props":519,"children":520},{},[521],{"type":19,"value":522},"I payload sono memorizzati in chiaro nella cronologia delle esecuzioni — non inviare dati che devono essere cifrati solo in transito.",{"title":7,"searchDepth":524,"depth":524,"links":525},2,[526,527,528,529,530,531],{"id":32,"depth":524,"text":35},{"id":58,"depth":524,"text":61},{"id":206,"depth":524,"text":209},{"id":351,"depth":524,"text":354},{"id":400,"depth":524,"text":403},{"id":487,"depth":524,"text":490},"markdown","content:it:docs:2.canaux:5.webhook.md","content","it\u002Fdocs\u002F2.canaux\u002F5.webhook.md","it\u002Fdocs\u002F2.canaux\u002F5.webhook","md",[539],{"title":540,"_path":541,"children":542},"It","\u002Fit",[543],{"title":544,"_path":545,"children":546},"Docs","\u002Fit\u002Fdocs",[547,560,586,614,627,642,655,716],{"title":548,"_path":549,"children":550},"Per iniziare","\u002Fit\u002Fdocs\u002Fdemarrer",[551,554,557],{"title":552,"_path":553},"Benvenuto","\u002Fit\u002Fdocs\u002Fdemarrer\u002Fbienvenue",{"title":555,"_path":556},"Creare un account","\u002Fit\u002Fdocs\u002Fdemarrer\u002Fcreer-un-compte",{"title":558,"_path":559},"Collegare una chiave LLM","\u002Fit\u002Fdocs\u002Fdemarrer\u002Fbrancher-llm",{"title":561,"_path":562,"children":563},"Canali","\u002Fit\u002Fdocs\u002Fcanaux",[564,567,570,573,576,577,580,583],{"title":565,"_path":566},"Panoramica dei canali","\u002Fit\u002Fdocs\u002Fcanaux\u002Fvue-densemble",{"title":568,"_path":569},"Telefonia in tempo reale","\u002Fit\u002Fdocs\u002Fcanaux\u002Ftelephone",{"title":571,"_path":572},"Email","\u002Fit\u002Fdocs\u002Fcanaux\u002Femail",{"title":574,"_path":575},"Widget chat web","\u002Fit\u002Fdocs\u002Fcanaux\u002Fchat-widget",{"title":8,"_path":4},{"title":578,"_path":579},"Messaggistica (WhatsApp, Messenger, Telegram, Mattermost)","\u002Fit\u002Fdocs\u002Fcanaux\u002Fmessageries",{"title":581,"_path":582},"Meta Lead Ads","\u002Fit\u002Fdocs\u002Fcanaux\u002Ffacebook-leads",{"title":584,"_path":585},"Schedule (cron)","\u002Fit\u002Fdocs\u002Fcanaux\u002Fschedule",{"title":587,"_path":588,"children":589},"Pipeline","\u002Fit\u002Fdocs\u002Fpipelines",[590,593,596,599,602,605,608,611],{"title":591,"_path":592},"L'editor visuale","\u002Fit\u002Fdocs\u002Fpipelines\u002Fediteur-visuel",{"title":594,"_path":595},"Agenti IA","\u002Fit\u002Fdocs\u002Fpipelines\u002Fagents",{"title":597,"_path":598},"Operatori deterministici","\u002Fit\u002Fdocs\u002Fpipelines\u002Foperateurs",{"title":600,"_path":601},"Controllo di flusso","\u002Fit\u002Fdocs\u002Fpipelines\u002Fcontrole-flux",{"title":603,"_path":604},"Code Step","\u002Fit\u002Fdocs\u002Fpipelines\u002Fcode-step",{"title":606,"_path":607},"Sotto-pipeline","\u002Fit\u002Fdocs\u002Fpipelines\u002Fsous-pipelines",{"title":609,"_path":610},"Azioni no-code","\u002Fit\u002Fdocs\u002Fpipelines\u002Factions-no-code",{"title":612,"_path":613},"Base di conoscenza","\u002Fit\u002Fdocs\u002Fpipelines\u002Fbase-de-connaissances",{"title":615,"_path":616,"children":617},"Supervisione","\u002Fit\u002Fdocs\u002Fsupervision",[618,621,624],{"title":619,"_path":620},"Cronologia delle esecuzioni","\u002Fit\u002Fdocs\u002Fsupervision\u002Fexecutions",{"title":622,"_path":623},"Crediti e metering","\u002Fit\u002Fdocs\u002Fsupervision\u002Fcredits-metering",{"title":625,"_path":626},"Benchmark","\u002Fit\u002Fdocs\u002Fsupervision\u002Fbenchmarks",{"title":490,"_path":628,"children":629},"\u002Fit\u002Fdocs\u002Fsecurite",[630,633,636,639],{"title":631,"_path":632},"Principi di sicurezza","\u002Fit\u002Fdocs\u002Fsecurite\u002Fprincipes",{"title":634,"_path":635},"Multi-tenancy rigorosa","\u002Fit\u002Fdocs\u002Fsecurite\u002Fmulti-tenant",{"title":637,"_path":638},"Audit RGPD e registro degli accessi","\u002Fit\u002Fdocs\u002Fsecurite\u002Faudit-rgpd",{"title":640,"_path":641},"Deployment sovrano","\u002Fit\u002Fdocs\u002Fsecurite\u002Fdeploiement-souverain",{"title":643,"_path":644,"children":645},"Sviluppatori","\u002Fit\u002Fdocs\u002Fdeveloppeurs",[646,649,652],{"title":647,"_path":648},"API Admin","\u002Fit\u002Fdocs\u002Fdeveloppeurs\u002Fapi-admin",{"title":650,"_path":651},"Webhook in uscita","\u002Fit\u002Fdocs\u002Fdeveloppeurs\u002Fwebhooks-sortants",{"title":653,"_path":654},"Pilotare betool da Claude (MCP)","\u002Fit\u002Fdocs\u002Fdeveloppeurs\u002Fmcp",{"title":656,"_path":657,"children":658},"Integrazioni","\u002Fit\u002Fdocs\u002Fintegrations",[659,662,665,668,671,674,677,680,683,686,689,692,695,698,701,704,707,710,713],{"title":660,"_path":661},"Panoramica delle integrazioni","\u002Fit\u002Fdocs\u002Fintegrations\u002Fvue-densemble",{"title":663,"_path":664},"Stripe","\u002Fit\u002Fdocs\u002Fintegrations\u002Fstripe",{"title":666,"_path":667},"GitHub","\u002Fit\u002Fdocs\u002Fintegrations\u002Fgithub",{"title":669,"_path":670},"Google","\u002Fit\u002Fdocs\u002Fintegrations\u002Fgoogle",{"title":672,"_path":673},"LinkedIn Ads","\u002Fit\u002Fdocs\u002Fintegrations\u002Flinkedin-ads",{"title":675,"_path":676},"Kavkom","\u002Fit\u002Fdocs\u002Fintegrations\u002Fkavkom",{"title":678,"_path":679},"Jira","\u002Fit\u002Fdocs\u002Fintegrations\u002Fjira",{"title":681,"_path":682},"Slack","\u002Fit\u002Fdocs\u002Fintegrations\u002Fslack",{"title":684,"_path":685},"SMS","\u002Fit\u002Fdocs\u002Fintegrations\u002Fsms",{"title":687,"_path":688},"Enable Banking (open banking)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fenable-banking",{"title":690,"_path":691},"CRM, marketing e produttività","\u002Fit\u002Fdocs\u002Fintegrations\u002Fcrm-marketing",{"title":693,"_path":694},"HeyGen (video)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fheygen",{"title":696,"_path":697},"La Poste","\u002Fit\u002Fdocs\u002Fintegrations\u002Fla-poste",{"title":699,"_path":700},"CRM verticali (beTool Application, Qhare)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fcrm-metier",{"title":702,"_path":703},"Mitti (ispezioni sul campo)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fmitti",{"title":705,"_path":706},"Meta (Messenger, Pagine, Meta Ads)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fmeta",{"title":708,"_path":709},"Onoff Business (Beta)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fonoff",{"title":711,"_path":712},"Smart Life \u002F Tuya (oggetti connessi)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fsmart-life",{"title":714,"_path":715},"Prodotti beTool (Desktop, Kiosk, Terminal)","\u002Fit\u002Fdocs\u002Fintegrations\u002Fproduits-betool",{"title":717,"_path":718,"children":719},"Casi d'uso","\u002Fit\u002Fdocs\u002Fcas-usage",[720,723,726,729,732,735],{"title":721,"_path":722},"Agenti di business tipo","\u002Fit\u002Fdocs\u002Fcas-usage\u002Fvue-densemble",{"title":724,"_path":725},"CFO IA","\u002Fit\u002Fdocs\u002Fcas-usage\u002Fcfo-ia",{"title":727,"_path":728},"COO IA","\u002Fit\u002Fdocs\u002Fcas-usage\u002Fcoo-ia",{"title":730,"_path":731},"CTO IA","\u002Fit\u002Fdocs\u002Fcas-usage\u002Fcto-ia",{"title":733,"_path":734},"Product Manager IA","\u002Fit\u002Fdocs\u002Fcas-usage\u002Fproduct-manager-ia",{"title":736,"_path":737},"Assistente personale","\u002Fit\u002Fdocs\u002Fcas-usage\u002Fassistant-personnel"]