tuto:ipasserelle:telephonie:generer_contacts_polycom

Génération des contacts pour les Polycom depuis la base des utilisateurs SME

Voilà un petit scripts pour générer un fichier XML de contacts pour les polycoms (IP33x, IP650). Pour cela, il faut que les utilisateurs sur votre SME aient l'attribut Extension portant leur numéros interne, par exemple

db accounts setprop user1 Extension 130
#!/usr/bin/perl -w
 
use esmith::AccountsDB;
use Text::Unaccent::PurePerl qw(unac_string);
use Encode;
 
my $acc = esmith::AccountsDB->open_ro();
 
my $pos = 5;
 
print '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- $RCSfile: 000000000000-directory~.xml,v $  $Revision: 1.3 $ -->
<directory>
    <item_list>
';
 
my %ext;
my %ln;
my %fn;
my %bw;
 
foreach my $u ($acc->users){
    my $login = $u->key;
    # Want to skip specific users ?
    #next if($login =~ m/^sophie|jerome$/);
    # Only include members of specific groups ?
    next unless (
        $acc->is_user_in_group($login, 'agence') ||
        $acc->is_user_in_group($login, 'group1') ||
        $acc->is_user_in_group($login, 'equipe')
    );
    my $pass = $u->prop('PasswordSet') || 'no';
    next unless ($pass eq 'yes');
    $ext{$login} = $u->prop('Extension') || '';
    $bw{$login} = 1;
    # Use Phone number if extension is not available
    # But cleanup this number
    if ($ext{$login} eq ''){
        $ext{$login} = $u->prop('Phone') || '';
        $ext{$login} =~ s/^\+33\(0\)/0/;
        $ext{$login} =~ s/\s//g;
        # Don't monitor line state for external numbers
        $bw{$login} = 0;
    }
    unless ($ext{$login} =~ m/^\d+$/){
        # Want to list users which hasn't any phone specified ?
        # print "<!-- $login n'a pas de numero -->\n";
        next;
    }
    $ln{$login} = unac_string(decode('utf-8',($u->prop('LastName') || '')));
    $fn{$login} = unac_string(decode('utf-8',($u->prop('FirstName') || $login)));
}
foreach (sort { lc($ln{$a}) cmp lc($ln{$b}) } keys %ln){
    print "        <item>
            <ln>$ln{$_}</ln>
            <fn>$fn{$_}</fn>
            <lb>$ln{$_} $fn{$_}</lb>
            <ct>$ext{$_}</ct>
            <sd>$pos</sd>
            <bw>$bw{$_}</bw>
        </item>
";
    $pos++;
}
 
print "    </item_list>
</directory>";

Il ne reste plus qu'à ajuster deux trois trucs, dans cet exemple:

  • Seuls les utilisateurs membre du groupe “agence” ou “group1” ou “equipe” et ayant un mot de passe configuré seront mis dans la liste
  • Le premier contacts sera en position 5 (qui correspond au premier emplacement sur la première extension sur les Polycom IP650)
  • Tous les accents seront supprimés (ils posent souvent plus de problèmes qu'autres chose)
  • tuto/ipasserelle/telephonie/generer_contacts_polycom.txt
  • Dernière modification: 23/09/2013 13:05
  • de dani