{"id":76,"date":"2024-10-16T18:07:54","date_gmt":"2024-10-16T16:07:54","guid":{"rendered":"https:\/\/chiedimi-assistente.cloud\/web\/?page_id=76"},"modified":"2025-03-25T17:10:04","modified_gmt":"2025-03-25T15:10:04","slug":"supporto-tecnico","status":"publish","type":"page","link":"https:\/\/chiedimi-assistente.cloud\/web\/supporto-tecnico\/","title":{"rendered":"Supporto tecnico"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Lista degli argomenti:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#integrazione-client-generico\">Integrazione del &#8220;Client Generico&#8221; con il tuo programma PHP<\/a><\/li>\n\n\n\n<li><a href=\"#messaggi-errore-piu-comuni\">Messaggi\/Codici d&#8217;errore pi\u00f9 comuni<\/a><\/li>\n\n\n\n<li><a href=\"#documentazione-modulo-client-generico\">Documentazione modulo &#8220;Client Generico&#8221;<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"integrazione-client-generico\">Integrazione del &#8220;Client Generico&#8221; con il tuo programma PHP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019integrazione del Client Generico in una pagina PHP \u00e8 estremamente semplice. Nell\u2019esempio seguente ho realizzato una pagina PHP di base, includendo tutti i file necessari per garantire il corretto funzionamento del sistema. L&#8217;unico requisito \u00e8 la presenza di una versione aggiornata di <strong>jQuery<\/strong>. \u00c8 fondamentale prestare attenzione ai seguenti punti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>verificare il corretto inserimento dei tre <strong>require_once()<\/strong> o <strong>include()<\/strong> all&#8217;inizio del codice PHP (vedi righe 4..6) <\/li>\n\n\n\n<li>verificare la personalizzazione di <em>inc_chiedimi_config.php<\/em> e <em>inc_chiedimi_rulesets.php<\/em> (vedi anche <a href=\"#modifica-files-configurazione\">questa sezione<\/a>)<\/li>\n\n\n\n<li>impostare la costante <strong>USE_DOM_PURIFY<\/strong> per indicare al codice se adottare o meno (true\/false) lo script JavaScript dedicato alla purificazione del testo restituito dalle API (vedi riga 8, qualora si decidesse di utilizzarlo, il modulo <em>purify.min.js<\/em> deve essere caricato come visibile alla riga 23) <\/li>\n\n\n\n<li>inserire tra i tag <strong>&lt;style&gt;&lt;\/style&gt;<\/strong> l&#8217;include CSS (vedi riga 26)<\/li>\n\n\n\n<li>inserire tra i tag <strong>&lt;script&gt;&lt;\/script&gt;<\/strong> il modulo <em>inc_chiedimi_function.js<\/em> (vedi riga 30) che contiene le funzioni necessarie per l&#8217;invio e la ricezione del messaggio, la formattazione dei dati ricevuti e la gestione dello scroll della ChatBox<\/li>\n\n\n\n<li>inserire prima del tag <strong>&lt;\/script&gt;<\/strong>, se non gi\u00e0 presente, un blocco <strong>$(document).ready(function() {})<\/strong> all&#8217;interno del quale includere il file <em>inc_chiedimi_ready.js<\/em> che si occupa della inizializzazione e gestione degli eventi di input dell&#8217;Utente (verdi riga 32)<\/li>\n\n\n\n<li>inserire prima del tag <strong>&lt;\/body&gt;<\/strong> il modulo <em>inc_chiedimi_html.php<\/em> che si incarica di disegnare la ChatBox<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(253, 253, 237, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\/\/ Include i moduli per il BOT CHIEDIMI\n\/\/-------------------------------------\nrequire_once('inc_chiedimi_config.php');\nrequire_once('inc_chiedimi_rulesets.php');\nrequire_once('inc_chiedimi.php');\n\ndefine('USE_DOM_PURIFY', true);\n\n?&gt;\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;it&quot;&gt;\n\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;title&gt;Client Generico&lt;\/title&gt;\n\n    &lt;!-- jQuery 3.7.1 --&gt;\n    &lt;script src=&quot;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.7.1\/jquery.min.js&quot; integrity=&quot;sha512-v2CJ7UaYy4JwqLDIrZUI\/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2\/4hpQINQ\/g==&quot; crossorigin=&quot;anonymous&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;\/script&gt;\n    \n    &lt;!-- DOMPurify 3.1.6 --&gt;\n    &lt;script src=&quot;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/dompurify\/3.1.6\/purify.min.js&quot; integrity=&quot;sha512-jB0TkTBeQC9ZSkBqDhdmfTv1qdfbWpGE72yJ\/01Srq6hEzZIz2xkz1e57p9ai7IeHMwEG7HpzG6NdptChif5Pg==&quot; crossorigin=&quot;anonymous&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;\/script&gt;\n\n    &lt;style&gt;\n      &lt;?php include('inc_chiedimi.css'); ?&gt;\n    &lt;\/style&gt;\n    \n    &lt;script&gt;\n      &lt;?php include('inc_chiedimi_function.js'); ?&gt;\n      $(document).ready(function() {\n\t\t\t      &lt;?php include('inc_chiedimi_ready.js'); ?&gt;\n      });\n    &lt;\/script&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n    &lt;header&gt;&lt;h1&gt;Esempio di CLIENT GENERICO&lt;\/h1&gt;&lt;\/header&gt;\n    &lt;p&gt;\n        Questo Client Generico ha come unica dipendenza jQuery. Le classi CSS di Bootstrap necessarie per la visualizzazione della ChatBox sono state replicate ed inserite nel file CSS.\n    &lt;\/p&gt;\n\t&lt;hr&gt;\n\t\t&lt;?php for ($x=1; $x &lt; 2000; $x++) {echo 'bla ';} \/\/ Semplice testo per riempire la pagina ?&gt;\n\t\t&lt;?php include('inc_chiedimi_html.php'); ?&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">&lt;?<\/span><span style=\"color: #F8F8F2\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Include i moduli per il BOT CHIEDIMI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/-------------------------------------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #50FA7B\">require_once<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">inc_chiedimi_config.php<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #50FA7B\">require_once<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">inc_chiedimi_rulesets.php<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #50FA7B\">require_once<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">inc_chiedimi.php<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #50FA7B\">define<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">USE_DOM_PURIFY<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">?&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">&lt;!<\/span><span style=\"color: #F8F8F2\">DOCTYPE html<\/span><span style=\"color: #FF79C6\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #FF79C6\">html<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">lang<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">it<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #FF79C6\">head<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">meta<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">charset<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">UTF-8<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">meta<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">name<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">viewport<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">content<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">width=device-width, initial-scale=1.0<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">title<\/span><span style=\"color: #F8F8F2\">&gt;Client Generico&lt;\/<\/span><span style=\"color: #FF79C6\">title<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;!-- jQuery 3.7.1 --&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">script<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">src<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.7.1\/jquery.min.js<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">integrity<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">sha512-v2CJ7UaYy4JwqLDIrZUI\/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2\/4hpQINQ\/g==<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">crossorigin<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">anonymous<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">referrerpolicy<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">no-referrer<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">&gt;&lt;\/<\/span><span style=\"color: #FF79C6\">script<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;!-- DOMPurify 3.1.6 --&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">script<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">src<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/dompurify\/3.1.6\/purify.min.js<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">integrity<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">sha512-jB0TkTBeQC9ZSkBqDhdmfTv1qdfbWpGE72yJ\/01Srq6hEzZIz2xkz1e57p9ai7IeHMwEG7HpzG6NdptChif5Pg==<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">crossorigin<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">anonymous<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B; font-style: italic\">referrerpolicy<\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F1FA8C\">no-referrer<\/span><span style=\"color: #E9F284\">&quot;<\/span><span style=\"color: #F8F8F2\">&gt;&lt;\/<\/span><span style=\"color: #FF79C6\">script<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">style<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #F8F8F2\">      &lt;?php include(&#39;inc_chiedimi.css&#39;); ?&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;\/<\/span><span style=\"color: #FF79C6\">style<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">script<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #F8F8F2\">      &lt;?php include(&#39;inc_chiedimi_function.js&#39;); ?&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">      $(document).ready(function() <\/span><span style=\"color: #FF79C6\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #F8F8F2\">\t\t\t      <\/span><span style=\"color: #FF79C6\">&lt;?<\/span><span style=\"color: #F8F8F2\">php <\/span><span style=\"color: #50FA7B\">include<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">inc_chiedimi_ready.js<\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">); <\/span><span style=\"color: #FF79C6\">?&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">      });<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">&lt;\/<\/span><span style=\"color: #F8F8F2\">script<\/span><span style=\"color: #FF79C6\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">&lt;\/<\/span><span style=\"color: #F8F8F2\">head<\/span><span style=\"color: #FF79C6\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #FF79C6\">body<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">header<\/span><span style=\"color: #F8F8F2\">&gt;&lt;<\/span><span style=\"color: #FF79C6\">h1<\/span><span style=\"color: #F8F8F2\">&gt;Esempio di CLIENT GENERICO&lt;\/<\/span><span style=\"color: #FF79C6\">h1<\/span><span style=\"color: #F8F8F2\">&gt;&lt;\/<\/span><span style=\"color: #FF79C6\">header<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;<\/span><span style=\"color: #FF79C6\">p<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        Questo Client Generico ha come unica dipendenza jQuery. Le classi CSS di Bootstrap necessarie per la visualizzazione della ChatBox sono state replicate ed inserite nel file CSS.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;\/<\/span><span style=\"color: #FF79C6\">p<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t&lt;<\/span><span style=\"color: #FF79C6\">hr<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">\t\t&lt;?php for ($x=1; $x &lt; 2000; $x++) <\/span><span style=\"color: #FF79C6\">{<\/span><span style=\"color: #F8F8F2\">echo <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F1FA8C\">bla <\/span><span style=\"color: #E9F284\">&#39;<\/span><span style=\"color: #F8F8F2\">;<\/span><span style=\"color: #FF79C6\">}<\/span><span style=\"color: #F8F8F2\"> \/\/ Semplice testo per riempire la pagina ?&gt;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #F8F8F2\">\t\t&lt;?php include(&#39;inc_chiedimi_html.php&#39;); ?&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    &lt;\/<\/span><span style=\"color: #FF79C6\">body<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">&lt;\/<\/span><span style=\"color: #FF79C6\">html<\/span><span style=\"color: #F8F8F2\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E&#8217; presente <a href=\"#documentazione-modulo-client-generico\">pi\u00f9 avanti<\/a> una descrizione leggermente pi\u00f9 approfondita del &#8220;Client Generico&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"messaggi-errore-piu-comuni\">Messaggi\/Codici d&#8217;errore pi\u00f9 comuni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Questi messaggi d&#8217;errore possono essere stati generati dall&#8217;API o dal modulo PHP <em>inc_chiedimi.php<\/em> raggruppati per codice di errore.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>400<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;Invalid configuration info&#8221;<\/strong> =&gt; i dati di sessione passati via COOKIE sono stati alterati<\/li>\n\n\n\n<li><strong>&#8220;Non posso risponderti perch\u00e9 [&#8230;]&#8221;<\/strong> =&gt; sessione scaduta<\/li>\n\n\n\n<li><strong>&#8220;Invalid JSON format&#8221;<\/strong> =&gt; il formato del file JSON non \u00e8 corretto<\/li>\n\n\n\n<li><strong>&#8220;Errore cURL: [messaggio]&#8221;<\/strong> =&gt; problemi con l&#8217;esecuzione della chiamata API<\/li>\n\n\n\n<li><strong>&#8220;HTTP error [codice]&#8221;<\/strong> =&gt; errore durante l&#8217;invio della richiesta o ricezione della risposta<\/li>\n\n\n\n<li><strong>&#8220;Errore nella decodifica della risposta JSON&#8221;<\/strong> =&gt; il file JSON contenente la risposta ha un formato non valido<\/li>\n\n\n\n<li><strong>&#8220;ID di sessione non valido&#8221;<\/strong> =&gt; problemi con il recupero della sessione (probabile corruzione puntatore in COOKIE)<\/li>\n\n\n\n<li><strong>&#8220;Sessione non valida o scaduta&#8221;<\/strong> =&gt; timeout di sessione<\/li>\n\n\n\n<li><strong>&#8220;Hash non valido&#8221;<\/strong> =&gt; il ruleset indicato non sembra essere valido<\/li>\n\n\n\n<li><strong>&#8220;Dati configurazione assenti&#8221;<\/strong> =&gt; problemi con risoluzione id del Cliente<\/li>\n\n\n\n<li><strong>&#8220;Errore interno del server&#8221;<\/strong> =&gt; generico, pu\u00f2 essere generato da varie cause, <span style=\"text-decoration: underline;\">contattare il supporto tecnico<\/span><\/li>\n\n\n\n<li><strong>&#8220;Errore durante la connessione al database&#8221;<\/strong> =&gt; problemi con database, <span style=\"text-decoration: underline;\">contattare il supporto tecnico<\/span><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>403<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;Accesso non autorizzato per l&#8217;indirizzo IP&#8221;<\/strong> =&gt; l&#8217;indirizzo IP dal quale \u00e8 stata chiamata l&#8217;API non \u00e8 autorizzato ad operare con la <em>auth key<\/em> utilizzata<\/li>\n\n\n\n<li><strong>&#8220;Chiave API non valida&#8221;<\/strong> =&gt; la <em>auth key<\/em> utilizzata non esiste (errata o revocata)<\/li>\n\n\n\n<li><strong>&#8220;Chiamata API non valida&#8221;<\/strong> =&gt; formato della chiamata API non valido<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>404<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;Richiesta GET non valida[&#8230;]&#8221;<\/strong> =&gt; problemi di &#8220;config&#8221; (\/3 o \/4) o di &#8220;ruleset&#8221; (\/1 o \/2)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>405<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;Metodo non supportato&#8221;<\/strong> =&gt; Chiamata API con un metodo diverso da GET o POST<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>427<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;E&#8217; stato raggiunto il limite di richieste per unit\u00e0 di tempo per questa sessione[&#8230;]&#8221;<\/strong> =&gt; troppe richieste dallo stesso client<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>428<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;E&#8217; stato raggiunto il limite di richieste per unit\u00e0 di tempo. Prova[&#8230;]&#8221; <\/strong>=&gt; troppe richieste in assoluto<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>429<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;E&#8217; stato raggiunto il limite di richieste per indirizzo IP&#8221;<\/strong> =&gt; troppe richieste dallo stesso IP (anche se da client diversi)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>500<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;Parsing dell&#8217;URI non riuscito&#8221;<\/strong> =&gt; chiamata API formattata non correttamente<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"documentazione-modulo-client-generico\">Documentazione modulo &#8220;Client Generico&#8221;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nel caso in cui i due moduli ChatBox disponibili non rispondessero alle esigenze specifiche della tua realt\u00e0, di seguito trovi la documentazione completa del \u201cClient Generico\u201d, suddivisa modulo per modulo. In questo modo potrai procedere autonomamente allo sviluppo del software necessario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Panoramica<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Il modulo client \u00e8 progettato per fornire un\u2019interfaccia di chat che consente agli utenti di inviare messaggi a un endpoint API (gestito in <em>apirequest.php<\/em>) e ricevere risposte formattate. L\u2019interfaccia, realizzata in <em>client.php<\/em>, integra risorse di JavaScript e CSS per gestire la comunicazione asincrona, il parsing del contenuto e la visualizzazione dinamica dei messaggi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Struttura dei File<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><strong>client.php<\/strong><\/em><br>Punto di ingresso principale che include e richiama tutti gli script e gli stili necessari.<\/li>\n\n\n\n<li><em><strong>apirequest.php<\/strong><\/em><br>Endpoint che riceve le richieste POST in formato JSON contenenti il messaggio inviato dall\u2019utente, elabora la richiesta e restituisce una risposta in formato JSON.<\/li>\n\n\n\n<li><em><strong>inc_chiedimi_function.js<\/strong><\/em><br>Contiene le funzioni fondamentali per:\n<ul class=\"wp-block-list\">\n<li>Inviare il messaggio all\u2019API tramite una chiamata AJAX.<\/li>\n\n\n\n<li>Gestire la risposta ricevuta, inclusa la purificazione e il parsing del testo Markdown in HTML.<br>(Vedi funzione sendMessageToAPI e parseMarkdown)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em><strong>inc_chiedimi_ready.js<\/strong><\/em><br>Gestisce gli eventi di input dell\u2019utente. In particolare:\n<ul class=\"wp-block-list\">\n<li>Ascolta l\u2019evento keypress sul campo di input e il click sul pulsante di invio.<\/li>\n\n\n\n<li>Invia il messaggio dell\u2019utente e lo visualizza nel container della chat.<br>(Vedi gestione degli eventi)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em><strong>inc_chiedimi.css<\/strong><\/em><br>Definisce lo stile dell\u2019interfaccia, compresi il layout della chat, la formattazione dei messaggi (utente, assistente, sistema) e l\u2019aspetto della finestra di dialogo.<br>(Per dettagli sugli stili, vedi il file CSS)<\/li>\n\n\n\n<li>Altri file (es. <em><strong>inc_chiedimi_config.php<\/strong><\/em><strong>,<\/strong><em><strong> inc_chiedimi_html.php<\/strong>,<strong> inc_chiedimi_rulesets.php<\/strong>,<strong> inc_chiedimi.php<\/strong><\/em>)<br>Forniscono configurazioni e funzionalit\u00e0 aggiuntive che integrano il comportamento complessivo del modulo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Flusso di Esecuzione<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Inserimento del Messaggio<\/strong><br>L\u2019utente digita un messaggio nel campo di input (identificato da #msgBox) e preme il tasto Enter oppure clicca sul pulsante di invio (#msgBtn).<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gestione dell\u2019Evento<\/strong><\/li>\n\n\n\n<li>In inc_chiedimi_ready.js viene catturato l\u2019evento:\n<ul class=\"wp-block-list\">\n<li>Il gestore dell\u2019evento keypress intercetta il tasto Enter e attiva il click del pulsante.<\/li>\n\n\n\n<li>L\u2019evento click invoca la funzione che preleva il testo, lo visualizza nel container della chat (tramite appendMessage) e lo invia al server.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Invio della Richiesta all\u2019API<\/strong><br>La funzione sendMessageToAPI (definita in inc_chiedimi_function.js) esegue una chiamata AJAX:\n<ul class=\"wp-block-list\">\n<li>Il messaggio viene incapsulato in un oggetto JSON e inviato in POST all\u2019endpoint apirequest.php.<\/li>\n\n\n\n<li>Viene specificato il contentType come application\/json per garantire la corretta interpretazione della richiesta.<br>(Vedi funzione sendMessageToAPI)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Elaborazione della Risposta<\/strong><br>Al ricevimento della risposta dal server:\n<ul class=\"wp-block-list\">\n<li>Il codice controlla la presenza di un array <em>choices[]<\/em> nella risposta JSON.<\/li>\n\n\n\n<li>Se presente, estrae il contenuto del messaggio dalla prima scelta (<em>data.choices[0].message.content<\/em>), lo purifica (utilizzando DOMPurify se configurato ed abilitato) e lo converte in HTML grazie alla funzione <em>parseMarkdown<\/em>.<\/li>\n\n\n\n<li>Se la risposta \u00e8 troncata (finish_reason uguale a &#8220;length&#8221;), viene mostrato un messaggio di avviso che suggerisce all\u2019utente di scrivere &#8220;continua&#8221; per ricevere il resto della risposta.<\/li>\n\n\n\n<li>Il messaggio elaborato viene quindi visualizzato nel container della chat mediante <em>appendMessage<\/em>.<br>(Vedi funzione sendMessageToAPI)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Visualizzazione del Messaggio<\/strong><br>La funzione appendMessage aggiunge il messaggio al container #dialogue:\n<ul class=\"wp-block-list\">\n<li>I messaggi dell\u2019utente vengono visualizzati immediatamente.<\/li>\n\n\n\n<li>I messaggi dell\u2019assistente sono animati con un effetto &#8220;word-by-word&#8221;, che incrementa progressivamente la visibilit\u00e0 del testo per migliorare l\u2019esperienza utente.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gestione degli Errori<\/strong><br>Se si verifica un errore durante l\u2019invio o la ricezione della risposta:\n<ul class=\"wp-block-list\">\n<li>Vengono catturati errori AJAX e errori di struttura della risposta.<\/li>\n\n\n\n<li>Un messaggio di errore viene visualizzato all\u2019interno del container, informando l\u2019utente del problema.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Funzioni Chiave e Loro Responsabilit\u00e0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">4.1. <strong>sendMessageToAPI(message)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scopo: Invia una richiesta POST all\u2019API (<em>apirequest.php<\/em>) con il messaggio dell\u2019utente.<\/li>\n\n\n\n<li>Dettagli:\n<ul class=\"wp-block-list\">\n<li>Converte il messaggio in formato JSON.<\/li>\n\n\n\n<li>Gestisce la risposta: in caso di successo, estrae il contenuto e invoca il parsing Markdown; in caso di errore, visualizza un messaggio di errore.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Note: Gestisce anche il logging (es. conteggio dei token) e il controllo su eventuali risposte troncate.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">4.2. <strong>parseMarkdown(markdown)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scopo: Converte il testo in formato Markdown in HTML.<\/li>\n\n\n\n<li>Dettagli:\n<ul class=\"wp-block-list\">\n<li>Purifica il testo per prevenire iniezioni di codice.<\/li>\n\n\n\n<li>Gestisce diversi elementi Markdown (code blocks, codice inline, titoli, immagini, link, grassetto, corsivo, liste e citazioni).<\/li>\n\n\n\n<li>Limita la nidificazione delle liste a due livelli.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Note: Fondamentale per presentare le risposte in un formato leggibile e ben formattato.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">4.3. <strong>appendMessage(sender, text, className, isHTML)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scopo: Aggiunge un nuovo messaggio al container della chat, applicando stili e animazioni in base al tipo di mittente.<\/li>\n\n\n\n<li>Dettagli:\n<ul class=\"wp-block-list\">\n<li>Differenzia tra messaggi dell\u2019utente, dell\u2019assistente e di sistema.<\/li>\n\n\n\n<li>I messaggi dell\u2019assistente vengono visualizzati progressivamente con un effetto &#8220;word-by-word&#8221;.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Note: garantisce che l\u2019area di dialogo scorra automaticamente verso i messaggi pi\u00f9 recenti.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">4.4. <strong>scrollToBottom()<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scopo: Assicura che il container della chat sia sempre scorrevole fino al messaggio pi\u00f9 recente.<\/li>\n\n\n\n<li>Dettagli: Richiamata durante l\u2019aggiunta di nuovi messaggi per migliorare l\u2019usabilit\u00e0.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. Sicurezza e Purificazione<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Purificazione dell\u2019Input\/Output:\n<ul class=\"wp-block-list\">\n<li>Conversione dei caratteri speciali HTML in entit\u00e0 per evitare iniezioni di codice.<\/li>\n\n\n\n<li>Uso di DOMPurify (se abilitato) per purificare l\u2019output HTML prima della visualizzazione.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Parsing Markdown:\n<ul class=\"wp-block-list\">\n<li>Pulizia approfondita del testo per neutralizzare eventuali tag HTML pericolosi.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"modifica-files-configurazione\">6. Modifica files di configurazione<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I moduli <em>inc_chiedimi_config.php<\/em> e <em>inc_chiedimi_rulesets.php<\/em> contengono le informazioni necessarie per autenticare la chiamata API ed accedere alla giusta KB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>inc_chiedimi_config.php<\/em> contiene dati di configurazione e necessita dei seguenti parametri tutti obbligatori:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CHIEDIMI_AUTH_KEY<\/strong> =&gt; la Auth Key generata da &#8220;<strong>Gestione chiavi di autorizzazione<\/strong>&#8221; del <strong>Pannello di controllo<\/strong><\/li>\n\n\n\n<li><strong>CHIEDIMI_PANEL_TITLE<\/strong> =&gt; Il titolo della finestra della ChatBox<\/li>\n\n\n\n<li><strong>CHIEDIMI_SALT_KEY<\/strong> =&gt; numero causale a 128 bit rappresentato come stringa esadecimale di 32 caratteri, utilizzata per crittografare dati esposti<\/li>\n\n\n\n<li><strong>CHIEDIMI_SALT_KEY_CHECKSUM<\/strong> =&gt; numero causale a 128 bit rappresentato come stringa esadecimale di 32 caratteri (differente dal precedente), utilizzata per crittografare dati esposti<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\/* \n   INC_CHIEDIMI_CONFIG.PHP\n   -----------------------\n *\/\ndefine('CHIEDIMI_AUTH_KEY',          '[auth_key]');\ndefine('CHIEDIMI_PANEL_TITLE',       'Chiedimi - Assistente'); \/\/ Titolo della finestra\ndefine('CHIEDIMI_SALT_KEY',          '[32_bytes_salt_key]');   \/\/ 128 bit\/16 coppie di caratteri esadecimali\ndefine('CHIEDIMI_SALT_KEY_CHECKSUM', '[32_bytes_salt_key]');   \/\/ 128 bit\/16 coppie di caratteri esadecimali\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">&lt;?<\/span><span style=\"color: #F6F6F4\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">\/* <\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">   INC_CHIEDIMI_CONFIG.PHP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">   -----------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_AUTH_KEY<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,          <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[auth_key]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_PANEL_TITLE<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,       <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Chiedimi - Assistente<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">); <\/span><span style=\"color: #7B7F8B\">\/\/ Titolo della finestra<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_SALT_KEY<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,          <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[32_bytes_salt_key]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);   <\/span><span style=\"color: #7B7F8B\">\/\/ 128 bit\/16 coppie di caratteri esadecimali<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_SALT_KEY_CHECKSUM<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[32_bytes_salt_key]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);   <\/span><span style=\"color: #7B7F8B\">\/\/ 128 bit\/16 coppie di caratteri esadecimali<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A puro titolo di esempio ecco come dovrebbe apparire il modulo una volta configurato:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\/* \n   INC_CHIEDIMI_CONFIG.PHP\n   -----------------------\n *\/\ndefine('CHIEDIMI_AUTH_KEY',          'ca997e87dcbfe40e98f4a23cba5aa67fec099fad94e56bc2a3a5b1dfff09dba3');\ndefine('CHIEDIMI_PANEL_TITLE',       'Chiedimi - Assistente'); \/\/ Titolo della finestra\ndefine('CHIEDIMI_SALT_KEY',          '0CD92CA6A6B788764A323B9EFAFE4FEA');\ndefine('CHIEDIMI_SALT_KEY_CHECKSUM', '9BC4E2A6789BCADE9472D3D57BF90900');\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">&lt;?<\/span><span style=\"color: #F6F6F4\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">\/* <\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">   INC_CHIEDIMI_CONFIG.PHP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">   -----------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_AUTH_KEY<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,          <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">ca997e87dcbfe40e98f4a23cba5aa67fec099fad94e56bc2a3a5b1dfff09dba3<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_PANEL_TITLE<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,       <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">Chiedimi - Assistente<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">); <\/span><span style=\"color: #7B7F8B\">\/\/ Titolo della finestra<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_SALT_KEY<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,          <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">0CD92CA6A6B788764A323B9EFAFE4FEA<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #62E884\">define<\/span><span style=\"color: #F6F6F4\">(<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">CHIEDIMI_SALT_KEY_CHECKSUM<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">, <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">9BC4E2A6789BCADE9472D3D57BF90900<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><em>inc_chiedimi_rulesets.php<\/em> contiene l&#8217;elenco dei rulesets che dovranno essere utilizzati per ogni pagina, rappresentati come array associativo [nome modulo] =&gt; [ID ruleset]. Gli ID dei <strong>ruleset<\/strong> si ottengono sempre dal <strong>Pannello di Controllo<\/strong>, dopo aver selezionato il <strong>ruleset<\/strong> richiesto, facendo click sull&#8217;icona <strong>Informazioni<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"&lt;?php\n\/*\n   INC_CHIEDIMI_RULESETS.PHP\n   -------------------------\n*\/\n$rule_sets = array(\n                    '[nomemodulo0.php]' =&gt; '[ruleset_0]',\n                    '[nomemodulo1.php]' =&gt; '[ruleset_1]',\n                    '[nomemodulo2.php]' =&gt; '[ruleset_2]',\n                  );\" style=\"color:#f6f6f4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula-soft\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F286C4\">&lt;?<\/span><span style=\"color: #F6F6F4\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">\/*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">   INC_CHIEDIMI_RULESETS.PHP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">   -------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7B7F8B\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">$rule_sets <\/span><span style=\"color: #F286C4\">=<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #62E884\">array<\/span><span style=\"color: #F6F6F4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">                    <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[nomemodulo0.php]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=&gt;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[ruleset_0]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">                    <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[nomemodulo1.php]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=&gt;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[ruleset_1]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">                    <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[nomemodulo2.php]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #F286C4\">=&gt;<\/span><span style=\"color: #F6F6F4\"> <\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #E7EE98\">[ruleset_2]<\/span><span style=\"color: #DEE492\">&#39;<\/span><span style=\"color: #F6F6F4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F6F6F4\">                  );<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tutti i moduli che visualizzeranno una ChatBox devono essere descritti in questo array associativo e devono essere collegati ad un <strong>ruleset<\/strong>. Uno stesso <strong>ruleset<\/strong> pu\u00f2 essere associato a pi\u00f9 moduli, se necessario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. Considerazioni per l\u2019Implementazione in Altri Linguaggi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Per sviluppare un modulo equivalente in altri ambienti o linguaggi, \u00e8 utile seguire la stessa logica e struttura:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gestione della Comunicazione con l\u2019API:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Implementare una funzione per inviare richieste HTTP in maniera asincrona.<\/li>\n\n\n\n<li>Utilizzare un formato di dati strutturato (es. JSON) e impostare il corretto content type.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Elaborazione della Risposta:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Verificare la presenza di un campo (es. array choices) nella risposta JSON.<\/li>\n\n\n\n<li>Estrarre il contenuto utile e gestire eventuali risposte troncate.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parsing e Visualizzazione del Testo:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Convertire il testo (eventualmente in Markdown) in un formato adatto alla visualizzazione.<\/li>\n\n\n\n<li>Utilizzare librerie per il parsing Markdown o implementare una logica simile.<\/li>\n\n\n\n<li>Adottare una logica di purificazione per prevenire vulnerabilit\u00e0 di tipo XSS.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Interfaccia Utente e Aggiornamento Dinamico:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Gestire gli eventi di input (Enter o click) per inviare il messaggio.<\/li>\n\n\n\n<li>Implementare un effetto &#8220;typewriter&#8221; per la visualizzazione graduale delle risposte.<\/li>\n\n\n\n<li>Assicurarsi che l\u2019interfaccia aggiorni dinamicamente l\u2019area di visualizzazione dei messaggi.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Error Handling:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Prevedere meccanismi per rilevare e gestire errori durante la comunicazione con l\u2019API.<\/li>\n\n\n\n<li>Visualizzare messaggi di errore chiari per l\u2019utente in caso di problemi.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">8. Conclusioni<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Il modulo client descritto in questo documento rappresenta un esempio di interfaccia di chat basata su richieste AJAX, parsing del Markdown e aggiornamento dinamico del DOM. La separazione delle funzionalit\u00e0 (invio, elaborazione, visualizzazione e purificazione) permette una facile manutenzione e rende il modulo facilmente trasponibile in altri linguaggi o ambienti di sviluppo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per implementare un modulo equivalente in un altro linguaggio, \u00e8 importante replicare:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La logica di invio e gestione delle richieste HTTP.<\/li>\n\n\n\n<li>Il meccanismo di conversione del testo (Markdown \u2192 HTML).<\/li>\n\n\n\n<li>Le funzioni di gestione degli eventi e di aggiornamento dinamico dell\u2019interfaccia.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lista degli argomenti: Integrazione del &#8220;Client Generico&#8221; con il tuo programma PHP L\u2019integrazione del Client Generico in una pagina PHP \u00e8 estremamente semplice. Nell\u2019esempio seguente ho realizzato una pagina PHP di base, includendo tutti i file necessari per garantire il corretto funzionamento del sistema. L&#8217;unico requisito \u00e8 la presenza di una versione aggiornata di jQuery.&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/chiedimi-assistente.cloud\/web\/supporto-tecnico\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":196,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-76","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/pages\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/comments?post=76"}],"version-history":[{"count":11,"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/pages\/76\/revisions"}],"predecessor-version":[{"id":220,"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/pages\/76\/revisions\/220"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/media\/196"}],"wp:attachment":[{"href":"https:\/\/chiedimi-assistente.cloud\/web\/wp-json\/wp\/v2\/media?parent=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}