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: