Wazo Phonebook SnomDECT : Différence entre versions

De SLM - MediaWiki
 
(15 révisions intermédiaires par le même utilisateur non affichées)
Ligne 4 : Ligne 4 :
 
[[Fichier:wazo-m900snom-limitation.jpg]]
 
[[Fichier:wazo-m900snom-limitation.jpg]]
  
Après vérification, la raison communiqué par l'éditeur wazo est exact :).
+
Après vérification, la raison communiquée par l'éditeur wazo est exact :).
  
 
J'ai tenté de contourner cette limitation via une redirection 301, mais sans succès.
 
J'ai tenté de contourner cette limitation via une redirection 301, mais sans succès.
  
La seconde approche, qui elle fonctionne, est de télécharger ce répertoire et de le mettre à disposition sur un autre serveur avec une URL de taille accepté par les bornes.
+
Nous allons donc télécharger le répertoire sur le serveur wazo et de le mettre à disposition sur un autre serveur avec une URL de taille accepté par les bornes.
  
 
Environnement de test:
 
Environnement de test:
Ligne 40 : Ligne 40 :
  
 
=== Choix du type de serveur ===
 
=== Choix du type de serveur ===
De base, wazo est fait pour fonctionner avec XML Minibrowser Server, mais lors de mes différents test j'ai pu constater qu'un annuaire de plus de 160 contacts n'était pas accepté.
+
De base, wazo est fait pour fonctionner avec XML Minibrowser Server, mais lors de mes différents tests j'ai pu constater qu'un annuaire de plus de 160 contacts n'était pas accepté.
  
 
Le mode Local n'ayant pas cette limitation nous adapteront le fichier xml afin de lui convenir.
 
Le mode Local n'ayant pas cette limitation nous adapteront le fichier xml afin de lui convenir.
Ligne 52 : Ligne 52 :
 
Sur laquelle j'ai installé une Debian 11.6 minimal avec serveur web (apache2) + php
 
Sur laquelle j'ai installé une Debian 11.6 minimal avec serveur web (apache2) + php
  
=== Page Web ===
+
=== Dépendance ===
Dans notre cas le repertoire apache racine est:
+
Pour le traitement des données Json
  /var/www/html
+
  apt-get install jq
  
Création des repertoires
+
=== Installation  ===
mkdir /var/www/html/includes
+
cloner le projet git:
  mkdir /var/www/html/download
+
  git clone https://github.com/slemoal51/Wazo---Phonebook.git
  
Mise en place des droits pour appaches
+
Déplacer le contenu du répertoire html en racine de votre répertoire apache.
chown www-data:www-data /var/www/html
 
chown www-data:www-data /var/www/html/includes
 
  
Créer un fichier de redirection pour l'index
+
Dans mon exemple: /var/www/html/
vi /var/www/html/index.php
 
  
<syntaxhighlight lang="php" line><?php
 
header("Status: 301 Moved Permanently", false, 301);
 
header("Location: https://www.oci.fr/oci-connect/");
 
exit();
 
