voip-click-to-call
Version:
Outil npm pour générer un système click-to-call VoIP compatible Asterisk et FreeSWITCH
246 lines (184 loc) • 4.35 kB
Markdown
# voip-click-to-call
Outil npm pour générer un système click-to-call VoIP compatible avec Asterisk et FreeSWITCH.
## Installation
```bash
npm install -g voip-click-to-call
```
Ou en local dans votre projet :
```bash
npm install voip-click-to-call
```
## Utilisation
### 1. Créer un fichier de configuration
Créez un fichier `voip-config.yaml` dans votre projet avec la configuration de votre serveur VoIP :
```yaml
voip:
type: asterisk # ou 'freeswitch'
host: localhost
port: 5038
username: admin
password: secret
protocol: ami # 'ami', 'ari' pour Asterisk, 'esl' pour FreeSWITCH
backend:
port: 3000
websocketPort: 3001
frontend:
apiUrl: http://localhost:3000
wsUrl: ws://localhost:3001
```
### 2. Générer le frontend et backend
```bash
voip-click-to-call generate
```
Ou avec des options :
```bash
voip-click-to-call generate --framework react --config voip-config.yaml
```
Le générateur vous demandera :
- Le framework frontend (React, Vue.js, ou Vanilla JS)
- Le répertoire de sortie
### 3. Installer les dépendances
```bash
cd voip-click-to-call
cd backend && npm install
cd ../frontend && npm install
```
### 4. Démarrer les serveurs
**Backend :**
```bash
cd backend
npm start
```
**Frontend :**
```bash
cd frontend
npm start
```
## Fonctionnalités
### Détection automatique des numéros
Le système détecte automatiquement tous les numéros de téléphone sur votre page web et les transforme en liens cliquables. Deux méthodes sont supportées :
1. **Détection par regex** : Analyse automatique du contenu texte de la page
2. **Attributs HTML** : Utilisation de l'attribut `data-phone` sur les éléments HTML
Exemple avec attribut :
```html
<span data-phone="0123456789">Contactez-nous</span>
```
### Support des serveurs VoIP
- **Asterisk** : Support AMI (Asterisk Manager Interface) et ARI (Asterisk REST Interface)
- **FreeSWITCH** : Support ESL (Event Socket Library)
### Frameworks frontend supportés
- React
- Vue.js
- Vanilla JavaScript
## Configuration
### Asterisk AMI
```yaml
voip:
type: asterisk
host: localhost
port: 5038
username: admin
password: secret
protocol: ami
```
### Asterisk ARI
```yaml
voip:
type: asterisk
host: localhost
port: 8088
username: asterisk
password: asterisk
protocol: ari
```
### FreeSWITCH ESL
```yaml
voip:
type: freeswitch
host: localhost
port: 8021
password: ClueCon
protocol: esl
```
## API
### POST /api/call
Initie un appel téléphonique.
**Body :**
```json
{
"phoneNumber": "0123456789",
"fromNumber": "1000" // optionnel
}
```
**Response :**
```json
{
"success": true,
"message": "Appel initié de 1000 vers 0123456789",
"callId": "1234567890.123",
"phoneNumber": "0123456789",
"fromNumber": "1000"
}
```
### GET /api/health
Vérifie l'état du serveur et de la connexion VoIP.
**Response :**
```json
{
"status": "ok",
"voipConnected": true
}
```
### GET /api/config
Retourne la configuration pour le frontend.
## WebSocket
Le serveur WebSocket envoie des événements en temps réel :
```javascript
{
"type": "call_initiated",
"phoneNumber": "0123456789",
"fromNumber": "1000",
"callId": "1234567890.123",
"timestamp": "2024-01-01T12:00:00.000Z"
}
```
```javascript
{
"type": "call_status",
"phoneNumber": "0123456789",
"status": "completed", // ou "failed"
"timestamp": "2024-01-01T12:00:05.000Z"
}
```
## Développement
### Structure du projet généré
```
voip-click-to-call/
├── backend/
│ ├── src/
│ │ ├── server.js
│ │ └── connectors/
│ │ ├── asterisk.js
│ │ └── freeswitch.js
│ ├── voip-config.yaml
│ └── package.json
└── frontend/
├── src/
│ ├── App.js (ou App.vue, app.js)
│ ├── config.js
│ └── phone-detector.js
└── package.json
```
## Publication sur npm
Pour publier ce package sur npm :
1. Créez un compte sur [npmjs.com](https://www.npmjs.com/)
2. Connectez-vous via la CLI : `npm login`
3. Vérifiez que le nom du package est disponible
4. Publiez : `npm publish`
Le package inclut automatiquement :
- Tous les fichiers dans `src/`
- Tous les templates dans `templates/`
- Le fichier `config.example.yaml`
- Le `README.md`
## Licence
MIT