{"id":1659,"date":"2026-01-16T08:15:28","date_gmt":"2026-01-16T08:15:28","guid":{"rendered":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659"},"modified":"2026-03-19T17:46:34","modified_gmt":"2026-03-19T17:46:34","slug":"integrar-el-xatbot-dins-del-portal-web-de-la-lan-party","status":"publish","type":"page","link":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659","title":{"rendered":"Integrar el xatbot dins del portal web de la LAN Party"},"content":{"rendered":"\n<p>En el marc de l&#8217;organitzaci\u00f3 de la <strong>LAN Party 2026<\/strong>, he desenvolupat un assistent virtual basat en intel\u00b7lig\u00e8ncia artificial per millorar l&#8217;atenci\u00f3 als participants. L&#8217;objectiu principal \u00e9s resoldre dubtes sobre horaris, reglaments i inscripcions de forma immediata i personalitzada, integrant un xatbot directament a la nostra web oficial.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Arquitectura del Sistema<\/h2>\n\n\n\n<p>Per garantir la seguretat, l&#8217;escalabilitat i la funcionalitat, el projecte utilitza una arquitectura de tres capes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Frontend:<\/strong> Interf\u00edcie d&#8217;usuari desenvolupada en HTML5, CSS3 i JavaScript, integrada de manera nativa en Google Sites.<\/li>\n\n\n\n<li><strong>Backend:<\/strong> Servidor Flask programat en Python, encarregat de gestionar les peticions i la l\u00f2gica de negoci, executat en l&#8217;entorn de Google Colab.<\/li>\n\n\n\n<li><strong>IA (Cervell):<\/strong> Connexi\u00f3 mitjan\u00e7ant API amb <strong>Google Gemini (model gemini-1.5-flash)<\/strong> per al processament del llenguatge natural i generaci\u00f3 de respostes basades en el context de la LAN.<\/li>\n\n\n\n<li><strong>Comunicaci\u00f3 i T\u00fanel:<\/strong> \u00das d&#8217;<strong>ngrok<\/strong> per crear un t\u00fanel segur que connecta la web p\u00fablica amb el servidor local del backend.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Implementaci\u00f3 i Seguretat<\/h2>\n\n\n\n<p>La protecci\u00f3 de dades ha estat una prioritat. En lloc d&#8217;exposar les claus API directament en el codi, he utilitzat el <strong>gestor de secrets de Google Colab<\/strong>. Aix\u00f2 evita filtracions accidentals en compartir el codi o pujar-lo a repositoris:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"487\" height=\"446\" title=\"image\" src=\"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png\" alt=\"\" class=\"wp-image-2938\" srcset=\"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png 487w, https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23-300x275.png 300w\" sizes=\"(max-width: 487px) 100vw, 487px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>from google.colab import userdata<br>import os<br>Gesti\u00f3 segura de credencials des del panell de Secrets<br>genai.configure(api_key=userdata.get(&#8216;GEMINI_KEY&#8217;))<br>ngrok.set_auth_token(userdata.get(&#8216;NGROK_TOKEN&#8217;))<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3. Integraci\u00f3 del Frontend en Google Sites<\/h2>\n\n\n\n<p>La integraci\u00f3 s&#8217;ha realitzat mitjan\u00e7ant la inserci\u00f3 de codi personalitzat, seguint aquests passos t\u00e8cnics:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Incorporaci\u00f3 de Codi:<\/strong> Dins de l&#8217;editor de Google Sites, s&#8217;ha utilitzat l&#8217;opci\u00f3 &#8220;Incorpora&#8221; (Embed) > &#8220;Codi&#8221;.<\/li>\n\n\n\n<li><strong>Disseny Adaptatiu:<\/strong> S&#8217;ha ajustat el contenidor a unes mides de <strong>450x650px<\/strong>, garantint que el widget sigui accessible i visualment coherent amb la resta de la web.<\/li>\n\n\n\n<li><strong>Connexi\u00f3 HTTP:<\/strong> El JavaScript del frontend s&#8217;ha configurat per apuntar a la URL din\u00e0mica generada per ngrok, assegurant el pas de dades en format JSON.<\/li>\n<\/ol>\n\n\n\n\n\n<h2 class=\"wp-block-heading\">3. Integraci\u00f3 del Frontend en Google Sites<\/h2>\n\n\n\n<p>La integraci\u00f3 s&#8217;ha realitzat mitjan\u00e7ant la inserci\u00f3 de codi personalitzat, seguint aquests passos t\u00e8cnics:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Incorporaci\u00f3 de Codi:<\/strong> Dins de l&#8217;editor de Google Sites, s&#8217;ha utilitzat l&#8217;opci\u00f3 &#8220;Incorpora&#8221; (Embed) > &#8220;Codi&#8221;.<\/li>\n\n\n\n<li><strong>Disseny Adaptatiu:<\/strong> S&#8217;ha ajustat el contenidor a unes mides de <strong>450x650px<\/strong>, garantint que el widget sigui accessible i visualment coherent amb la resta de la web.<\/li>\n\n\n\n<li><strong>Connexi\u00f3 HTTP:<\/strong> El JavaScript del frontend s&#8217;ha configurat per apuntar a la URL din\u00e0mica generada per ngrok, assegurant el pas de dades en format JSON.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Errors T\u00e8cnics Solucionats<\/h2>\n\n\n\n<p>Durant el desplegament, he diagnosticat i corregit diversos obstacles cr\u00edtics:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gesti\u00f3 de Ports (OSError: [Errno 98]):<\/strong> Resoluci\u00f3 d&#8217;errors de &#8220;Address already in use&#8221; mitjan\u00e7ant scripts de neteja de processos residuals (<code>pkill<\/code>) per alliberar el servidor Flask.<\/li>\n\n\n\n<li><strong>Optimitzaci\u00f3 de Quota (Error 429):<\/strong> Ajust del model a <code>gemini-1.5-flash<\/code> per evitar els l\u00edmits estrictes de la capa gratu\u00efta i garantir la disponibilitat cont\u00ednua del servei.<\/li>\n\n\n\n<li><strong>Advert\u00e8ncia d&#8217;ngrok:<\/strong> Implementaci\u00f3 de la cap\u00e7alera <code>ngrok-skip-browser-warning<\/code> per evitar la pantalla d&#8217;intercepci\u00f3 que bloquejava la comunicaci\u00f3 autom\u00e0tica del bot.<\/li>\n\n\n\n<li><strong>UX\/UI:<\/strong> Redisseny est\u00e8tic amb ombrejats (<em>box-shadow<\/em>) i tipografia optimitzada per millorar la llegibilitat.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Gemini ha dicho<\/h2>\n\n\n\n<p>Aqu\u00ed tens la redacci\u00f3 final del teu projecte, unificant tota la informaci\u00f3 de les pr\u00e0ctiques, els errors solucionats i la integraci\u00f3 final. Aquest document est\u00e0 llistat per ser copiat directament a la teva mem\u00f2ria o blog de WordPress.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Implementaci\u00f3 i Integraci\u00f3 del Xatbot Intel\u00b7ligent: LAN Party 2026<\/h1>\n\n\n\n<p>En el marc de l&#8217;organitzaci\u00f3 de la <strong>LAN Party 2026<\/strong>, he desenvolupat un assistent virtual basat en intel\u00b7lig\u00e8ncia artificial per millorar l&#8217;atenci\u00f3 als participants. L&#8217;objectiu principal \u00e9s resoldre dubtes sobre horaris, reglaments i inscripcions de forma immediata i personalitzada, integrant un xatbot directament a la nostra web oficial.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Arquitectura del Sistema<\/h2>\n\n\n\n<p>Per garantir la seguretat, l&#8217;escalabilitat i la funcionalitat, el projecte utilitza una arquitectura de tres capes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Frontend:<\/strong> Interf\u00edcie d&#8217;usuari desenvolupada en HTML5, CSS3 i JavaScript, integrada de manera nativa en Google Sites.<\/li>\n\n\n\n<li><strong>Backend:<\/strong> Servidor Flask programat en Python, encarregat de gestionar les peticions i la l\u00f2gica de negoci, executat en l&#8217;entorn de Google Colab.<\/li>\n\n\n\n<li><strong>IA (Cervell):<\/strong> Connexi\u00f3 mitjan\u00e7ant API amb <strong>Google Gemini (model gemini-1.5-flash)<\/strong> per al processament del llenguatge natural i generaci\u00f3 de respostes basades en el context de la LAN.<\/li>\n\n\n\n<li><strong>Comunicaci\u00f3 i T\u00fanel:<\/strong> \u00das d&#8217;<strong>ngrok<\/strong> per crear un t\u00fanel segur que connecta la web p\u00fablica amb el servidor local del backend.<\/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\">2. Implementaci\u00f3 i Seguretat<\/h2>\n\n\n\n<p>La protecci\u00f3 de dades ha estat una prioritat. En lloc d&#8217;exposar les claus API directament en el codi, he utilitzat el <strong>gestor de secrets de Google Colab<\/strong>. Aix\u00f2 evita filtracions accidentals en compartir el codi o pujar-lo a repositoris:<\/p>\n\n\n\n<p>Python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from google.colab import userdata\nimport os\n\n# Gesti\u00f3 segura de credencials des del panell de Secrets\ngenai.configure(api_key=userdata.get('GEMINI_KEY'))\nngrok.set_auth_token(userdata.get('NGROK_TOKEN'))\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Integraci\u00f3 del Frontend en Google Sites<\/h2>\n\n\n\n<p>La integraci\u00f3 s&#8217;ha realitzat mitjan\u00e7ant la inserci\u00f3 de codi personalitzat, seguint aquests passos t\u00e8cnics:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Incorporaci\u00f3 de Codi:<\/strong> Dins de l&#8217;editor de Google Sites, s&#8217;ha utilitzat l&#8217;opci\u00f3 &#8220;Incorpora&#8221; (Embed) > &#8220;Codi&#8221;.<\/li>\n\n\n\n<li><strong>Disseny Adaptatiu:<\/strong> S&#8217;ha ajustat el contenidor a unes mides de <strong>450x650px<\/strong>, garantint que el widget sigui accessible i visualment coherent amb la resta de la web.<\/li>\n\n\n\n<li><strong>Connexi\u00f3 HTTP:<\/strong> El JavaScript del frontend s&#8217;ha configurat per apuntar a la URL din\u00e0mica generada per ngrok, assegurant el pas de dades en format JSON.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Errors T\u00e8cnics Solucionats<\/h2>\n\n\n\n<p>Durant el desplegament, he diagnosticat i corregit diversos obstacles cr\u00edtics:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gesti\u00f3 de Ports (OSError: [Errno 98]):<\/strong> Resoluci\u00f3 d&#8217;errors de &#8220;Address already in use&#8221; mitjan\u00e7ant scripts de neteja de processos residuals (<code>pkill<\/code>) per alliberar el servidor Flask.<\/li>\n\n\n\n<li><strong>Optimitzaci\u00f3 de Quota (Error 429):<\/strong> Ajust del model a <code>gemini-1.5-flash<\/code> per evitar els l\u00edmits estrictes de la capa gratu\u00efta i garantir la disponibilitat cont\u00ednua del servei.<\/li>\n\n\n\n<li><strong>Advert\u00e8ncia d&#8217;ngrok:<\/strong> Implementaci\u00f3 de la cap\u00e7alera <code>ngrok-skip-browser-warning<\/code> per evitar la pantalla d&#8217;intercepci\u00f3 que bloquejava la comunicaci\u00f3 autom\u00e0tica del bot.<\/li>\n\n\n\n<li><strong>UX\/UI:<\/strong> Redisseny est\u00e8tic amb ombrejats (<em>box-shadow<\/em>) i tipografia optimitzada per millorar la llegibilitat.<\/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\">5. El paper de la IA com a Tutor T\u00e8cnic<\/h2>\n\n\n\n<p>En aquest projecte, la IA no ha realitzat el treball de manera automatitzada, sin\u00f3 que ha actuat com un <strong>tutor t\u00e8cnic personalitzat<\/strong>. M&#8217;ha ajudat a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Diagnosticar errors complexos de xarxa i backend.<\/li>\n\n\n\n<li>Aplicar bones pr\u00e0ctiques de ciberseguretat.<\/li>\n\n\n\n<li>Entendre la l\u00f2gica de l&#8217;arquitectura Client-Servidor.<\/li>\n<\/ul>\n\n\n\n<p>Gr\u00e0cies a aquest m\u00e8tode de treball basat en <em>prompts<\/em> d&#8217;aprenentatge, he pogut accelerar la meva corba d&#8217;aprenentatge en Python i integraci\u00f3 web, aconseguint un resultat professional i funcional.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Tinc un xatbot per a una LAN Party programat amb Flask i Gemini que estic intentant integrar en un Google Site mitjan\u00e7ant un &#8216;Embed&#8217; de HTML\/JS. Actualment tinc un problema: el t\u00fanel d&#8217;ngrok em mostra una pantalla d&#8217;advert\u00e8ncia (&#8216;Visit Site&#8217;) que bloqueja la comunicaci\u00f3 JSON i el xat no respon.<br>No em donis la soluci\u00f3 directament; explica&#8217;m per qu\u00e8 passa aix\u00f2, quines cap\u00e7aleres HTTP (headers) hauria d&#8217;investigar per saltar aquesta protecci\u00f3 i com puc estructurar el codi JavaScript per fer que la connexi\u00f3 sigui as\u00edncrona i robusta davant d&#8217;errors de quota (429). El meu objectiu \u00e9s aprendre a gestionar aquestes connexions jo mateix.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">6. Registre de Canvis (Changelog)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"376\" title=\"image-26-1024x376\" src=\"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-26-1024x376.png\" alt=\"\" class=\"wp-image-2942\" srcset=\"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-26-1024x376.png 1024w, https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-26-300x110.png 300w, https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-26-768x282.png 768w, https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-26-1536x563.png 1536w, https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-26.png 1873w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>En el marc de l&#8217;organitzaci\u00f3 de la LAN Party 2026, he desenvolupat un assistent virtual basat en intel\u00b7lig\u00e8ncia artificial per millorar l&#8217;atenci\u00f3 als participants. L&#8217;objectiu principal \u00e9s resoldre dubtes sobre horaris, reglaments i inscripcions de forma immediata i personalitzada, integrant un xatbot directament a la nostra web oficial. 1. Arquitectura del Sistema Per garantir la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1707,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"saved_in_kubio":false,"_dseop_meta":"{\"noFollowLinks\":{\"linkList\":[],\"ignoredGlobalDomains\":[],\"textboxValue\":\"\"},\"schemaMarkup\":{\"schemas\":[{\"templateId\":\"WebpageSchema\",\"name\":\"Webpage\",\"id\":\"WebpageSchema\",\"schemaData\":{\"@type\":\"WebPage\",\"@id\":\"\",\"name\":\"\",\"url\":\"\",\"description\":\"\",\"breadcrumb\":{\"@type\":\"BreadcrumbList\",\"@id\":\"\"},\"datePublished\":\"\",\"dateModified\":\"\",\"inLanguage\":\"\"}}],\"schemaTemplates\":[]},\"metaDescription\":{\"metaData\":[]},\"keywordAppearance\":{\"contentDetails\":[{\"name\":\"Word count\",\"count\":1127,\"id\":\"wordCount\",\"status\":\"success\",\"detailStatus\":\"success\",\"tooltip\":\"words count should be greater then 1500.\"},{\"id\":\"heading1\",\"name\":\"heading 1\",\"count\":2,\"status\":\"poor\",\"detailStatus\":\"longPoor\",\"tooltip\":\"web page should have one h1 tag for better SEO\"},{\"id\":\"heading2\",\"name\":\"heading 2\",\"count\":12,\"status\":\"excellent\",\"detailStatus\":\"excellent\",\"tooltip\":\"good use of h2 tags.\"},{\"id\":\"heading3\",\"name\":\"heading 3\",\"count\":0,\"status\":\"poor\",\"detailStatus\":\"missing\",\"tooltip\":\"web page should have h3 tags for better SEO\"},{\"id\":\"paragraphTags\",\"name\":\"paragraph tags\",\"count\":15,\"status\":\"excellent\",\"detailStatus\":\"excellent\",\"tooltip\":\"good use of paragraph tags.\"},{\"id\":\"boldAndStrongTags\",\"name\":\"bold and strong tags list\",\"count\":37,\"status\":\"excellent\",\"detailStatus\":\"excellent\",\"tooltip\":\"good use of bold and strong tags.\"},{\"name\":\"Avg. Stopword percentage\",\"count\":6,\"id\":\"averageStopwordPercentage\"},{\"name\":\"Avg. Words per sentence\",\"count\":22,\"id\":\"averageWordsPerSentence\"},{\"name\":\"Stopword count\",\"count\":64,\"id\":\"sentenceCount\"},{\"name\":\"Sentence count\",\"count\":52,\"id\":\"sentenceCount\"},{\"name\":\"Letter count\",\"count\":6206,\"id\":\"letterCount\"},{\"name\":\"Difficult word\",\"count\":170,\"id\":\"difficultWord\"}],\"advanceOptions\":[],\"modifyStopwords\":{\"customStopwords\":[],\"disabledStopwords\":[]}},\"socialMedia\":{\"openGraphData\":[],\"twitterData\":{\"xSummaryCardData\":[],\"xAppCardData\":{\"iphoneAppName\":\"\",\"iphoneAppId\":\"\",\"iphoneAppUrl\":\"\",\"ipadAppName\":\"\",\"ipadAppId\":\"\",\"ipadAppUrl\":\"\",\"googlePlayAppName\":\"\",\"googlePlayAppId\":\"\",\"googlePlayAppUrl\":\"\",\"appCountry\":\"\"},\"xPlayerCardData\":{\"player\":\"\",\"playerWidth\":\"\",\"streamUrl\":\"\",\"streamContentType\":\"\"}}},\"readability\":{\"readabilityFactorList\":[{\"helpLink\":\"link\",\"isError\":true,\"name\":\"Flesch - Kincaid reading ease\",\"score\":5.38,\"description\":\"The Flesch-Kincaid Reading Ease score measures the readability of your text. A higher score indicates easier-to-read content. Aim for a score between 60 and 70 for most web content.\",\"grade\":\"Very Difficult (College Graduate)\"},{\"helpLink\":\"link\",\"isError\":true,\"name\":\"Gunning fog score\",\"score\":12.47,\"description\":\"The Gunning Fog Score estimates the years of formal education needed to understand your text. Lower scores indicate easier readability. Aim for a score of 7 to 8 for general audiences.\",\"grade\":\"High School (Grade 9-12)\"},{\"helpLink\":\"link\",\"isError\":false,\"name\":\"Coleman liau index\",\"score\":14.74,\"description\":\"The Coleman-Liau Index calculates readability based on characters per word and sentence length. It estimates the U.S. school grade level required to comprehend the text. A lower score suggests easier content.\",\"grade\":\"College (Grade 13-16)\"},{\"helpLink\":\"link\",\"isError\":false,\"name\":\"Flesch - Kincaid grade level\",\"score\":16.51,\"description\":\"The Flesch-Kincaid Grade Level formula evaluates the readability of your text by calculating the U.S. school grade level. A lower grade level indicates easier readability.\",\"grade\":\"College Graduate (Grade 17+)\"},{\"helpLink\":\"link\",\"isError\":false,\"name\":\"Smog index\",\"score\":12.03,\"description\":\"The SMOG (Simple Measure of Gobbledygook) Index estimates the years of education a person needs to understand a text. A lower score means simpler text, while a higher score suggests more complex content.\",\"grade\":\"High School (Grade 9-12)\"},{\"helpLink\":\"link\",\"isError\":false,\"name\":\"Automated readability index\",\"score\":12.56,\"description\":\"The Automated Readability Index calculates the readability of your content using characters per word and words per sentence. It estimates the U.S. school grade level needed to understand the text.\",\"grade\":\"College (Grade 13-16)\"},{\"helpLink\":\"link\",\"isError\":false,\"name\":\"Dale chall readability score\",\"score\":6.82,\"description\":\"The Dale-Chall Readability Score evaluates the readability of your text based on familiar words and sentence structure. A lower score indicates that the content is easier to read.\",\"grade\":\"7th-8th grade\"},{\"helpLink\":\"link\",\"isError\":false,\"name\":\"Spache readability score\",\"score\":2.61,\"description\":\"The Spache Readability Score measures the readability of texts for younger readers. It identifies words that are unfamiliar to children and calculates a score accordingly. A lower score indicates easier content.\",\"grade\":\"3rd grade\"}]},\"advanceSetting\":{\"advanceRobotsMeta\":[],\"breadcrumbTitle\":\"\",\"canonicalURL\":\"\",\"criticalOptions\":[]},\"scoring\":{\"subScoring\":{\"metaDescriptionScore\":4.5,\"schemaMarkupScore\":8,\"outwardInterlinkingScore\":0,\"inwardInterlinkingScore\":0,\"socialMediaScore\":1,\"misspelledWordsScore\":0,\"advanceSettingScore\":3,\"noFollowLinksScore\":0,\"keywordAppearanceScore\":3.5,\"imageAnalyticsScore\":1},\"singlePostScore\":32},\"misspelledWords\":[],\"pointsToImprove\":{\"count\":{\"criticalPointsCount\":0,\"recommendedPointsCount\":0},\"pointsToImproveDetails\":{\"searchEngineAppearance\":[{\"id\":\"recommended_meta_title_average\",\"name\":{\"label\":\"Meta title is average\"},\"type\":\"Recommended\",\"priority\":\"too_high\"},{\"id\":\"recommended_keyword_missing_meta_title\",\"name\":{\"label\":\"Keyword is missing in meta title.\"},\"type\":\"Critical\",\"priority\":\"too_high\"},{\"id\":\"critical_meta_description_too_long\",\"name\":{\"label\":\"Meta description is too long\"},\"type\":\"Critical\"},{\"id\":\"recommended_meta_description_with_no_selected_keyword\",\"name\":{\"label\":\"There in no keyword in your meta description.\"},\"type\":\"Critical\"},{\"id\":\"recommended_keyword_missing_permalink\",\"name\":{\"label\":\"Keyword is missing in permalink.\"},\"type\":\"Critical\"}],\"searchEngineVisibility\":[],\"redirectedLink301\":[],\"socialMedia\":[{\"id\":\"critical_missing_social_media_image\",\"name\":{\"label\":\"Image is missing in social media appearance.\"},\"type\":\"Critical\",\"priority\":\"high\"},{\"id\":\"recommended_keyword_missing_open_graph_title\",\"name\":{\"label\":\"Keyword is missing in social media title.\"},\"type\":\"Recommended\"},{\"id\":\"recommended_average_social_media_title\",\"name\":{\"label\":\"Title is average in social media appearance.\"},\"type\":\"Recommended\"},{\"id\":\"recommended_keyword_missing_open_graph_description\",\"name\":{\"label\":\"Keyword is missing in social media description.\"},\"type\":\"Recommended\"},{\"id\":\"critical_too_long_social_media_description\",\"name\":{\"label\":\"Description is Too long in social media appearance.\"},\"type\":\"Critical\"},{\"id\":\"critical_missing_social_media_twitter_image\",\"name\":{\"label\":\"X(Twitter) image is missing in social media appearance.\"},\"type\":\"Critical\",\"priority\":\"high\"},{\"id\":\"recommended_keyword_missing_twitter_title\",\"name\":{\"label\":\"Keyword is missing in X(Twitter) title.\"},\"type\":\"Recommended\"},{\"id\":\"recommended_average_social_media_twitter_title\",\"name\":{\"label\":\"X(Twitter) title is average in social media appearance.\"},\"type\":\"Recommended\"},{\"id\":\"recommended_keyword_missing_twitter_description\",\"name\":{\"label\":\"Keyword is missing in X(Twitter) description.\"},\"type\":\"Recommended\"},{\"id\":\"critical_too_long_social_media_twitter_description\",\"name\":{\"label\":\"X(Twitter) description is Too long in social media appearance.\"},\"type\":\"Critical\"}],\"noFollowLink\":[],\"misspelledWords\":[],\"inwardLinks\":[],\"outwardLinks\":[],\"keywordAppearance\":[{\"id\":\"critical_no_selected_keyword\",\"name\":{\"label\":\"Selected keyword missing in keyword appearance.\"},\"type\":\"Critical\",\"priority\":\"too_high\"},{\"id\":\"critical_h1_is_too_high\",\"name\":{\"label\":\"H1 tags is too high in your content.\"},\"type\":\"Critical\",\"priority\":\"too_high\"},{\"id\":\"critical_heading3_is_missing\",\"name\":{\"label\":\"Missing H3 tags, consider adding H3 for better SEO.\"},\"type\":\"Critical\"}],\"advanceSettings\":[],\"schemaMarkup\":[],\"imageAnalytics\":[{\"id\":\"critical_missing_images_title_attribute\",\"name\":{\"label\":\"Missing images title attribute.\"},\"type\":\"Critical\"},{\"id\":\"critical_missing_images_alt_attribute\",\"name\":{\"label\":\"Missing images alt attribute.\"},\"type\":\"Critical\"},{\"id\":\"critical_keyword_missing_in_image_filename\",\"name\":{\"label\":\"Keyword missing in images filename.\"},\"type\":\"Critical\"}],\"productGtins\":[]}},\"imageAnalytics\":{\"imageAnalysis\":[{\"id\":\"TotalImages\",\"name\":\"Total images\",\"value\":\"4\"},{\"id\":\"ImagesHasTitle\",\"name\":\"Images has title\",\"value\":\"0\",\"outOff\":\"4\",\"status\":\"poor\",\"tooltip\":\"Missing image title attribute\"},{\"id\":\"ImageHasAltAttribute\",\"name\":\"Images has alt\",\"value\":\"0\",\"outOff\":\"4\",\"status\":\"poor\",\"tooltip\":\"Missing alt attribute\"},{\"id\":\"ImagesHasProperFileName\",\"name\":\"Images has proper filename format\",\"value\":\"4\",\"outOff\":\"4\",\"status\":\"excellent\",\"tooltip\":\"Good! all images has proper filename format\"},{\"id\":\"KeywordInTitleAttribute\",\"name\":\"Keyword in image title\",\"value\":\"0\",\"outOff\":\"0\",\"status\":\"disabled\",\"tooltip\":\"Add image title attribute to enable this feature.\"},{\"id\":\"KeywordInAltAttribute\",\"name\":\"Keyword in image Alt\",\"value\":\"0\",\"outOff\":\"0\",\"status\":\"disabled\",\"tooltip\":\"Add image alt attribute to enable this feature.\"},{\"id\":\"KeywordInFilename\",\"name\":\"Keyword in image filename\",\"value\":\"0\",\"outOff\":\"4\",\"status\":\"poor\",\"tooltip\":\"Missing keyword in image filename\"}]}}","_dseop_selected_keywords":"","footnotes":""},"class_list":["post-1659","page","type-page","status-publish","hentry"],"kubio_ai_page_context":{"short_desc":"","purpose":"general"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Integrar el xatbot dins del portal web de la LAN Party - Adrian Jaimes<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659\" \/>\n<meta property=\"og:locale\" content=\"ca_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integrar el xatbot dins del portal web de la LAN Party - Adrian Jaimes\" \/>\n<meta property=\"og:description\" content=\"En el marc de l&#8217;organitzaci\u00f3 de la LAN Party 2026, he desenvolupat un assistent virtual basat en intel\u00b7lig\u00e8ncia artificial per millorar l&#8217;atenci\u00f3 als participants. L&#8217;objectiu principal \u00e9s resoldre dubtes sobre horaris, reglaments i inscripcions de forma immediata i personalitzada, integrant un xatbot directament a la nostra web oficial. 1. Arquitectura del Sistema Per garantir la [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659\" \/>\n<meta property=\"og:site_name\" content=\"Adrian Jaimes\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-19T17:46:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png\" \/>\n\t<meta property=\"og:image:width\" content=\"487\" \/>\n\t<meta property=\"og:image:height\" content=\"446\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Temps estimat de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minuts\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659\",\"url\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659\",\"name\":\"Integrar el xatbot dins del portal web de la LAN Party - Adrian Jaimes\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/image-23.png\",\"datePublished\":\"2026-01-16T08:15:28+00:00\",\"dateModified\":\"2026-03-19T17:46:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659#breadcrumb\"},\"inLanguage\":\"ca\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ca\",\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659#primaryimage\",\"url\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/image-23.png\",\"contentUrl\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/image-23.png\",\"width\":487,\"height\":446},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1659#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inici\",\"item\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"1r SMX\",\"item\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1084\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Repte 1.3\",\"item\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1491\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"5\ufe0f\u20e3 &#8211; \ud83e\udd16 &#8211; Generaci\u00f3 d\u2019un xatbot\",\"item\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?page_id=1707\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Integrar el xatbot dins del portal web de la LAN Party\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/#website\",\"url\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/\",\"name\":\"Adrian Jaimes\",\"description\":\"S\u00f3c estudiant d&#039;inform\u00e0tica i aqu\u00ed podr\u00e0s veure el meu cam\u00ed acad\u00e8mic, els projectes que he realitzat i els coneixements que he adquirit durant la meva formaci\u00f3. Aquesta p\u00e0gina \u00e9s un reflex de la meva passi\u00f3 per la tecnologia i el meu comprom\u00eds per seguir aprenent i millorant cada dia.  Explora els meus treballs i seguiment acad\u00e8mic!\",\"publisher\":{\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ca\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/#organization\",\"name\":\"Adrian Jaimes\",\"url\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ca\",\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/cropped-cropped-cropped-width_550_009.webp\",\"contentUrl\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/cropped-cropped-cropped-width_550_009.webp\",\"width\":512,\"height\":512,\"caption\":\"Adrian Jaimes\"},\"image\":{\"@id\":\"https:\\\/\\\/ajaimes.inscastellbisbal.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Integrar el xatbot dins del portal web de la LAN Party - Adrian Jaimes","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659","og_locale":"ca_ES","og_type":"article","og_title":"Integrar el xatbot dins del portal web de la LAN Party - Adrian Jaimes","og_description":"En el marc de l&#8217;organitzaci\u00f3 de la LAN Party 2026, he desenvolupat un assistent virtual basat en intel\u00b7lig\u00e8ncia artificial per millorar l&#8217;atenci\u00f3 als participants. L&#8217;objectiu principal \u00e9s resoldre dubtes sobre horaris, reglaments i inscripcions de forma immediata i personalitzada, integrant un xatbot directament a la nostra web oficial. 1. Arquitectura del Sistema Per garantir la [&hellip;]","og_url":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659","og_site_name":"Adrian Jaimes","article_modified_time":"2026-03-19T17:46:34+00:00","og_image":[{"width":487,"height":446,"url":"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Temps estimat de lectura":"7 minuts"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659","url":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659","name":"Integrar el xatbot dins del portal web de la LAN Party - Adrian Jaimes","isPartOf":{"@id":"https:\/\/ajaimes.inscastellbisbal.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659#primaryimage"},"image":{"@id":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659#primaryimage"},"thumbnailUrl":"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png","datePublished":"2026-01-16T08:15:28+00:00","dateModified":"2026-03-19T17:46:34+00:00","breadcrumb":{"@id":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659#breadcrumb"},"inLanguage":"ca","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659"]}]},{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659#primaryimage","url":"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png","contentUrl":"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2026\/03\/image-23.png","width":487,"height":446},{"@type":"BreadcrumbList","@id":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1659#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inici","item":"https:\/\/ajaimes.inscastellbisbal.net\/"},{"@type":"ListItem","position":2,"name":"1r SMX","item":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1084"},{"@type":"ListItem","position":3,"name":"Repte 1.3","item":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1491"},{"@type":"ListItem","position":4,"name":"5\ufe0f\u20e3 &#8211; \ud83e\udd16 &#8211; Generaci\u00f3 d\u2019un xatbot","item":"https:\/\/ajaimes.inscastellbisbal.net\/?page_id=1707"},{"@type":"ListItem","position":5,"name":"Integrar el xatbot dins del portal web de la LAN Party"}]},{"@type":"WebSite","@id":"https:\/\/ajaimes.inscastellbisbal.net\/#website","url":"https:\/\/ajaimes.inscastellbisbal.net\/","name":"Adrian Jaimes","description":"S\u00f3c estudiant d&#039;inform\u00e0tica i aqu\u00ed podr\u00e0s veure el meu cam\u00ed acad\u00e8mic, els projectes que he realitzat i els coneixements que he adquirit durant la meva formaci\u00f3. Aquesta p\u00e0gina \u00e9s un reflex de la meva passi\u00f3 per la tecnologia i el meu comprom\u00eds per seguir aprenent i millorant cada dia.  Explora els meus treballs i seguiment acad\u00e8mic!","publisher":{"@id":"https:\/\/ajaimes.inscastellbisbal.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ajaimes.inscastellbisbal.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ca"},{"@type":"Organization","@id":"https:\/\/ajaimes.inscastellbisbal.net\/#organization","name":"Adrian Jaimes","url":"https:\/\/ajaimes.inscastellbisbal.net\/","logo":{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/ajaimes.inscastellbisbal.net\/#\/schema\/logo\/image\/","url":"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2025\/12\/cropped-cropped-cropped-width_550_009.webp","contentUrl":"https:\/\/ajaimes.inscastellbisbal.net\/wp-content\/uploads\/2025\/12\/cropped-cropped-cropped-width_550_009.webp","width":512,"height":512,"caption":"Adrian Jaimes"},"image":{"@id":"https:\/\/ajaimes.inscastellbisbal.net\/#\/schema\/logo\/image\/"}}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1659"}],"version-history":[{"count":3,"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1659\/revisions"}],"predecessor-version":[{"id":2943,"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1659\/revisions\/2943"}],"up":[{"embeddable":true,"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1707"}],"wp:attachment":[{"href":"https:\/\/ajaimes.inscastellbisbal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}