?></syntaxhighlight>
 
  
Créer la page d'administration en remplaçant bien sur le mot de passe : {{Rouge|VOTRE_MOT_DE_PASSE}} par le votre en ligne 8
+
Déplacer le contenu du répertoire scripts ou vous le souhaitez.
vi /var/www/html/phonebook.php
 
  
<syntaxhighlight lang="php" line><?php
+
Dans mon exemple: /etc/phonebook/
session_start();
 
  
// Vérifier si le mot de passe a été soumis
+
Modifier le mot de passe dans le fichier:
if (isset($_POST['mot_de_passe'])) {
+
/var/www/html/login.php
    $motDePasseSaisi = $_POST['mot_de_passe'];
 
    // Comparer le mot de passe saisi avec le mot de passe souhaité
 
    if ($motDePasseSaisi === '1234567') {
 
        // Mot de passe correct, définir une variable de session pour indiquer que l'utilisateur est authentifié
 
        $_SESSION['authentifie'] = true;
 
    } else {
 
        // Mot de passe incorrect, afficher un message d'erreur
 
        echo "Mot de passe incorrect.";
 
    }
 
}
 
  
// Vérifier si l'utilisateur est authentifié
+
Adapter le chemin des répertoires dans le fichiers:
if (!isset($_SESSION['authentifie']) || $_SESSION['authentifie'] !== true) {
+
  /etc/phonebook/download.sh
    // Afficher le formulaire de saisie du mot de passe
+
  /etc/phonebook/custom.sh
    echo '<form method="post" action="">';
 
    echo 'Mot de passe : <input type="password" name="mot_de_passe">';
 
    echo '<input type="submit" value="Valider">';
 
    echo '</form>';
 
} else {
 
    // Afficher le contenu protégé
 
    echo "Contenu protégé : les utilisateurs authentifiés peuvent voir ce contenu.";
 
 
 
        // Vérification si le formulaire a été soumis
 
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
 
// Récupération des valeurs soumises
 
$valeurs1 = isset($_POST["valeur1"]) ? $_POST["valeur1"] : array();
 
$valeurs2 = isset($_POST["valeur2"]) ? $_POST["valeur2"] : array();
 
$valeurs3 = isset($_POST["valeur3"]) ? $_POST["valeur3"] : array();
 
$valeurs4 = isset($_POST["valeur4"]) ? $_POST["valeur4"] : array();
 
 
 
// Formatage des valeurs en tableau associatif
 
$donnees = array();
 
for ($i = 0; $i < count($valeurs1); $i++) {
 
// Génération du hash en utilisant la valeur de la colonne 2
 
$hash = hash('sha256', $valeurs2[$i]);
 
// Encodage du hash en base64
 
$base64 = base64_encode($hash);
 
// Extraction des 16 premiers caractères de l'encodage en base64
 
$valeur4 = substr($base64, 0, 16);
 
 
 
$donnees[$i] = array(
 
"valeur1" => isset($valeurs1[$i]) ? "checked" : "",
 
"valeur2" => $valeurs2[$i],
 
"valeur3" => $valeurs3[$i],
 
"valeur4" => $valeur4
 
);
 
}
 
 
 
// Écriture des données dans le fichier variables.json
 
$contenu = json_encode($donnees);
 
file_put_contents("includes/variables.json", $contenu);
 
        } else {
 
// Si le formulaire n'a pas été soumis, vérifier si le fichier variables.json existe
 
if (file_exists("includes/variables.json")) {
 
// Charger les données depuis le fichier variables.json
 
$contenu = file_get_contents("includes/variables.json");
 
$donnees = json_decode($contenu, true);
 
}
 
        }
 
        ?>
 
 
        <!DOCTYPE html>
 
        <html>
 
        <head>
 
<title>OCI - Phonebook</title>
 
<style>
 
/* Styles pour agrandir les champs de texte des colonnes 3 et 4 */
 
.large-input {
 
width: 300px;
 
}
 
/* Styles pour le tableau */
 
body {
 
font-family: Arial, sans-serif;
 
background-color: #F8F8F8;
 
}
 
h1 {
 
text-align: center;
 
color: #333;
 
}
 
table {
 
width: 100%;
 
max-width: 800px;
 
margin: 0 auto;
 
border-collapse: collapse;
 
background-color: #FFF;
 
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
 
}
 
th, td {
 
padding: 10px;
 
text-align: left;
 
}
 
th {
 
background-color: #333;
 
color: #FFF;
 
}
 
tr:nth-child(even) {
 
background-color: #F8F8F8;
 
}
 
tr:hover {
 
background-color: #EAEAEA;
 
}
 
input[type="submit"] {
 
display: block;
 
margin: 20px auto;
 
padding: 10px 20px;
 
font-size: 16px;
 
color: #FFF;
 
background-color: #333;
 
border: none;
 
cursor: pointer;
 
}
 
input[type="submit"]:hover {
 
background-color: #555;
 
}
 
.readonly {
 
background-color: #F8F8F8;
 
color: #999;
 
}
 
.copy-btn {
 
display: inline-block;
 
vertical-align: middle;
 
margin-left: 10px;
 
padding: 5px 10px;
 
background-color: #333;
 
color: #FFF;
 
border: none;
 
cursor: pointer;
 
}
 
.copy-btn:hover {
 
background-color: #555;
 
}
 
</style>
 
        </head>
 
        <body>
 
<h1>Phonebook Wazo pour Snom</h1>
 
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
 
<table>
 
<tr>
 
<th>#</th>
 
<th>Activer</th>
 
<th>Nom du client</th>
 
<th>URL Annuaire Wazo</th>
 
<th>ID nouvel annuaire</th>
 
<th></th>
 
</tr>
 
<?php for ($i = 0; $i < 100; $i++) { ?>
 
<tr>
 
<td><?php echo $i + 1; ?></td>
 
<td><input type="checkbox" name="valeur1[]" <?php echo isset($donnees[$i]["valeur1"]) ? $donnees[$i]["valeur1"] : ''; ?>></td>
 
<td><input type="text" name="valeur2[]" value="<?php echo isset($donnees[$i]["valeur2"]) ? $donnees[$i]["valeur2"] : ''; ?>"></td>
 
<td><input type="text" name="valeur3[]" value="<?php echo isset($donnees[$i]["valeur3"]) ? $donnees[$i]["valeur3"] : ''; ?>" class="large-input"></td>
 
<td><input type="text" name="valeur4[]" value="<?php echo isset($donnees[$i]["valeur4"]) ? $donnees[$i]["valeur4"] : ''; ?>" class="large-input readonly" readonly></td>
 
<td><input type="button" value="Copier ID" class="copy-btn" onclick="copyToClipboard(this)"></td>
 
  </tr>
 
<?php } ?>
 
</table>
 
<input type="submit" value="Enregistrer">
 
</form>
 
<script>
 
// Fonction pour copier le contenu d'un champ de texte dans le presse-papier
 
function copyToClipboard(button) {
 
var input = button.parentNode.previousElementSibling.firstElementChild;
 
input.select();
 
input.setSelectionRange(0, 99999);
 
document.execCommand("copy");
 
}
 
</script>
 
        </body>
 
        </html>
 
<!-- Fin du contenu HTML protégé -->
 
<?php
 
}
 
?>
 
 
 
</syntaxhighlight>
 
 
 
=== Script ===
 
Nous allons installer 2 scripts
 
# Télécharger les répertoires wazo
 
# Adapter les répertoires téléchargés
 
 
 
  mkdir /etc/phonebook
 
 
 
==== Télécharger les répertoires ====
 
vi /etc/phonebook/download.sh
 
 
 
  <syntaxhighlight lang="shell" line>#!/bin/bash
 
 
 
# Charger les données depuis le fichier variables.json
 
contenu=$(cat /var/www/html/includes/variables.json)
 
donnees=($(echo "$contenu" | jq -r '.[] | "\(.valeur1),\(.valeur2),\(.valeur3),\(.valeur4)"'))
 
 
 
# Parcourir les données et télécharger les fichiers
 
for donnee in "${donnees[@]}"; do
 
    # Extraire les valeurs de chaque colonne
 
    valeur1=$(echo "$donnee" | cut -d ',' -f 1)
 
    valeur3=$(echo "$donnee" | cut -d ',' -f 3)
 
    valeur4=$(echo "$donnee" | cut -d ',' -f 4)
 
 
 
    # Vérifier si la case de la colonne 1 est activée
 
    if [ "$valeur1" == "checked" ]; then
 
        # Télécharger le fichier avec wget
 
        wget "$valeur3" -O "/var/www/html/phonebook/$valeur4"
 
        echo "Le fichier $valeur4 a été téléchargé depuis $valeur3."
 
    fi
 
done
 
</syntaxhighlight>
 
  
 
Donner les droits d'exécution
 
Donner les droits d'exécution
 
  chmod +x /etc/phonebook/download.sh
 
  chmod +x /etc/phonebook/download.sh
 +
chmod +x /etc/phonebook/custom.sh
  
==== Adapter les répertoires ====
+
Modifier crontab pour lancer les scripts toutes les 5minutes
  vi /etc/phonebook/custom.sh
+
  crontab -e
  
  <syntaxhighlight lang="shell" line>#!/bin/bash
+
  <nowiki># Télécharger les répertoires
