HuwiDevelopers

Componentes

Galería de los componentes que un bot puede mandar en un chat, con su JSON y una vista previa en vivo dibujada igual que en Huwi.

Un bot no manda HTML ni código: manda datos. Un mensaje con components lleva un objeto { "v": 1, "body": [...] } y Huwi lo dibuja. Así los mensajes se ven bien en el celular, en la web y en el modo oscuro, y nadie puede meter scripts en un chat.

{ "v": 1, "body": [ { "type": "text", "text": "Hola" } ] }

Se manda con message.send en el campo components. El mensaje queda de tipo interactive.

Vista previa en vivo

Los dibujos de abajo son una copia del dibujo de Huwi: tócalos. Al tocar un botón verás la novedad action que recibiría tu bot. Cada JSON de esta página se probó contra la API real.

Las piezas

Estos son los tipos que acepta el servidor: stack, section, divider, text, image, card, keyValue, stats, progress, badge, countdown, list, table, chart, huwiEmbed, form, actions.

Cada pieza lleva type y solo los campos que usa. Las que contienen otras (stack, section, card, list) las llevan en items.

text

Un párrafo. Respeta los saltos de línea. Hasta 2000 caracteres.

Hola, soy el bot de pedidos de Café Aurora. Escribe /pedido para ver el estado del tuyo.

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

card

Un recuadro con title, subtitle y text. También puede llevar piezas dentro con items.

Pedido #1042

Café Aurora · En camino

Sale del local a las 3:10 p. m.

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

section, stack y list

Agrupan otras piezas en un recuadro. section y list suelen llevar title. Hasta 40 piezas dentro.

Entrega

Calle 10 # 5-20

Repartidor
Camilo
Llega
3:40 p. m.
En camino

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

Tu pedido

1 × Pizza margarita

2 × Gaseosa 400 ml

1 × Helado de vainilla

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

keyValue

Pares de etiqueta y valor, en dos columnas. Hasta 30 filas en rows.

Pedido
#1042
Total
$ 38.500
Pago
Tarjeta
Entrega
Hoy, 3:40 p. m.

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

stats

Cifras destacadas. Hasta 8 en stats, con label (40) y value (40).

Pedidos hoy
128
Entregados
117
Demora
24 min

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

progress

Una barra de 0 a 1 en progress, con un label opcional. tone puede ser neutral, good, warn o bad.

Tu pedido va en camino

60 %

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

badge

Una etiqueta corta, con label y tone.

En camino

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

countdown

Un texto con una cuenta regresiva (until, una fecha ISO). Hoy la app muestra el text.

La oferta termina en 2 h

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

table

Una tabla con columns (hasta 6) y cells (hasta 50 filas).

ProductoCant.Total
Pizza margarita1$ 22.000
Gaseosa 400 ml2$ 9.000
Helado1$ 7.500

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

chart

Un gráfico con labels y hasta 6 series de hasta 24 valores. El servidor acepta chart igual a bar, stacked, line o donut.

Cómo se dibuja hoy

La app dibuja la primera serie como barras sin importar el valor de chart. Manda los demás tipos si quieres: ya son válidos, y se dibujarán cuando Huwi los soporte.

Pedidos de la semana

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

image

Una imagen con url y alt. Para usar un archivo tuyo, súbelo con upload.create y usa la url que devuelve (ver Publicar una foto).

upload.fromUrl

upload.fromUrl (que baja una imagen de una dirección https para usarla en un componente) hoy responde BAD_REQUEST blocked con la base de datos real. Sube el archivo tú con upload.create.

Foto del plato del día

Plato del día: lomo saltado.

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

divider

Una línea que separa.

Resumen del pedido


Total: $ 38.500

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

actions

Botones, hasta 8 por pieza y 20 en todo el mensaje. Cada uno lleva id (hasta 64), label (hasta 40), kind y, según el tipo, value. Tipos: callback, submit, reply, copy, link, checkout, open, pay.

¿Qué quieres hacer con tu pedido?

Ver en la webVer el perfil

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

Qué hace cada kind y cómo te llega el toque está en Conversaciones.

form

Campos y un botón de envío. Al enviar, tu bot recibe una novedad action con el id del submit y los valores en data: { "nombre": "Ana", "personas": "4" }.

El servidor acepta estos tipos de campo: text, number, stepper, slider, select, multi, toggle y mix (con min, max, step, scale, options y presets).

Cómo se dibuja hoy

La app dibuja todos los campos como cajas de texto. Usa text y valida lo que llegue en data.

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

huwiEmbed

Una publicación, perfil, sonido o hashtag de Huwi (embed.type: post, profile, sound o hashtag, con su id). El servidor lo acepta; hoy la app no lo dibuja todavía, así que no cuentes con él para información importante.

Ejemplos completos

Estado de un pedido

Pedido #1042

Café Aurora

En camino

Llega en 12 min

Total
$ 38.500
Entrega
3:40 p. m.

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

Un quiz

Pregunta 1 de 3

¿Cuál es la capital de Chile?

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

Un reporte

Resumen de hoy

Pedidos
128
Ventas
$ 4,9 M
ProductoVendidos
Pizza margarita41
Lomo saltado27
Helado19

Vista previa en vivo. Toca un botón para ver qué recibiría tu bot.

Límites de un componente

El contrato de Huwi es este:

  • Tamaño del JSON: 16 KB.
  • Piezas: 150 en total, con 6 niveles de profundidad como máximo.
  • Acciones: 20 en todo el mensaje.
  • Solo los tipos de pieza de arriba.

Al guardar una plantilla, el servidor los revisa y responde BAD_REQUEST con el motivo (components-size, components-nodes, components-depth, components-actions).

Hoy message.send no los revisa

Con la base de datos real, message.send acepta un componente aunque pase estos topes o lleve un tipo de pieza que no existe (la app simplemente no dibuja lo que no conoce). Respétalos igual: un componente que no los cumple puede dejar de aceptarse sin aviso cuando Huwi empiece a revisarlos.

Plantillas

bot.setTemplate guarda un componente con huecos {{variable}} y message.send acepta template: { name, vars } para rellenarlo.

Estado de las plantillas

Con la base de datos real, message.send con template todavía no rellena la plantilla: crea un mensaje vacío. Mientras tanto arma el JSON en tu código (una función que recibe los datos y devuelve el componente, como en los ejemplos de Ejemplos) y mándalo en components. bot.setTemplate, bot.templates y bot.deleteTemplate sí funcionan; el máximo es de 50 plantillas por bot.

En esta página