docs signalR
This commit is contained in:
@@ -186,26 +186,154 @@ function handleCallHungUp(event, mainWindow) {
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Récupération de la liste des terminaux
|
||||
### 4. Récupération et sélection des terminaux téléphoniques
|
||||
|
||||
#### Processus complet de récupération des terminaux
|
||||
|
||||
La récupération des terminaux se fait en deux phases : récupération depuis le serveur et affichage dans l'interface de connexion.
|
||||
|
||||
##### Côté processus principal (main.js)
|
||||
|
||||
```javascript
|
||||
// Obtenir les terminaux disponibles
|
||||
async function getTerminalList(connection, serviceProvider) {
|
||||
// Handler IPC pour récupérer les terminaux
|
||||
ipcMain.handle('get-terminal-list', async () => {
|
||||
try {
|
||||
const terminals = await connection.invoke(
|
||||
const terminals = await signalRConnection.invoke(
|
||||
'GetTerminalListByServiceProvider',
|
||||
serviceProvider
|
||||
config.ServiceProvider // Ex: 'RDVPREM' depuis la config
|
||||
);
|
||||
|
||||
console.log('Terminaux disponibles:', terminals);
|
||||
// Retourne un tableau de numéros: ["3001", "3002", "3003", ...]
|
||||
return terminals;
|
||||
} catch (error) {
|
||||
console.error('Erreur récupération terminaux:', error);
|
||||
return [];
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
##### Côté renderer - Interface de sélection
|
||||
|
||||
```javascript
|
||||
// Au chargement de la page de connexion
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
try {
|
||||
// Afficher un loader
|
||||
const terminalSelect = document.getElementById('terminal-select');
|
||||
terminalSelect.innerHTML = '<option value="">Chargement des terminaux...</option>';
|
||||
|
||||
// Récupérer les terminaux disponibles depuis le serveur
|
||||
const terminals = await ipcRenderer.invoke('get-terminal-list');
|
||||
|
||||
if (terminals && terminals.length > 0) {
|
||||
populateTerminalSelect(terminals);
|
||||
|
||||
// Restaurer la dernière sélection si disponible
|
||||
const lastTerminal = localStorage.getItem('last-terminal');
|
||||
if (lastTerminal && terminals.includes(lastTerminal)) {
|
||||
terminalSelect.value = lastTerminal;
|
||||
}
|
||||
} else {
|
||||
showError('Aucun terminal téléphonique disponible');
|
||||
terminalSelect.innerHTML = '<option value="">Aucun terminal disponible</option>';
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur chargement terminaux:', error);
|
||||
showError('Impossible de récupérer la liste des terminaux');
|
||||
}
|
||||
});
|
||||
|
||||
// Remplir le select avec les terminaux
|
||||
function populateTerminalSelect(terminals) {
|
||||
const select = document.getElementById('terminal-select');
|
||||
select.innerHTML = '<option value="">Sélectionner un terminal...</option>';
|
||||
|
||||
terminals.forEach(terminal => {
|
||||
const option = document.createElement('option');
|
||||
option.value = terminal;
|
||||
option.textContent = `Poste ${terminal}`;
|
||||
select.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
// Intégration dans le formulaire de connexion
|
||||
async function handleLogin(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const terminal = document.getElementById('terminal-select').value;
|
||||
|
||||
// Validation : terminal obligatoire
|
||||
if (!terminal) {
|
||||
showError('Veuillez sélectionner un terminal téléphonique');
|
||||
return;
|
||||
}
|
||||
|
||||
const credentials = {
|
||||
email: document.getElementById('email').value,
|
||||
password: document.getElementById('password').value,
|
||||
terminal: terminal
|
||||
};
|
||||
|
||||
// Sauvegarder le terminal pour la prochaine connexion
|
||||
localStorage.setItem('last-terminal', terminal);
|
||||
|
||||
// Connexion avec le terminal sélectionné
|
||||
const result = await ipcRenderer.invoke('agent-login', credentials);
|
||||
|
||||
if (result.success) {
|
||||
// Le terminal est maintenant associé à la session
|
||||
// Il sera affiché dans le titre de la fenêtre
|
||||
console.log(`Connecté sur le poste ${terminal}`);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### Interface HTML correspondante
|
||||
|
||||
```html
|
||||
<!-- Formulaire de connexion avec sélection du terminal -->
|
||||
<form id="loginForm">
|
||||
<div class="form-group">
|
||||
<label for="email">Email</label>
|
||||
<input type="email" id="email" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password">Mot de passe</label>
|
||||
<input type="password" id="password" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="terminal-select">Terminal téléphonique</label>
|
||||
<select id="terminal-select" required>
|
||||
<option value="">Chargement...</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<button type="submit">Se connecter</button>
|
||||
</form>
|
||||
```
|
||||
|
||||
#### Points importants sur les terminaux
|
||||
|
||||
1. **ServiceProvider** : Le paramètre configuré dans `config.json` détermine quels terminaux sont disponibles pour l'organisation
|
||||
|
||||
2. **Filtrage serveur** : Le serveur filtre automatiquement les terminaux selon :
|
||||
- Le fournisseur de service (ServiceProvider)
|
||||
- Les droits de l'organisation
|
||||
- La disponibilité des postes
|
||||
- Les terminaux déjà utilisés par d'autres agents
|
||||
|
||||
3. **Validation obligatoire** : Un agent DOIT sélectionner un terminal pour se connecter - c'est ce qui permet le routage des appels
|
||||
|
||||
4. **Affichage contextuel** : Après connexion, le terminal est affiché dans le titre :
|
||||
```javascript
|
||||
mainWindow.setTitle(`SimpleConnect - Agent: ${user} (${firstName} ${lastName}) - Tel: ${terminal}`);
|
||||
```
|
||||
|
||||
5. **Association terminal-agent** : Cette association permet au serveur SignalR de router les événements IPBX vers le bon agent
|
||||
|
||||
### 5. Déconnexion propre
|
||||
|
||||
```javascript
|
||||
|
||||
Reference in New Issue
Block a user