# Scrypt lancé par crontab
+
*/5 * * * * bash /etc/phonebook/download.sh  > /dev/null
  
sleep 5
+
# Adapter les répertoires
 +
*/5 * * * * bash /etc/phonebook/custom.sh  > /dev/null</nowiki>
  
#Remplacer les caractères non apprecié
+
== Configuration page Web ==
sed -i 's/&#39;/ /' /var/www/html/phonebook/*
+
Se connecter sur votre page web
sed -i 'y/_àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ/ aceeeeiioouuACEEEEIIOOUU/' /var/www/html/phonebook/*
 
  
## Adapter au format Tbook
+
https://phonebook.slemoal
sed -i 's#/SnomIPPhoneDirectory#/tbook#' /var/www/html/phonebook/*
 
sed -i 's/SnomIPPhoneDirectory/tbook complete="true"/' /var/www/html/phonebook/*
 
  
sed -i 's#/DirectoryEntry#/item#' /var/www/html/phonebook/*
+
Renseigner votre mot de passe, valider.
sed -i 's/DirectoryEntry/item context="active" type="colleagues"/' /var/www/html/phonebook/*
 
  
sed -i 's#/Name>#/name>#' /var/www/html/phonebook/*
+
=== Récuperer l'URL de l'annuaire Wazo ===
sed -i 's/Name>/name>/' /var/www/html/phonebook/*
+
La 1ère étape consiste à récupérer le lien de l'annuaire du serveur wazo
  
sed -i 's#/Telephone>#/number>#' /var/www/html/phonebook/*
+
[[Fichier:phonebook-geturl.png]]
sed -i 's/Telephone>/number>/' /var/www/html/phonebook/*
 
</syntaxhighlight>
 
  
Donner les droits d'exécution
+
# Choisir la stack
chmod +x /etc/phonebook/custom.sh
+
# Saisir une mac adresse lié à un poste Yealink de l’installation.
 +
[[Fichier:phonebook-geturl1.png]]
  
==== Planifier l'exécution des scripts ====
+
[[Fichier:phonebook-geturl2.png]]
Dans l'exemple ci-dessous les répertoires seront mis à jours toute les 5 minutes
 
crontab -e
 
  
<syntaxhighlight lang="shell" line highlight="9-11"># Télécharger les répertoires
+
=== Saisie d'un client ===
*/5 * * * * sh /etc/phonebook/download.sh  > /dev/null
+
Sur la page principale :
 +
# Activer
 +
# Saisir un nom de client
 +
# Coller l’URL précédemment obtenu
 +
# L’ID est automatiquement généré après avoir sauvegardé en fonction du nom de client.
  
# Adapter les répertoires
+
/!\ Modifier le nom du client obligera à modifier l'ID sur les bornes SNOM lié au client
*/5 * * * * sh /etc/phonebook/custom.sh  > /dev/null</syntaxhighlight>
 
  
== Configuration page Web ==
+
[[Fichier:phonebook-index.png]]
Se connecter sur votre page web
 
 
 
https://phonebook.slemoal/phonebook.php
 
 
 
Renseigner votre mot de passe, valider.
 
  
[[Fichier:phonebook-admin.jpg]]
+
=== Principe de fonctionnement ===
 +
Toute les 5minutes, un script télécharge l’annuaire officiel de serveur wazo
  
Renseigner:
+
Dans notre exemple :  
* Activer
+
http://wazo01.XXXXX.XXX:9498/0.1/directories/lookup/default/snom?xivo_user_uuid=e5d6a27c-fa64-4a7b-9939-XXXXXXXXXXcdf&term
* Saisir URL de l'annuaire wazo
 
* Enregistrer
 
  
L'ID est automatiquement généré par rapport au nom du client.
+
Une fois téléchargé, un second script adapte les balises xml afin de correspondre à l’annuaire des bornes snom, supprime les accents, caractères spéciaux, et le met à disposition sous un lien lié à l’ID: 
Modifier celui ci obligera à modifier l'ID sur les bornes SNOM du client
+
https://phonebook.slemoal.fr/phonebook/ZjY2NzkwMXXXXXXXX
  
 
== Configuration des bornes snom ==
 
