Mesas
Disponible desde 1.23.0. Las respuestas llevan Cache-Control: private, no-store. En modo coexistencia, las mesas aparecen desactivadas. Consulta también Mesas en la app y en wp-admin.
Rutas
| Método | Ruta | Permiso |
|---|---|---|
| GET | /tables/availability | Público |
| GET | /tables/resolve?token= | Público |
| GET | /tables/occupancy | Gestión |
| GET | /settings/tables | Gestión |
| PUT | /settings/tables | Gestión |
| POST | /tables/{id}/release | Gestión |
| POST | /tables/{id}/regenerate-qr | Gestión |
Disponibilidad pública
GET /tables/availability lista las mesas activas, sin datos de pedidos:
{
"success": true,
"data": {
"enabled": true, "available_count": 1, "total_count": 2,
"tables": [
{ "id": "t1", "label": "Mesa 1", "zone": "Terraza", "capacity": 4, "active": true, "status": "available", "selectable": true },
{ "id": "t2", "label": "Mesa 2", "zone": "Salón", "capacity": 2, "active": true, "status": "occupied", "selectable": false }
]
}
}
selectable es true si la mesa está libre o si la ocupa el mismo cliente (su sesión o su cuenta).
GET /tables/resolve?token=<token-del-QR> devuelve la mesa de un código QR. Si el token no existe, responde 404 table_not_found.
Ocupación
GET /tables/occupancy es la vista del personal: todas las mesas, cada una con sus pedidos activos orders[{ id, status, total, currency, created_at }].
Una mesa está ocupada mientras tenga pedidos pendientes, en espera, aceptados, en proceso o completados. Los borradores de checkout la ocupan durante 5 minutos. Los pedidos finalizados, cancelados, reembolsados o fallidos la liberan.
Liberar una mesa
POST /tables/{id}/release libera todos los pedidos activos de la mesa, añade una nota a cada uno y devuelve la ocupación actualizada. Errores: 404 table_not_found, 409 table_busy.
Ajustes y QR
GET /settings/tables:
{
"enabled": true,
"selection": "qr_or_list",
"require_table": false,
"allow_in_cart": true,
"show_availability": true,
"hide_occupied": false,
"auto_release_minutes": 180,
"tables": [ { "id": "t1", "label": "Mesa 1", "zone": "Salón", "capacity": 2, "active": true, "qr_token": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } ],
"store_url": "https://tienda.example.test"
}
Esta respuesta incluye los qr_token, necesarios para imprimir los códigos. Trátalos como datos privados de la tienda. El enlace de cada mesa es https://tienda.example.test/?notiwoo_table=<qr_token>.
| Ajuste | Valores |
|---|---|
selection | qr_only, list o qr_or_list. |
auto_release_minutes | 0 a 10080. 0 = nunca se liberan solas. |
tables | Hasta 250 mesas. id: 1 a 64 caracteres A-Z a-z 0-9 _ -. label: 1 a 120. zone: hasta 120. capacity: 1 a 1000. |
PUT /settings/tables recibe el mismo objeto. Los valores sí/no deben ser booleanos reales. Las mesas sin qr_token conservan el suyo o reciben uno nuevo. store_url se ignora. No puedes eliminar una mesa ocupada.
POST /tables/{id}/regenerate-qr crea un token nuevo de 32 caracteres. El QR anterior deja de funcionar.
Errores: 400 invalid_tables, 400 invalid_table, 400 duplicate_table, 409 table_busy, 409 table_occupied, 404 table_not_found.