{"id":6311,"date":"2025-03-20T10:22:47","date_gmt":"2025-03-20T10:22:47","guid":{"rendered":"https:\/\/aborrego.inscastellbisbal.net\/?p=6311"},"modified":"2025-03-25T12:25:03","modified_gmt":"2025-03-25T12:25:03","slug":"crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok","status":"publish","type":"post","link":"https:\/\/aborrego.inscastellbisbal.net\/en\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/","title":{"rendered":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"6311\" class=\"elementor elementor-6311\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-34ec63f elementor-section-height-min-height elementor-section-items-top elementor-section-boxed elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no elementor-invisible\" data-id=\"34ec63f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeIn&quot;,&quot;shape_divider_top&quot;:&quot;waves&quot;,&quot;shape_divider_top_negative&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" aria-hidden=\"true\" data-negative=\"true\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M790.5,93.1c-59.3-5.3-116.8-18-192.6-50c-29.6-12.7-76.9-31-100.5-35.9c-23.6-4.9-52.6-7.8-75.5-5.3\n\tc-10.2,1.1-22.6,1.4-50.1,7.4c-27.2,6.3-58.2,16.6-79.4,24.7c-41.3,15.9-94.9,21.9-134,22.6C72,58.2,0,25.8,0,25.8V100h1000V65.3\n\tc0,0-51.5,19.4-106.2,25.7C839.5,97,814.1,95.2,790.5,93.1z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-ec11f85\" data-id=\"ec11f85\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dffdb70 elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"dffdb70\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:500}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0ac8a15 elementor-widget elementor-widget-spacer\" data-id=\"0ac8a15\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a8ab4eb elementor-widget elementor-widget-spacer\" data-id=\"a8ab4eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-48c38f7\" data-id=\"48c38f7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-be0fb31 elementor-align-left elementor-widget elementor-widget-button\" data-id=\"be0fb31\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm elementor-animation-float\" href=\"https:\/\/aborrego.inscastellbisbal.net\/repte-1-6-talent-fp\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Tornar al repte 1.6<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-64faf9b e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"64faf9b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6520514 elementor-widget elementor-widget-spacer\" data-id=\"6520514\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d3c3db elementor-widget elementor-widget-text-editor\" data-id=\"0d3c3db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>He creat un widget frontend senzill utilitzant HTML i JavaScript, i ho he connectat a un servidor backend en Flask mitjan\u00e7ant Ngrok. Per a aix\u00f2, primer vaig configurar Ngrok amb un authtoken per a poder exposar el servidor local a internet i fer que el frontend pogu\u00e9s comunicar-se amb el backend de manera remota. Despr\u00e9s d&#8217;integrar el giny en la web, vaig solucionar alguns problemes comuns, com la configuraci\u00f3 incorrecta de la URL i el maneig de la resposta del servidor, assegurant-me que el frontend reb\u00e9s i mostr\u00e9s correctament les dades des del backend.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fa2259b e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"fa2259b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f76c784 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-child\" data-id=\"f76c784\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fee0858 elementor-widget elementor-widget-text-editor\" data-id=\"fee0858\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"176\" data-end=\"212\"><strong data-start=\"180\" data-end=\"212\">Instal\u00b7laci\u00f3 de depend\u00e8ncies <\/strong><\/p><p data-start=\"176\" data-end=\"212\">Primer, executa aquesta cel\u00b7la per instal\u00b7lar totes les depend\u00e8ncies necess\u00e0ries per al projecte. Aix\u00f2 inclou les llibreries de Flask i altres eines que necessites per configurar el servidor.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2073154 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"2073154\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>!pip install google-genai # Alg1: Instal&middot;la la llibreria google-genai per interactuar amb el model GenAI\n!pip install beautifulsoup4 requests # Alg2: Instal&middot;la BeautifulSoup per web scraping i requests per fer peticions HTTP\n!pip install flask flask-ngrok # Alg3: Instal&middot;la Flask per crear el servidor web i Flask-ngrok per exposar el servidor\n!pip install flask pyngrok # Alg4: Instal&middot;la Flask per crear el servidor i pyngrok per crear t&uacute;nels amb Ngrok\n!pip install flask-cors # Alg5: Instal&middot;la Flask-CORS per gestionar CORS (peticions des de diferents or&iacute;gens)\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-114ebdb e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-child\" data-id=\"114ebdb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ca1e2df elementor-widget elementor-widget-text-editor\" data-id=\"ca1e2df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"407\" data-end=\"450\"><strong data-start=\"411\" data-end=\"450\">Iniciar el servidor Flask amb Ngrok<\/strong><\/p><p data-start=\"452\" data-end=\"671\">A continuaci\u00f3, executa la cel\u00b7la que inicia el servidor Flask. Per\u00f2, vaig tenir un error relacionat amb Ngrok que deia que necessitava autenticaci\u00f3 amb un token, ja que estava utilitzant Ngrok sense un compte verificat.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54670ab elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"54670ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>app = Flask(__name__) # Alg38: Crea una inst&agrave;ncia de l&#039;aplicaci&oacute; Flask\nCORS(app)  # Alg39: Activa CORS per permetre peticions des de diferents or&iacute;gens\n\nngrok.set_auth_token(&quot;2uTpEJU6jYqOIOXrL4NDYFpSu8R_4stuSzXJ3Bv64N5rr5auN&quot;) # Alg40: Configura el token d&#039;autenticaci&oacute; per a Ngrok\n\n\n# Iniciar Ngrok i exposar el servidor\npublic_url = ngrok.connect(5000) # Alg41: Exposa l&#039;aplicaci&oacute; Flask a trav&eacute;s d&#039;Ngrok a la porta 5000\nprint(&quot;\ud83c\udf0d URL p&uacute;blica del backend:&quot;, public_url) # Alg42: Mostra la URL p&uacute;blica per accedir al servidor\n\n@app.route(&quot;\/chat&quot;, methods=[&quot;POST&quot;]) # Alg43: Defineix la ruta &#039;\/chat&#039; per a les peticions POST\ndef chat_route():# Alg44: Funci&oacute; que gestiona la petici&oacute; del xat\n    data = request.get_json() # Alg45: Obt&eacute; les dades JSON enviades pel frontend\n    message = data.get(&quot;message&quot;, &quot;&quot;) # Alg46: Extreu el missatge del JSON\n\n    try:\n        response = chat.send_message(message) # Alg47: Envia el missatge al model GenAI\n        return jsonify({&quot;response&quot;: response.text.strip()}) # Alg48: Retorna la resposta generada pel model\n    except Exception as e: # Alg49: Captura errors durant la comunicaci&oacute; amb GenAI\n        print(f&quot;\u26a0\ufe0f Error en la comunicaci&oacute; amb Gemini: {e}&quot;)  # Alg50: Mostra el missatge d&#039;error\n        return jsonify({&quot;response&quot;: &quot;S&#039;ha produ&iuml;t un error. Torna-ho a intentar m&eacute;s tard.&quot;}) # Alg51: Resposta d&#039;error al frontend\n\nif __name__ == &quot;__main__&quot;: # Alg52: Condici&oacute; per a executar el servidor si el script es llanci directament\n    print(&quot;\ud83d\udd25 Servidor en funcionament! Usa aquesta URL en el teu frontend:&quot;) # Alg53: Mostra un missatge indicant que el servidor est&agrave; actiu\n    app.run(port=5000) # Alg54: Inicia el servidor Flask a la porta 5000<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ffa2721 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"ffa2721\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c65e1ad elementor-widget elementor-widget-text-editor\" data-id=\"c65e1ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"705\" data-end=\"797\">Vaig tenir un error de Ngrok. Per resoldre aix\u00f2, necessitaba obtenir un <strong data-start=\"746\" data-end=\"765\">Ngrok authtoken<\/strong> i configurar-lo a Google Colab:<\/p><p data-start=\"799\" data-end=\"997\">1\ufe0f<strong data-start=\"803\" data-end=\"837\">Crea un compte gratu\u00eft a Ngrok<\/strong><br data-start=\"837\" data-end=\"840\" \/>Visita <a href=\"https:\/\/dashboard.ngrok.com\/signup\" target=\"_new\" rel=\"noopener\" data-start=\"850\" data-end=\"922\">https:\/\/dashboard.ngrok.com\/signup<\/a><\/p><p data-start=\"999\" data-end=\"1185\">2\ufe0f<strong data-start=\"1003\" data-end=\"1037\">Obtenir el teu Ngrok authtoken<\/strong><br data-start=\"1037\" data-end=\"1040\" \/>Un cop creat el compte, visita <a href=\"https:\/\/dashboard.ngrok.com\/get-started\/your-authtoken\" target=\"_new\" rel=\"noopener\" data-start=\"1074\" data-end=\"1146\">aquesta p\u00e0gina<\/a> per obtenir el teu authtoken. Copia\u2019l.<\/p><p data-start=\"1187\" data-end=\"1379\">3\ufe0f<strong data-start=\"1191\" data-end=\"1243\">Configurar el teu Ngrok authtoken a Google Colab<\/strong><br data-start=\"1243\" data-end=\"1246\" \/>Un cop obtingut el teu authtoken, executa la seg\u00fcent cel\u00b7la a Google Colab amb el teu authtoken per configurar Ngrok correctament.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-909c0eb elementor-widget elementor-widget-image\" data-id=\"909c0eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"700\" height=\"59\" src=\"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png\" class=\"attachment-large size-large wp-image-6319\" alt=\"\" srcset=\"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png 990w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309-300x25.png 300w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309-768x65.png 768w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309-18x2.png 18w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5c4301 elementor-widget elementor-widget-text-editor\" data-id=\"a5c4301\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Un cop configurat, podr\u00e0s tornar a executar la cel\u00b7la per obrir Ngrok i obtenir l\u2019<strong data-start=\"1523\" data-end=\"1538\">URL p\u00fablica<\/strong> per accedir al servidor. Cada vegada que executis la cel\u00b7la, l\u2019URL generat canviar\u00e0, aix\u00ed que recorda actualitzar-lo al teu WordPres<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e75f480 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"e75f480\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ab9b5da elementor-widget elementor-widget-text-editor\" data-id=\"ab9b5da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4 data-start=\"1717\" data-end=\"1854\"><strong>Ara conectarem el fontend amb el backend.<\/strong><\/h4><p data-start=\"1717\" data-end=\"1854\">Ara que\u00a0 el servidor Flask est\u00e1 funcionant, em &#8216; integrar el <strong data-start=\"1783\" data-end=\"1795\">frontend<\/strong> amb el <strong data-start=\"1803\" data-end=\"1814\">backend<\/strong>. Aqu\u00ed \u00e9s on vaig trobar un petit error:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d37f361 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"d37f361\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-763e65f elementor-widget elementor-widget-text-editor\" data-id=\"763e65f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1856\" data-end=\"2018\">1\ufe0f <strong data-start=\"1860\" data-end=\"1883\">Obtenir el frontend<\/strong><br data-start=\"1883\" data-end=\"1886\" \/>Demana a ChatGPT que et proporcioni el codi del frontend (HTML\/JavaScript) per crear el widget que vols integrar al teu lloc web.<\/p><p data-start=\"2020\" data-end=\"2228\">2\ufe0f<strong data-start=\"2024\" data-end=\"2064\">Afegir el codi HTML al teu WordPress<\/strong><br data-start=\"2064\" data-end=\"2067\" \/>Un cop tinguis el codi del widget, copia\u2019l i afegeix-lo a la teva p\u00e0gina de WordPress.\u00a0 Si fas click aqu\u00ed trobar\u00e1s una p\u00e0gina on explico com insertar un widget html i com utilitzar-ho.<\/p><p data-start=\"2230\" data-end=\"2579\">3\ufe0f <strong data-start=\"2234\" data-end=\"2272\">Com solucionar l&#8217;error de connexi\u00f3<\/strong><br data-start=\"2272\" data-end=\"2275\" \/>En el meu cas, vaig col\u00b7locar el codi del widget, per\u00f2 no funcionava perqu\u00e8 em donava un error de connexi\u00f3. La ra\u00f3 era que la URL p\u00fablica generada per Ngrok era incorrecta. Havia de fer una petici\u00f3 a la ruta correcta del backend, que \u00e9s <code data-start=\"2515\" data-end=\"2522\">\/chat<\/code>, en lloc de simplement utilitzar l&#8217;URL p\u00fablica de Ngrok.<\/p><p data-start=\"2230\" data-end=\"2579\">4\ufe0f<strong data-start=\"2719\" data-end=\"2758\">Corregir el problema de la resposta<\/strong><br data-start=\"2758\" data-end=\"2761\" \/>A m\u00e9s, vaig adonar-me que l&#8217;objecte de resposta no era el mateix que s\u2019esperava. En el backend, estava retornant l\u2019objecte de la seg\u00fcent manera:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7892aa4 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"7892aa4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>return jsonify ({response:response})<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b8cc82d elementor-widget elementor-widget-text-editor\" data-id=\"b8cc82d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Per\u00f2 al frontend, estava intentant accedir a <code data-start=\"3021\" data-end=\"3035\">data.message<\/code>, quan hauria d&#8217;accedir a <code data-start=\"3061\" data-end=\"3076\">data.response<\/code>. Aix\u00ed que vaig modificar el codi del frontend de la seg\u00fcent manera:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9df7f8c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"9df7f8c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f4d7e49 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-child\" data-id=\"f4d7e49\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-73e200d elementor-widget elementor-widget-text-editor\" data-id=\"73e200d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Abans:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9422f79 elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"9422f79\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.message<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f93fd3d e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-child\" data-id=\"f93fd3d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f70c8d6 elementor-widget elementor-widget-text-editor\" data-id=\"f70c8d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Despr\u00e9s:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48ae20d elementor-widget elementor-widget-code-block-for-elementor\" data-id=\"48ae20d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-block-for-elementor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre class='line-numbers theme-okaidia' data-show-toolbar='yes'><code class='language-javascript'>document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.response<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f13d205 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-equal-height-no e-con e-parent\" data-id=\"f13d205\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-70f44e0 elementor-widget elementor-widget-text-editor\" data-id=\"70f44e0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Un cop modificat, torna a executar la cel\u00b7la on tens el backend i obtindr\u00e0s un nou enlla\u00e7 d\u2019Ngrok. Recorda afegir <code data-start=\"3559\" data-end=\"3566\">\/chat<\/code> al final d\u2019aquest enlla\u00e7. Finalment, el widget haur\u00e0 de funcionar correctament.<\/p><p>Ja tenim el nostre xatbot b\u00e0sic configurat al nostre WordPress.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c85e50 elementor-widget elementor-widget-image\" data-id=\"1c85e50\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"700\" height=\"126\" src=\"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_341-1024x185.png\" class=\"attachment-large size-large wp-image-6323\" alt=\"\" srcset=\"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_341-1024x185.png 1024w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_341-300x54.png 300w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_341-768x139.png 768w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_341-18x3.png 18w, https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_341.png 1184w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok Tornar al repte 1.6 He creat un widget frontend senzill utilitzant HTML i JavaScript, i ho he connectat a un servidor backend en Flask mitjan\u00e7ant Ngrok. Per a aix\u00f2, primer vaig configurar Ngrok amb un authtoken per a poder exposar el servidor local a internet i fer que el frontend pogu\u00e9s comunicar-se amb el backend de manera remota. Despr\u00e9s d&#8217;integrar el giny en la web, vaig solucionar alguns problemes comuns, com la configuraci\u00f3 incorrecta de la URL i el maneig de la resposta del servidor, assegurant-me que el frontend reb\u00e9s i mostr\u00e9s correctament les dades des del backend. Instal\u00b7laci\u00f3 de depend\u00e8ncies Primer, executa aquesta cel\u00b7la per instal\u00b7lar totes les depend\u00e8ncies necess\u00e0ries per al projecte. Aix\u00f2 inclou les llibreries de Flask i altres eines que necessites per configurar el servidor. !pip install google-genai # Alg1: Instal&middot;la la llibreria google-genai per interactuar amb el model GenAI !pip install beautifulsoup4 requests # Alg2: Instal&middot;la BeautifulSoup per web scraping i requests per fer peticions HTTP !pip install flask flask-ngrok # Alg3: Instal&middot;la Flask per crear el servidor web i Flask-ngrok per exposar el servidor !pip install flask pyngrok # Alg4: Instal&middot;la Flask per crear el servidor i pyngrok per crear t&uacute;nels amb Ngrok !pip install flask-cors # Alg5: Instal&middot;la Flask-CORS per gestionar CORS (peticions des de diferents or&iacute;gens) Iniciar el servidor Flask amb Ngrok A continuaci\u00f3, executa la cel\u00b7la que inicia el servidor Flask. Per\u00f2, vaig tenir un error relacionat amb Ngrok que deia que necessitava autenticaci\u00f3 amb un token, ja que estava utilitzant Ngrok sense un compte verificat. app = Flask(__name__) # Alg38: Crea una inst&agrave;ncia de l&#039;aplicaci&oacute; Flask CORS(app) # Alg39: Activa CORS per permetre peticions des de diferents or&iacute;gens ngrok.set_auth_token(&quot;2uTpEJU6jYqOIOXrL4NDYFpSu8R_4stuSzXJ3Bv64N5rr5auN&quot;) # Alg40: Configura el token d&#039;autenticaci&oacute; per a Ngrok # Iniciar Ngrok i exposar el servidor public_url = ngrok.connect(5000) # Alg41: Exposa l&#039;aplicaci&oacute; Flask a trav&eacute;s d&#039;Ngrok a la porta 5000 print(&quot;\ud83c\udf0d URL p&uacute;blica del backend:&quot;, public_url) # Alg42: Mostra la URL p&uacute;blica per accedir al servidor @app.route(&quot;\/chat&quot;, methods=[&quot;POST&quot;]) # Alg43: Defineix la ruta &#039;\/chat&#039; per a les peticions POST def chat_route():# Alg44: Funci&oacute; que gestiona la petici&oacute; del xat data = request.get_json() # Alg45: Obt&eacute; les dades JSON enviades pel frontend message = data.get(&quot;message&quot;, &quot;&quot;) # Alg46: Extreu el missatge del JSON try: response = chat.send_message(message) # Alg47: Envia el missatge al model GenAI return jsonify({&quot;response&quot;: response.text.strip()}) # Alg48: Retorna la resposta generada pel model except Exception as e: # Alg49: Captura errors durant la comunicaci&oacute; amb GenAI print(f&quot;\u26a0\ufe0f Error en la comunicaci&oacute; amb Gemini: {e}&quot;) # Alg50: Mostra el missatge d&#039;error return jsonify({&quot;response&quot;: &quot;S&#039;ha produ&iuml;t un error. Torna-ho a intentar m&eacute;s tard.&quot;}) # Alg51: Resposta d&#039;error al frontend if __name__ == &quot;__main__&quot;: # Alg52: Condici&oacute; per a executar el servidor si el script es llanci directament print(&quot;\ud83d\udd25 Servidor en funcionament! Usa aquesta URL en el teu frontend:&quot;) # Alg53: Mostra un missatge indicant que el servidor est&agrave; actiu app.run(port=5000) # Alg54: Inicia el servidor Flask a la porta 5000 Vaig tenir un error de Ngrok. Per resoldre aix\u00f2, necessitaba obtenir un Ngrok authtoken i configurar-lo a Google Colab: 1\ufe0fCrea un compte gratu\u00eft a NgrokVisita https:\/\/dashboard.ngrok.com\/signup 2\ufe0fObtenir el teu Ngrok authtokenUn cop creat el compte, visita aquesta p\u00e0gina per obtenir el teu authtoken. Copia\u2019l. 3\ufe0fConfigurar el teu Ngrok authtoken a Google ColabUn cop obtingut el teu authtoken, executa la seg\u00fcent cel\u00b7la a Google Colab amb el teu authtoken per configurar Ngrok correctament. Un cop configurat, podr\u00e0s tornar a executar la cel\u00b7la per obrir Ngrok i obtenir l\u2019URL p\u00fablica per accedir al servidor. Cada vegada que executis la cel\u00b7la, l\u2019URL generat canviar\u00e0, aix\u00ed que recorda actualitzar-lo al teu WordPres Ara conectarem el fontend amb el backend. Ara que\u00a0 el servidor Flask est\u00e1 funcionant, em &#8216; integrar el frontend amb el backend. Aqu\u00ed \u00e9s on vaig trobar un petit error: 1\ufe0f Obtenir el frontendDemana a ChatGPT que et proporcioni el codi del frontend (HTML\/JavaScript) per crear el widget que vols integrar al teu lloc web. 2\ufe0fAfegir el codi HTML al teu WordPressUn cop tinguis el codi del widget, copia\u2019l i afegeix-lo a la teva p\u00e0gina de WordPress.\u00a0 Si fas click aqu\u00ed trobar\u00e1s una p\u00e0gina on explico com insertar un widget html i com utilitzar-ho. 3\ufe0f Com solucionar l&#8217;error de connexi\u00f3En el meu cas, vaig col\u00b7locar el codi del widget, per\u00f2 no funcionava perqu\u00e8 em donava un error de connexi\u00f3. La ra\u00f3 era que la URL p\u00fablica generada per Ngrok era incorrecta. Havia de fer una petici\u00f3 a la ruta correcta del backend, que \u00e9s \/chat, en lloc de simplement utilitzar l&#8217;URL p\u00fablica de Ngrok. 4\ufe0fCorregir el problema de la respostaA m\u00e9s, vaig adonar-me que l&#8217;objecte de resposta no era el mateix que s\u2019esperava. En el backend, estava retornant l\u2019objecte de la seg\u00fcent manera: return jsonify ({response:response}) Per\u00f2 al frontend, estava intentant accedir a data.message, quan hauria d&#8217;accedir a data.response. Aix\u00ed que vaig modificar el codi del frontend de la seg\u00fcent manera: Abans: document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.message Despr\u00e9s: document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.response Un cop modificat, torna a executar la cel\u00b7la on tens el backend i obtindr\u00e0s un nou enlla\u00e7 d\u2019Ngrok. Recorda afegir \/chat al final d\u2019aquest enlla\u00e7. Finalment, el widget haur\u00e0 de funcionar correctament. Ja tenim el nostre xatbot b\u00e0sic configurat al nostre WordPress.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[95,84],"tags":[],"class_list":["post-6311","post","type-post","status-publish","format-standard","hentry","category-repte-1-6","category-disseny-i-aplicacio-de-la-ia"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok - Ana Borrego Toledo<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok - Ana Borrego Toledo\" \/>\n<meta property=\"og:description\" content=\"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok Tornar al repte 1.6 He creat un widget frontend senzill utilitzant HTML i JavaScript, i ho he connectat a un servidor backend en Flask mitjan\u00e7ant Ngrok. Per a aix\u00f2, primer vaig configurar Ngrok amb un authtoken per a poder exposar el servidor local a internet i fer que el frontend pogu\u00e9s comunicar-se amb el backend de manera remota. Despr\u00e9s d&#8217;integrar el giny en la web, vaig solucionar alguns problemes comuns, com la configuraci\u00f3 incorrecta de la URL i el maneig de la resposta del servidor, assegurant-me que el frontend reb\u00e9s i mostr\u00e9s correctament les dades des del backend. Instal\u00b7laci\u00f3 de depend\u00e8ncies Primer, executa aquesta cel\u00b7la per instal\u00b7lar totes les depend\u00e8ncies necess\u00e0ries per al projecte. Aix\u00f2 inclou les llibreries de Flask i altres eines que necessites per configurar el servidor. !pip install google-genai # Alg1: Instal&middot;la la llibreria google-genai per interactuar amb el model GenAI !pip install beautifulsoup4 requests # Alg2: Instal&middot;la BeautifulSoup per web scraping i requests per fer peticions HTTP !pip install flask flask-ngrok # Alg3: Instal&middot;la Flask per crear el servidor web i Flask-ngrok per exposar el servidor !pip install flask pyngrok # Alg4: Instal&middot;la Flask per crear el servidor i pyngrok per crear t&uacute;nels amb Ngrok !pip install flask-cors # Alg5: Instal&middot;la Flask-CORS per gestionar CORS (peticions des de diferents or&iacute;gens) Iniciar el servidor Flask amb Ngrok A continuaci\u00f3, executa la cel\u00b7la que inicia el servidor Flask. Per\u00f2, vaig tenir un error relacionat amb Ngrok que deia que necessitava autenticaci\u00f3 amb un token, ja que estava utilitzant Ngrok sense un compte verificat. app = Flask(__name__) # Alg38: Crea una inst&agrave;ncia de l&#039;aplicaci&oacute; Flask CORS(app) # Alg39: Activa CORS per permetre peticions des de diferents or&iacute;gens ngrok.set_auth_token(&quot;2uTpEJU6jYqOIOXrL4NDYFpSu8R_4stuSzXJ3Bv64N5rr5auN&quot;) # Alg40: Configura el token d&#039;autenticaci&oacute; per a Ngrok # Iniciar Ngrok i exposar el servidor public_url = ngrok.connect(5000) # Alg41: Exposa l&#039;aplicaci&oacute; Flask a trav&eacute;s d&#039;Ngrok a la porta 5000 print(&quot;\ud83c\udf0d URL p&uacute;blica del backend:&quot;, public_url) # Alg42: Mostra la URL p&uacute;blica per accedir al servidor @app.route(&quot;\/chat&quot;, methods=[&quot;POST&quot;]) # Alg43: Defineix la ruta &#039;\/chat&#039; per a les peticions POST def chat_route():# Alg44: Funci&oacute; que gestiona la petici&oacute; del xat data = request.get_json() # Alg45: Obt&eacute; les dades JSON enviades pel frontend message = data.get(&quot;message&quot;, &quot;&quot;) # Alg46: Extreu el missatge del JSON try: response = chat.send_message(message) # Alg47: Envia el missatge al model GenAI return jsonify({&quot;response&quot;: response.text.strip()}) # Alg48: Retorna la resposta generada pel model except Exception as e: # Alg49: Captura errors durant la comunicaci&oacute; amb GenAI print(f&quot;\u26a0\ufe0f Error en la comunicaci&oacute; amb Gemini: {e}&quot;) # Alg50: Mostra el missatge d&#039;error return jsonify({&quot;response&quot;: &quot;S&#039;ha produ&iuml;t un error. Torna-ho a intentar m&eacute;s tard.&quot;}) # Alg51: Resposta d&#039;error al frontend if __name__ == &quot;__main__&quot;: # Alg52: Condici&oacute; per a executar el servidor si el script es llanci directament print(&quot;\ud83d\udd25 Servidor en funcionament! Usa aquesta URL en el teu frontend:&quot;) # Alg53: Mostra un missatge indicant que el servidor est&agrave; actiu app.run(port=5000) # Alg54: Inicia el servidor Flask a la porta 5000 Vaig tenir un error de Ngrok. Per resoldre aix\u00f2, necessitaba obtenir un Ngrok authtoken i configurar-lo a Google Colab: 1\ufe0fCrea un compte gratu\u00eft a NgrokVisita https:\/\/dashboard.ngrok.com\/signup 2\ufe0fObtenir el teu Ngrok authtokenUn cop creat el compte, visita aquesta p\u00e0gina per obtenir el teu authtoken. Copia\u2019l. 3\ufe0fConfigurar el teu Ngrok authtoken a Google ColabUn cop obtingut el teu authtoken, executa la seg\u00fcent cel\u00b7la a Google Colab amb el teu authtoken per configurar Ngrok correctament. Un cop configurat, podr\u00e0s tornar a executar la cel\u00b7la per obrir Ngrok i obtenir l\u2019URL p\u00fablica per accedir al servidor. Cada vegada que executis la cel\u00b7la, l\u2019URL generat canviar\u00e0, aix\u00ed que recorda actualitzar-lo al teu WordPres Ara conectarem el fontend amb el backend. Ara que\u00a0 el servidor Flask est\u00e1 funcionant, em &#8216; integrar el frontend amb el backend. Aqu\u00ed \u00e9s on vaig trobar un petit error: 1\ufe0f Obtenir el frontendDemana a ChatGPT que et proporcioni el codi del frontend (HTML\/JavaScript) per crear el widget que vols integrar al teu lloc web. 2\ufe0fAfegir el codi HTML al teu WordPressUn cop tinguis el codi del widget, copia\u2019l i afegeix-lo a la teva p\u00e0gina de WordPress.\u00a0 Si fas click aqu\u00ed trobar\u00e1s una p\u00e0gina on explico com insertar un widget html i com utilitzar-ho. 3\ufe0f Com solucionar l&#8217;error de connexi\u00f3En el meu cas, vaig col\u00b7locar el codi del widget, per\u00f2 no funcionava perqu\u00e8 em donava un error de connexi\u00f3. La ra\u00f3 era que la URL p\u00fablica generada per Ngrok era incorrecta. Havia de fer una petici\u00f3 a la ruta correcta del backend, que \u00e9s \/chat, en lloc de simplement utilitzar l&#8217;URL p\u00fablica de Ngrok. 4\ufe0fCorregir el problema de la respostaA m\u00e9s, vaig adonar-me que l&#8217;objecte de resposta no era el mateix que s\u2019esperava. En el backend, estava retornant l\u2019objecte de la seg\u00fcent manera: return jsonify ({response:response}) Per\u00f2 al frontend, estava intentant accedir a data.message, quan hauria d&#8217;accedir a data.response. Aix\u00ed que vaig modificar el codi del frontend de la seg\u00fcent manera: Abans: document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.message Despr\u00e9s: document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.response Un cop modificat, torna a executar la cel\u00b7la on tens el backend i obtindr\u00e0s un nou enlla\u00e7 d\u2019Ngrok. Recorda afegir \/chat al final d\u2019aquest enlla\u00e7. Finalment, el widget haur\u00e0 de funcionar correctament. Ja tenim el nostre xatbot b\u00e0sic configurat al nostre WordPress.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aborrego.inscastellbisbal.net\/en\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/\" \/>\n<meta property=\"og:site_name\" content=\"Ana Borrego Toledo\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-20T10:22:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-25T12:25:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png\" \/>\n\t<meta property=\"og:image:width\" content=\"990\" \/>\n\t<meta property=\"og:image:height\" content=\"84\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"aborrego\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"aborrego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/\"},\"author\":{\"name\":\"aborrego\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#\\\/schema\\\/person\\\/596b5d3dc4735c43cfaafed47741b9d1\"},\"headline\":\"Crear un frontend tipus widget senzill amb HTML\\\/JavaScript i el connecta amb el backend amb ngrok\",\"datePublished\":\"2025-03-20T10:22:47+00:00\",\"dateModified\":\"2025-03-25T12:25:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/\"},\"wordCount\":614,\"publisher\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Selection_309.png\",\"articleSection\":[\"Repte 1.6\",\"\ud83e\udd16- Disseny i aplicaci\u00f3 de la IA\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/\",\"url\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/\",\"name\":\"Crear un frontend tipus widget senzill amb HTML\\\/JavaScript i el connecta amb el backend amb ngrok - Ana Borrego Toledo\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Selection_309.png\",\"datePublished\":\"2025-03-20T10:22:47+00:00\",\"dateModified\":\"2025-03-25T12:25:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#primaryimage\",\"url\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Selection_309.png\",\"contentUrl\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Selection_309.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/2025\\\/03\\\/20\\\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Crear un frontend tipus widget senzill amb HTML\\\/JavaScript i el connecta amb el backend amb ngrok\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#website\",\"url\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/\",\"name\":\"Ana Borrego Toledo\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#organization\",\"name\":\"Ana Borrego Toledo\",\"url\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/cropped-Selection_255.png\",\"contentUrl\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/cropped-Selection_255.png\",\"width\":549,\"height\":328,\"caption\":\"Ana Borrego Toledo\"},\"image\":{\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/#\\\/schema\\\/person\\\/596b5d3dc4735c43cfaafed47741b9d1\",\"name\":\"aborrego\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e158785622f9364a28d322a7a8711e2ea34ebb67263b57ff915d7b49cb3cf0d1?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e158785622f9364a28d322a7a8711e2ea34ebb67263b57ff915d7b49cb3cf0d1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e158785622f9364a28d322a7a8711e2ea34ebb67263b57ff915d7b49cb3cf0d1?s=96&d=mm&r=g\",\"caption\":\"aborrego\"},\"sameAs\":[\"https:\\\/\\\/aborrego.inscastellbisbal.net\",\"https:\\\/\\\/www.instagram.com\\\/anaaaa.aaaaaaaaaaaaaaaaaaaaa?igsh=MWVqcmx5MXl5eGdxaw==\"],\"url\":\"https:\\\/\\\/aborrego.inscastellbisbal.net\\\/en\\\/author\\\/aborrego\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok - Ana Borrego Toledo","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok - Ana Borrego Toledo","og_description":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok Tornar al repte 1.6 He creat un widget frontend senzill utilitzant HTML i JavaScript, i ho he connectat a un servidor backend en Flask mitjan\u00e7ant Ngrok. Per a aix\u00f2, primer vaig configurar Ngrok amb un authtoken per a poder exposar el servidor local a internet i fer que el frontend pogu\u00e9s comunicar-se amb el backend de manera remota. Despr\u00e9s d&#8217;integrar el giny en la web, vaig solucionar alguns problemes comuns, com la configuraci\u00f3 incorrecta de la URL i el maneig de la resposta del servidor, assegurant-me que el frontend reb\u00e9s i mostr\u00e9s correctament les dades des del backend. Instal\u00b7laci\u00f3 de depend\u00e8ncies Primer, executa aquesta cel\u00b7la per instal\u00b7lar totes les depend\u00e8ncies necess\u00e0ries per al projecte. Aix\u00f2 inclou les llibreries de Flask i altres eines que necessites per configurar el servidor. !pip install google-genai # Alg1: Instal&middot;la la llibreria google-genai per interactuar amb el model GenAI !pip install beautifulsoup4 requests # Alg2: Instal&middot;la BeautifulSoup per web scraping i requests per fer peticions HTTP !pip install flask flask-ngrok # Alg3: Instal&middot;la Flask per crear el servidor web i Flask-ngrok per exposar el servidor !pip install flask pyngrok # Alg4: Instal&middot;la Flask per crear el servidor i pyngrok per crear t&uacute;nels amb Ngrok !pip install flask-cors # Alg5: Instal&middot;la Flask-CORS per gestionar CORS (peticions des de diferents or&iacute;gens) Iniciar el servidor Flask amb Ngrok A continuaci\u00f3, executa la cel\u00b7la que inicia el servidor Flask. Per\u00f2, vaig tenir un error relacionat amb Ngrok que deia que necessitava autenticaci\u00f3 amb un token, ja que estava utilitzant Ngrok sense un compte verificat. app = Flask(__name__) # Alg38: Crea una inst&agrave;ncia de l&#039;aplicaci&oacute; Flask CORS(app) # Alg39: Activa CORS per permetre peticions des de diferents or&iacute;gens ngrok.set_auth_token(&quot;2uTpEJU6jYqOIOXrL4NDYFpSu8R_4stuSzXJ3Bv64N5rr5auN&quot;) # Alg40: Configura el token d&#039;autenticaci&oacute; per a Ngrok # Iniciar Ngrok i exposar el servidor public_url = ngrok.connect(5000) # Alg41: Exposa l&#039;aplicaci&oacute; Flask a trav&eacute;s d&#039;Ngrok a la porta 5000 print(&quot;\ud83c\udf0d URL p&uacute;blica del backend:&quot;, public_url) # Alg42: Mostra la URL p&uacute;blica per accedir al servidor @app.route(&quot;\/chat&quot;, methods=[&quot;POST&quot;]) # Alg43: Defineix la ruta &#039;\/chat&#039; per a les peticions POST def chat_route():# Alg44: Funci&oacute; que gestiona la petici&oacute; del xat data = request.get_json() # Alg45: Obt&eacute; les dades JSON enviades pel frontend message = data.get(&quot;message&quot;, &quot;&quot;) # Alg46: Extreu el missatge del JSON try: response = chat.send_message(message) # Alg47: Envia el missatge al model GenAI return jsonify({&quot;response&quot;: response.text.strip()}) # Alg48: Retorna la resposta generada pel model except Exception as e: # Alg49: Captura errors durant la comunicaci&oacute; amb GenAI print(f&quot;\u26a0\ufe0f Error en la comunicaci&oacute; amb Gemini: {e}&quot;) # Alg50: Mostra el missatge d&#039;error return jsonify({&quot;response&quot;: &quot;S&#039;ha produ&iuml;t un error. Torna-ho a intentar m&eacute;s tard.&quot;}) # Alg51: Resposta d&#039;error al frontend if __name__ == &quot;__main__&quot;: # Alg52: Condici&oacute; per a executar el servidor si el script es llanci directament print(&quot;\ud83d\udd25 Servidor en funcionament! Usa aquesta URL en el teu frontend:&quot;) # Alg53: Mostra un missatge indicant que el servidor est&agrave; actiu app.run(port=5000) # Alg54: Inicia el servidor Flask a la porta 5000 Vaig tenir un error de Ngrok. Per resoldre aix\u00f2, necessitaba obtenir un Ngrok authtoken i configurar-lo a Google Colab: 1\ufe0fCrea un compte gratu\u00eft a NgrokVisita https:\/\/dashboard.ngrok.com\/signup 2\ufe0fObtenir el teu Ngrok authtokenUn cop creat el compte, visita aquesta p\u00e0gina per obtenir el teu authtoken. Copia\u2019l. 3\ufe0fConfigurar el teu Ngrok authtoken a Google ColabUn cop obtingut el teu authtoken, executa la seg\u00fcent cel\u00b7la a Google Colab amb el teu authtoken per configurar Ngrok correctament. Un cop configurat, podr\u00e0s tornar a executar la cel\u00b7la per obrir Ngrok i obtenir l\u2019URL p\u00fablica per accedir al servidor. Cada vegada que executis la cel\u00b7la, l\u2019URL generat canviar\u00e0, aix\u00ed que recorda actualitzar-lo al teu WordPres Ara conectarem el fontend amb el backend. Ara que\u00a0 el servidor Flask est\u00e1 funcionant, em &#8216; integrar el frontend amb el backend. Aqu\u00ed \u00e9s on vaig trobar un petit error: 1\ufe0f Obtenir el frontendDemana a ChatGPT que et proporcioni el codi del frontend (HTML\/JavaScript) per crear el widget que vols integrar al teu lloc web. 2\ufe0fAfegir el codi HTML al teu WordPressUn cop tinguis el codi del widget, copia\u2019l i afegeix-lo a la teva p\u00e0gina de WordPress.\u00a0 Si fas click aqu\u00ed trobar\u00e1s una p\u00e0gina on explico com insertar un widget html i com utilitzar-ho. 3\ufe0f Com solucionar l&#8217;error de connexi\u00f3En el meu cas, vaig col\u00b7locar el codi del widget, per\u00f2 no funcionava perqu\u00e8 em donava un error de connexi\u00f3. La ra\u00f3 era que la URL p\u00fablica generada per Ngrok era incorrecta. Havia de fer una petici\u00f3 a la ruta correcta del backend, que \u00e9s \/chat, en lloc de simplement utilitzar l&#8217;URL p\u00fablica de Ngrok. 4\ufe0fCorregir el problema de la respostaA m\u00e9s, vaig adonar-me que l&#8217;objecte de resposta no era el mateix que s\u2019esperava. En el backend, estava retornant l\u2019objecte de la seg\u00fcent manera: return jsonify ({response:response}) Per\u00f2 al frontend, estava intentant accedir a data.message, quan hauria d&#8217;accedir a data.response. Aix\u00ed que vaig modificar el codi del frontend de la seg\u00fcent manera: Abans: document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.message Despr\u00e9s: document.getElementById(&#039;response&#039;).innerText = &#039;Resposta del servidor:&#039; + data.response Un cop modificat, torna a executar la cel\u00b7la on tens el backend i obtindr\u00e0s un nou enlla\u00e7 d\u2019Ngrok. Recorda afegir \/chat al final d\u2019aquest enlla\u00e7. Finalment, el widget haur\u00e0 de funcionar correctament. Ja tenim el nostre xatbot b\u00e0sic configurat al nostre WordPress.","og_url":"https:\/\/aborrego.inscastellbisbal.net\/en\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/","og_site_name":"Ana Borrego Toledo","article_published_time":"2025-03-20T10:22:47+00:00","article_modified_time":"2025-03-25T12:25:03+00:00","og_image":[{"width":990,"height":84,"url":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png","type":"image\/png"}],"author":"aborrego","twitter_card":"summary_large_image","twitter_misc":{"Written by":"aborrego","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#article","isPartOf":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/"},"author":{"name":"aborrego","@id":"https:\/\/aborrego.inscastellbisbal.net\/#\/schema\/person\/596b5d3dc4735c43cfaafed47741b9d1"},"headline":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok","datePublished":"2025-03-20T10:22:47+00:00","dateModified":"2025-03-25T12:25:03+00:00","mainEntityOfPage":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/"},"wordCount":614,"publisher":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/#organization"},"image":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#primaryimage"},"thumbnailUrl":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png","articleSection":["Repte 1.6","\ud83e\udd16- Disseny i aplicaci\u00f3 de la IA"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/","url":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/","name":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok - Ana Borrego Toledo","isPartOf":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#primaryimage"},"image":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#primaryimage"},"thumbnailUrl":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png","datePublished":"2025-03-20T10:22:47+00:00","dateModified":"2025-03-25T12:25:03+00:00","breadcrumb":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#primaryimage","url":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png","contentUrl":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/Selection_309.png"},{"@type":"BreadcrumbList","@id":"https:\/\/aborrego.inscastellbisbal.net\/2025\/03\/20\/crear-un-frontend-tipus-widget-senzill-amb-html-javascript-i-el-connecta-amb-el-backend-amb-ngrok\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/aborrego.inscastellbisbal.net\/"},{"@type":"ListItem","position":2,"name":"Crear un frontend tipus widget senzill amb HTML\/JavaScript i el connecta amb el backend amb ngrok"}]},{"@type":"WebSite","@id":"https:\/\/aborrego.inscastellbisbal.net\/#website","url":"https:\/\/aborrego.inscastellbisbal.net\/","name":"Ana Borrego Toledo","description":"","publisher":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/aborrego.inscastellbisbal.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/aborrego.inscastellbisbal.net\/#organization","name":"Ana Borrego Toledo","url":"https:\/\/aborrego.inscastellbisbal.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/aborrego.inscastellbisbal.net\/#\/schema\/logo\/image\/","url":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/cropped-Selection_255.png","contentUrl":"https:\/\/aborrego.inscastellbisbal.net\/wp-content\/uploads\/2025\/03\/cropped-Selection_255.png","width":549,"height":328,"caption":"Ana Borrego Toledo"},"image":{"@id":"https:\/\/aborrego.inscastellbisbal.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/aborrego.inscastellbisbal.net\/#\/schema\/person\/596b5d3dc4735c43cfaafed47741b9d1","name":"aborrego","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e158785622f9364a28d322a7a8711e2ea34ebb67263b57ff915d7b49cb3cf0d1?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e158785622f9364a28d322a7a8711e2ea34ebb67263b57ff915d7b49cb3cf0d1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e158785622f9364a28d322a7a8711e2ea34ebb67263b57ff915d7b49cb3cf0d1?s=96&d=mm&r=g","caption":"aborrego"},"sameAs":["https:\/\/aborrego.inscastellbisbal.net","https:\/\/www.instagram.com\/anaaaa.aaaaaaaaaaaaaaaaaaaaa?igsh=MWVqcmx5MXl5eGdxaw=="],"url":"https:\/\/aborrego.inscastellbisbal.net\/en\/author\/aborrego\/"}]}},"_links":{"self":[{"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/posts\/6311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/comments?post=6311"}],"version-history":[{"count":7,"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/posts\/6311\/revisions"}],"predecessor-version":[{"id":6480,"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/posts\/6311\/revisions\/6480"}],"wp:attachment":[{"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/media?parent=6311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/categories?post=6311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aborrego.inscastellbisbal.net\/en\/wp-json\/wp\/v2\/tags?post=6311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}