== Configuration des bornes snom ==
Ligne 352 : Ligne 131 :
 
Voici les paramètres à configurer sur la borne maitre afin que la borne à télécharger son annuaire toute les 5minutes
 
Voici les paramètres à configurer sur la borne maitre afin que la borne à télécharger son annuaire toute les 5minutes
  
Coller l'id généré précedemment dans le champs "nom du fichier"
+
Coller l'id généré précédemment dans le champ "nom du fichier"
  
 
Attention, si le provisionning est activé avec une configuration différente, les paramètres seront écrasés.
 
Attention, si le provisionning est activé avec une configuration différente, les paramètres seront écrasés.
Ligne 369 : Ligne 148 :
  
 
Les champs nous intéressant sont:
 
Les champs nous intéressant sont:
en ligne 56 le type de repertoire (O = Local, 1 LDAP, 2 XML Server, 3 XML browser server)
+
en ligne 56 le type de répertoire (O = Local, 1 LDAP, 2 XML Server, 3 XML browser server)
 
  <phonebook_server_location perm="R">0</phonebook_server_location>
 
  <phonebook_server_location perm="R">0</phonebook_server_location>
  
 
en ligne 57 l'adresse du serveur
 
en ligne 57 l'adresse du serveur
  <phonebook_location perm="R">https://phonebook.slemoal.fr/</phonebook_location>
+
  <phonebook_location perm="R">https://phonebook.slemoal.fr/phonebook/</phonebook_location>
  
 
le nouveau fichier M900.tpl devra ressembler à celui la:
 
le nouveau fichier M900.tpl devra ressembler à celui la:
Ligne 434 : Ligne 213 :
 
     {% if XX_xivo_phonebook_url -%}
 
     {% if XX_xivo_phonebook_url -%}
 
         <phonebook_server_location perm="R">0</phonebook_server_location>
 
         <phonebook_server_location perm="R">0</phonebook_server_location>
         <phonebook_location perm="R">https://phonebook.slemoal.fr/</phonebook_location>
+
         <phonebook_location perm="R">https://phonebook.slemoal.fr/phonebook/</phonebook_location>
 
     {% endif -%}
 
     {% endif -%}
  
Ligne 448 : Ligne 227 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Une fois la borne autoprovisionner, vous devrez vous connecter sur la borne maitre et Coller l'id généré précedemment dans le champs "nom du fichier"
+
Une fois la borne autoprovisionnée, vous devrez vous connecter sur la borne maitre et Coller l'id généré précédemment dans le champs "nom du fichier"
  
 
[[Fichier:wazo-m900snom-auto.jpg]]
 
[[Fichier:wazo-m900snom-auto.jpg]]

Version actuelle datée du 1 mai 2023 à 20:42

Présentation

L'annuaire Wazo n'est pas pris en charge sur les bornes M900 en raison d'une URL Trop grande.

Wazo-m900snom-limitation.jpg

Après vérification, la raison communiquée par l'éditeur wazo est exact :).

J'ai tenté de contourner cette limitation via une redirection 301, mais sans succès.

Nous allons donc télécharger le répertoire sur le serveur wazo et de le mettre à disposition sur un autre serveur avec une URL de taille accepté par les bornes.

Environnement de test:

  • Wazo version: 23.1
  • Borne M900 version: 530.2
  • M85 version: 530.2

M900 - Phonebook

Les bornes M900 peuvent gérer le répertoire distant de 4manières.

  • Local
  • LDAP
  • XML Server
  • XML MiniBrowser Server

Local

Ce mode télécharge le répertoire à une intervalle prédéfini et le stock dans sa mémoire. les téléphones récupère le répertoire sur la borne.

Documentation: https://service.snom.com/display/wiki/How+to+use+the+Local+Central+Directory+on+M300%2C+M700%2C+M900+DECT+base

LDAP

L'annuaire central du serveur LDAP permet de configurer tous les paramètres spécifiques à LDAP afin d'effectuer des recherches sur un serveur LDAP

XML Server

Le choix XML server est spécifique à Broadsoft , ce type de carnet d'adresses utilise une API propriétaire Broadsoft nommée XSI pour accéder aux répertoires.

