Construire une application kiosque
Construisez une application dédiée de scan et de check-in/check-out en utilisant l'API Kiosque de Stockaj.
Vue d'ensemble
Une application kiosque est une station dédiée — typiquement une tablette ou un ordinateur à l'entrée d'un entrepôt — où les utilisateurs scannent des QR codes pour identifier rapidement les articles, vérifier le statut des locations et effectuer des actions.
Prérequis
- Compte Stockaj avec un forfait Starter ou supérieur (accès API requis)
- Token API avec la capacité
kiosk:scan - Appareil avec caméra (pour le scan QR) ou lecteur de codes-barres
Architecture
┌──────────────────────────────┐
│ Appareil kiosque │
│ ┌────────────────────────┐ │
│ │ Caméra / Scanner │ │
│ │ (lit le QR code) │ │
│ └──────────┬─────────────┘ │
│ │ │
│ ┌──────────▼─────────────┐ │
│ │ Application kiosque │ │
│ │ (web ou native) │ │
│ └──────────┬─────────────┘ │
└─────────────┼────────────────┘
│ HTTPS
▼
┌──────────────────────────────┐
│ API Stockaj │
│ POST /api/v2/kiosk/scan │
│ GET /api/v2/kiosk/search │
│ PATCH /api/v2/rentals/{id} │
└──────────────────────────────┘
Étape 1 : Configurer l'authentification
Créez un token API dédié pour votre kiosque :
- Allez dans Paramètres → Tokens API.
- Créez un token nommé
kiosque-entrepot-principal(ou similaire). - Sélectionnez les capacités :
kiosk:scan— Requis pour le scan et la rechercherents:read— Voir les détails des locationsrents:update— Mettre à jour le statut des locations (pour le check-in/check-out)items:read— Voir les détails des articles
Étape 2 : Implémenter le scan QR
Utilisez une bibliothèque de scanner QR web ou une API caméra native :
// Utilisation de la bibliothèque html5-qrcode
import { Html5QrcodeScanner } from 'html5-qrcode';
const scanner = new Html5QrcodeScanner('reader', {
qrbox: { width: 300, height: 300 },
fps: 10,
});
scanner.render(async (decodedText) => {
// Envoyer le code scanné à Stockaj
const result = await scanCode(decodedText);
displayResult(result);
});
Étape 3 : Appeler l'API de scan
const API_BASE = 'https://app.stockaj.com/api/v2';
const TOKEN = process.env.STOCKAJ_KIOSK_TOKEN;
async function scanCode(code) {
const response = await fetch(`${API_BASE}/kiosk/scan`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({ code }),
});
return response.json();
}
Étape 4 : Afficher les résultats
function displayResult(result) {
if (!result.found) {
showError(`Article non trouvé : ${result.message}`);
return;
}
// Afficher les infos de l'article
showItemCard({
name: result.item.name,
code: result.item.code,
category: result.item.category,
available: result.item.available_quantity,
});
// Afficher les infos de la variante (si une variante a été scannée)
if (result.variant) {
showVariantCard({
serial: result.variant.serial_number,
condition: result.variant.condition,
available: result.variant.is_available,
});
}
// Afficher les infos de location (si l'article est actuellement loué)
if (result.rental) {
showRentalCard({
status: result.rental.status,
renter: result.renter.name,
returnDate: result.rental.expected_return_date,
});
}
}
Étape 5 : Implémenter la recherche
Ajoutez une barre de recherche pour la recherche manuelle d'articles :
async function searchItems(query) {
const response = await fetch(
`${API_BASE}/kiosk/search?q=${encodeURIComponent(query)}&limit=10`,
{
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Accept': 'application/json',
},
}
);
const { results } = await response.json();
displaySearchResults(results);
}
Étape 6 : Ajouter le check-in/check-out
Utilisez l'API Locations pour mettre à jour le statut des locations :
async function updateRentalStatus(rentalId, newStatus) {
const response = await fetch(`${API_BASE}/rentals/${rentalId}`, {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({ status: newStatus }),
});
return response.json();
}
// Utilisation
await updateRentalStatus(42, 'finished'); // Check-in (retour)
await updateRentalStatus(43, 'dispatched'); // Check-out
Recommandations UI
Pour les applications kiosque :
- Grandes zones tactiles — Les boutons doivent faire au moins 48px pour les écrans tactiles
- Contraste élevé — Utilisez des couleurs claires et de grandes polices
- Réinitialisation automatique — Effacez l'écran après une période d'inactivité
- Retour sonore — Jouez des signaux audio pour les scans réussis/échoués
- Scan continu — Redémarrez automatiquement le scanner après chaque résultat
- File d'attente hors ligne — Mettez les actions en file d'attente lorsque le réseau est indisponible
Considérations de sécurité
- Utilisez un token API dédié avec des capacités minimales
- Verrouillez l'appareil kiosque — Utilisez le mode kiosque ou l'accès guidé
- HTTPS uniquement — Assurez-vous que tous les appels API utilisent HTTPS
- Stockez le token dans des variables d'environnement, jamais dans le code côté client
- Envisagez un proxy backend pour garder le token côté serveur