📆 Bot de Reservas en

Опубликовано: 28 Февраль 2026
на канале: Joss López
1,676
64

En este video te muestro paso a paso cómo construir un bot con Botpress y conectarlo a una base de datos en Airtable. Esta guía está diseñada para que puedas seguirla sin perderte, explicando cada detalle de la integración para que tu bot gestione reservas como un profesional.

🚀 ¿Aún no usas Botpress? Pruébalo aquí 👉 https://try.botpress.com/7cvbzec83wap

Comenzamos configurando Botpress, una plataforma de código abierto para crear chatbots de forma sencilla y escalable. Luego, te enseño cómo vincular este bot con Airtable, que nos ayudará a organizar y almacenar las reservas de forma estructurada y visual. Este flujo te permitirá manejar todos los datos de tus reservas desde un mismo lugar, ideal para emprendedores y pequeños negocios.

Veremos cómo:

Configurar un flujo de conversación en Botpress.
Crear una tabla en Airtable específicamente para reservas.
Hacer la integración para que ambos sistemas trabajen juntos sin problemas.
La idea es que al final de este tutorial tengas un bot funcional, sin complicaciones y con todas las configuraciones necesarias para empezar a usarlo en cualquier negocio. Además, compartiré algunos tips de personalización para que el bot refleje tu estilo y ofrezca una experiencia única a tus usuarios.

___________________

#JossLópez, #Botpress, #Airtable, #BotDeReservas

Antes de irte, no olvides visitar mi sitio web : www.jossslopez.com.

🔝🔝🔝🔝Apóyame en Patreon:   / jossslopez  

☕☕☕☕☕O invítame a un café en: https://ko-fi.com/jossslopez

Además, sígueme en Instagram y LinkedIn para estar al día con las últimas tendencias en diseño e inteligencia artificial. ¡Nos vemos en la red! 🌐

📸 Instagram:   / josslopezdesign  
🔗 LinkedIn:   / jossslopez  
📱Threads: https://www.threads.net/@josslopezdesign ​

___________________

Códigos usados:

EXECUTE CARD 1 - FECHA ACTUAL
const fechaHoraLocal = new Date().toLocaleString();
console.log(fechaHoraLocal); // Muestra fecha y hora en el formato local, por ejemplo, "28/10/2024, 15:47:35"

EXECUTE CARD 2 - FORMATO FECHA
const date = new Date(workflow.fechaUser);
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0'); // Los meses van de 0 a 11
const year = date.getFullYear();

const formattedDate = `${day}/${month}/${year}`;
workflow.Fecha = formattedDate;

EXECUTE CARD 3 - DÍAS QUE NO
const fecha = workflow.Fecha; // Usa la fecha formateada en dd/mm/yyyy
// Dividir la fecha en día, mes y año
if (typeof fecha === 'string') {
const [day, month, year] = fecha.split('/');
const fechaObj = new Date(`${year}-${month}-${day}`);

// Obtener el día de la semana (0 = domingo, 1 = lunes, ..., 6 = sábado)
const diaSemana = fechaObj.getDay();

// Almacenar si es fin de semana en workflow.esFinDeSemana
workflow.esFinDeSemana = (diaSemana === 0 || diaSemana === 6);
} else {
console.error('Error: Fecha no está en el formato esperado');
}

EXECUTE CARD 4 - VERIFICAR HORA AIRTABLE
const AIRTABLE_PAT = env.AIRTABLE_PAT;
const BASE_ID = env.BASE_ID;
const TABLE_ID = env.TABLE_ID;

const fecha = workflow.Fecha; // Fecha formateada
const hora = workflow.horaUser;

const airtableURL = `https://api.airtable.com/v0/${BASE_ID}/${TABLE_ID}`;
const headers = {
'Authorization': `Bearer ${AIRTABLE_PAT}`,
'Content-Type': 'application/json'
};

// Construir la URL de la consulta con el filtro
const filterFormula = `AND({Fecha} = "${fecha}", {Hora} = "${hora}")`;
const checkAvailabilityURL = `${airtableURL}?filterByFormula=${encodeURIComponent(filterFormula)}`;

try {
const checkResponse = await axios.get(checkAvailabilityURL, { headers });
const existingRecords = checkResponse.data.records;

// Almacena los registros encontrados en un array en lugar de un booleano
workflow.verificarHora = existingRecords;
} catch (error) {
console.error('Error al verificar disponibilidad en Airtable:', error);
}

EXECUTE CARD 5 - GUARDAR DATOS EN AIRTABLE

const AIRTABLE_PAT = env.AIRTABLE_PAT;
const BASE_ID = env.BASE_ID;
const TABLE_ID = env.TABLE_ID;

const fecha = workflow.Fecha
const hora = workflow.horaUser;
const nombre = workflow.nombre;
const email = workflow.email;
const personas = workflow.personas;

const airtableURL = `https://api.airtable.com/v0/${BASE_ID}/${TABLE_ID}`;
const headers = {
'Authorization': `Bearer ${AIRTABLE_PAT}`,
'Content-Type': 'application/json'
};

const data = {
"fields": {
"Nombre": nombre,
"Email": email,
"Comensales": personas,
"Fecha": fecha,
"Hora": hora
}
};

try {
const saveResponse = await axios.post(airtableURL, data, { headers });
console.log('Datos guardados en Airtable:', saveResponse.data);
} catch (error) {
console.error('Error al guardar datos en Airtable:', error);
}