XML MiniBrowser Server

Dans ce mode, rien n'est stocké sur la borne,

Quand un téléphone souhaite accéder à l'annuaire, il fait une requête http vers le serveur distant et télécharge le répertoire.

Choix du type de serveur

De base, wazo est fait pour fonctionner avec XML Minibrowser Server, mais lors de mes différents tests j'ai pu constater qu'un annuaire de plus de 160 contacts n'était pas accepté.

Le mode Local n'ayant pas cette limitation nous adapteront le fichier xml afin de lui convenir.

Configuration du serveur

VM

Dans mon cas, je suis parti avec une VM:

  • Stockage: 4Go
  • Rem: 1024Mo

Sur laquelle j'ai installé une Debian 11.6 minimal avec serveur web (apache2) + php

Dépendance

Pour le traitement des données Json

apt-get install jq

Installation

cloner le projet git:

git clone https://github.com/slemoal51/Wazo---Phonebook.git

Déplacer le contenu du répertoire html en racine de votre répertoire apache.

Dans mon exemple: /var/www/html/


Déplacer le contenu du répertoire scripts ou vous le souhaitez.

Dans mon exemple: /etc/phonebook/

Modifier le mot de passe dans le fichier:

/var/www/html/login.php

Adapter le chemin des répertoires dans le fichiers:

/etc/phonebook/download.sh
/etc/phonebook/custom.sh

Donner les droits d'exécution

chmod +x /etc/phonebook/download.sh
chmod +x /etc/phonebook/custom.sh

Modifier crontab pour lancer les scripts toutes les 5minutes

crontab -e
# Télécharger les répertoires
*/5 * * * * bash /etc/phonebook/download.sh  > /dev/null

# Adapter les répertoires
*/5 * * * * bash /etc/phonebook/custom.sh  > /dev/null

Configuration page Web

Se connecter sur votre page web

https://phonebook.slemoal

Renseigner votre mot de passe, valider.

Récuperer l'URL de l'annuaire Wazo

La 1ère étape consiste à récupérer le lien de l'annuaire du serveur wazo

Phonebook-geturl.png

  1. Choisir la stack
  2. Saisir une mac adresse lié à un poste Yealink de l’installation.

Phonebook-geturl1.png

Phonebook-geturl2.png

Saisie d'un client

Sur la page principale :

  1. Activer
  2. Saisir un nom de client
  3. Coller l’URL précédemment obtenu
  4. L’ID est automatiquement généré après avoir sauvegardé en fonction du nom de client.

/!\ Modifier le nom du client obligera à modifier l'ID sur les bornes SNOM lié au client

Phonebook-index.png

Principe de fonctionnement

Toute les 5minutes, un script télécharge l’annuaire officiel de serveur wazo

Dans notre exemple :

http://wazo01.XXXXX.XXX:9498/0.1/directories/lookup/default/snom?xivo_user_uuid=e5d6a27c-fa64-4a7b-9939-XXXXXXXXXXcdf&term

Une fois téléchargé, un second script adapte les balises xml afin de correspondre à l’annuaire des bornes snom, supprime les accents, caractères spéciaux, et le met à disposition sous un lien lié à l’ID:

https://phonebook.slemoal.fr/phonebook/ZjY2NzkwMXXXXXXXX

Configuration des bornes snom

Méthode Manuel

Voici les paramètres à configurer sur la borne maitre afin que la borne à télécharger son annuaire toute les 5minutes

Coller l'id généré précédemment dans le champ "nom du fichier"

Attention, si le provisionning est activé avec une configuration différente, les paramètres seront écrasés.

PI: Le bouton "charger" permet de vider le répertoire actuel

Wazo-m900snom-manuel.jpg

Autoprovisionning Wazo

La méthode "propre" est de créer une template custom pour la borne M900

ci dessous un lien vers la documentation wazo:

https://wazo-platform.org/documentation/overview/provisioning-admin.html

Les champs nous intéressant sont: en ligne 56 le type de répertoire (O = Local, 1 LDAP, 2 XML Server, 3 XML browser server)

<phonebook_server_location perm="R">0</phonebook_server_location>

