All posts
Cómo añadir un widget de feedback a Next.js, React y Vue (paso a paso)
·6 min

Cómo añadir un widget de feedback a Next.js, React y Vue (paso a paso)

Una guía práctica y específica por framework para añadir un widget de feedback de clientes a tu aplicación Next.js, React o Vue en menos de 2 minutos.

Alexis Bouchez

Añadir un widget de feedback a tu aplicación web debería llevar minutos, no horas. Esta guía cubre los pasos exactos para Next.js, React y Vue — con fragmentos de código que puedes copiar y pegar.

Antes de empezar

Necesitarás una cuenta de Palmframe y un proyecto. Regístrate en palmframe.com, crea un proyecto y copia tu ID de proyecto. Esa es toda la configuración necesaria.

Next.js (App Router)

Next.js con el App Router requiere un componente cliente para web components. Crea un wrapper sencillo:

// components/feedback-widget.tsx
'use client'

import 'https://cdn.palmframe.com/embed.js'

export default function FeedbackWidget() {
  return <palmframe-widget project="tu-id-de-proyecto" />
}

O sáltate el paquete npm por completo y usa el enfoque de etiqueta de script en tu layout raíz:

// app/layout.tsx
export default function RootLayout({ children }) {
  return (
    <html>
      <head>
        <script src="https://cdn.palmframe.com/embed.js" async />
      </head>
      <body>
        {children}
        <palmframe-widget project="tu-id-de-proyecto" />
      </body>
    </html>
  )
}

El enfoque con etiqueta de script es más sencillo y funciona sin ningún wrapper de componente cliente. El widget se carga de forma asíncrona, así que no bloqueará el renderizado de tu página.

Next.js Pages Router

Para el Pages Router, añade el script y el widget a _app.tsx:

// pages/_app.tsx
import Script from 'next/script'

export default function App({ Component, pageProps }) {
  return (
    <>
      <Script src="https://cdn.palmframe.com/embed.js" strategy="afterInteractive" />
      <Component {...pageProps} />
      <palmframe-widget project="tu-id-de-proyecto" />
    </>
  )
}

React (Vite, Create React App)

Para una aplicación React estándar, añade la etiqueta de script a tu index.html y el widget a tu componente App:

<!-- index.html -->
<script src="https://cdn.palmframe.com/embed.js" async></script>
// App.tsx
export default function App() {
  return (
    <div>
      {/* El contenido de tu app */}
      <palmframe-widget project="tu-id-de-proyecto" />
    </div>
  )
}

Eso es todo. El widget es un web component estándar — funciona en cualquier aplicación React sin dependencias ni configuración adicional.

Vue 3

Vue 3 funciona de la misma manera. Añade el script a tu index.html y usa el widget en tu componente App:

<!-- index.html -->
<script src="https://cdn.palmframe.com/embed.js" async></script>
<!-- App.vue -->
<template>
  <div>
    <!-- El contenido de tu app -->
    <palmframe-widget project="tu-id-de-proyecto" />
  </div>
</template>

Si Vue muestra una advertencia sobre un elemento personalizado desconocido, añade el widget a tu configuración de Vite:

// vite.config.ts
import vue from '@vitejs/plugin-vue'

export default {
  plugins: [
    vue({
      template: {
        compilerOptions: {
          isCustomElement: (tag) => tag === 'palmframe-widget',
        },
      },
    }),
  ],
}

Nuxt 3

Para Nuxt 3, crea un plugin de cliente y añade el widget al layout de tu aplicación:

// plugins/palmframe.client.ts
export default defineNuxtPlugin(() => {
  if (typeof window !== 'undefined') {
    const script = document.createElement('script')
    script.src = 'https://cdn.palmframe.com/embed.js'
    script.async = true
    document.head.appendChild(script)
  }
})
<!-- app.vue -->
<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
  <palmframe-widget project="tu-id-de-proyecto" />
</template>

Svelte / SvelteKit

Para SvelteKit, añade el widget a tu layout raíz:

<!-- src/routes/+layout.svelte -->
<svelte:head>
  <script src="https://cdn.palmframe.com/embed.js" async></script>
</svelte:head>

<slot />
<palmframe-widget project="tu-id-de-proyecto" />

HTML puro

El caso más sencillo — solo dos líneas antes de :

<script src="https://cdn.palmframe.com/embed.js"></script>
<palmframe-widget project="tu-id-de-proyecto" />

Configuración del widget

El widget soporta varios atributos para personalización:

  • project — tu ID o nombre de proyecto (obligatorio)
  • position — posición del widget: bottom-right, bottom-left, top-right o top-left
  • lang — idioma: en o fr
  • mode — establécelo en test durante el desarrollo para no contaminar los datos de producción

Ejemplo con todas las opciones:

<palmframe-widget
  project="tu-id-de-proyecto"
  position="bottom-left"
  lang="fr"
  mode="test"
/>

Probando tu integración

Después de añadir el widget:

  1. Abre tu sitio en el navegador
  2. Busca el botón de feedback (abajo a la derecha por defecto)
  3. Haz clic en él, envía un feedback de prueba
  4. Revisa tu panel de control de Palmframe — el feedback debería aparecer en segundos

Si usas mode="test", el feedback se marcará como datos de prueba en tu panel de control para que puedas filtrarlo después.

Problemas comunes

El widget no aparece: Revisa la consola del navegador en busca de errores. La causa más común es un ID de proyecto incorrecto. Asegúrate de que estás usando el nombre o ID de proyecto de tu panel de control de Palmframe.

El widget aparece pero el feedback no se envía: Verifica que tu proyecto existe y no ha sido eliminado. El feedback en modo de prueba funciona igual que en producción — solo recibe una etiqueta de prueba.

Conflictos de estilo: El widget usa Shadow DOM, así que el CSS de tu sitio no le afectará. Si ves problemas de diseño, asegúrate de que nada en tu página esté estableciendo un z-index global superior a 10000.

Conclusión

Añadir un widget de feedback a cualquier framework web moderno lleva menos de 2 minutos. Copia el fragmento para tu framework, reemplaza el ID de proyecto, y estarás recopilando feedback.

Want to start collecting feedback? Try Palmframe for free — takes 2 minutes to set up.