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.
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.
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).
| Producto | Cant. | Total |
|---|---|---|
| Pizza margarita | 1 | $ 22.000 |
| Gaseosa 400 ml | 2 | $ 9.000 |
| Helado | 1 | $ 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.
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?
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 caminoLlega 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
| Producto | Vendidos |
|---|---|
| Pizza margarita | 41 |
| Lomo saltado | 27 |
| Helado | 19 |
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.