en ligne 57 l'adresse du serveur

<phonebook_location perm="R">https://phonebook.slemoal.fr/phonebook/</phonebook_location>

le nouveau fichier M900.tpl devra ressembler à celui la:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <settings>
 3     <phone-settings>
 4     {%- if vlan_enabled %}
 5         <vlan_id>{{ vlan_id }}</vlan_id>
 6         <vlan_qos>{{ vlan_priority|d('0') }}</vlan_qos>
 7     {%- else %}
 8         <vlan_id></vlan_id>
 9         <vlan_qos></vlan_qos>
10     {%- endif %}
11 
12         <codec_tos>184</codec_tos>
13         <codec_priority_list perm="R">pcma,pcmu,g722,g729,telephone-event</codec_priority_list>
14         <signaling_tos>184</signaling_tos>
15 
16     {%- if admin_username %}
17         <http_user>{{ admin_username|e }}</http_user>
18     {%- else %}
19         <http_user>guest</http_user>
20     {%- endif %}
21 
22     {%- if admin_password %}
23         <admin_mode_password>{{ admin_password|e }}</admin_mode_password>
24         <http_pass>{{ admin_password|e }}</http_pass>
25     {%- else %}
26         <admin_mode_password>12345</admin_mode_password>
27         <http_pass>guest</http_pass>
28     {%- endif %}
29 
30     {%- if ntp_enabled %}
31         <ntp_server>{{ ntp_ip }}</ntp_server>
32     {%- else %}
33         <ntp_server></ntp_server>
34     {%- endif %}
35 
36     {%- for server in XX_servers.values() %}
37         <srv_sip_server_alias idx="{{ server['id'] }}">Wazo {{ server['id'] }}</srv_sip_server_alias>
38         <user_host idx="{{ server['id'] }}">{{ server['proxy_ip'] }}</user_host>
39         <srv_srtp_auth idx="{{ server['id'] }}">off</srv_srtp_auth>
40         <user_dtmf_info idx="{{ server['id'] }}">{{ server['dtmf_mode'] }}</user_dtmf_info>
41     {%- endfor %}
42 
43     {%- for line_no, line in sip_lines.items() %}
44         <user_active idx="{{ line_no }}">on</user_active>
45         <user_name idx="{{ line_no }}">{{ line['username']|e }}</user_name>
46         <user_pname idx="{{ line_no }}">{{ line['auth_username']|e }}</user_pname>
47         <user_pass idx="{{ line_no }}">{{ line['password']|e }}</user_pass>
48         <user_realname idx="{{ line_no }}">{{ line['display_name']|e }}</user_realname>
49         <user_mailbox idx="{{ line_no }}">{{ line['voicemail'] }}</user_mailbox>
50         <subscr_sip_hs_idx idx="{{ line_no }}">{{ line_no }}</subscr_sip_hs_idx>
51         <subscr_dect_ac_code idx="{{ line_no }}">{{ "{0:0>4}".format(line_no) }}</subscr_dect_ac_code>
52         <subscr_sip_ua_data_server_id idx="{{ line_no }}">{{ line['XX_server_id'] }}</subscr_sip_ua_data_server_id>
53         <codec_priority_list idx="{{ line_no }}" perm="R">pcma,pcmu,g722,g729,telephone-event</codec_priority_list>
54     {%- endfor %}
55 
56     {% if XX_xivo_phonebook_url -%}
57         <phonebook_server_location perm="R">0</phonebook_server_location>
58         <phonebook_location perm="R">https://phonebook.slemoal.fr/phonebook/</phonebook_location>
59     {% endif -%}
60 
61     {%- if XX_lang %}
62         <language>{{ XX_lang[0] }}</language>
63         <web_language>{{ XX_lang[0] }}</web_language>
64         <tone_scheme>{{ XX_lang[1] }}</tone_scheme>
65     {%- endif %}
66 
67     {% block settings_suffix %}{% endblock %}
68     </phone-settings>
69 </settings>

Une fois la borne autoprovisionnée, vous devrez vous connecter sur la borne maitre et Coller l'id généré précédemment dans le champs "nom du fichier"

Wazo-m900snom-auto.jpg