Comment garder vos numéros de téléphone de Google Contacts impeccablement organisés ?


Dans un monde connecté, gérer efficacement notre répertoire téléphonique est devenu une nécessité quotidienne.

Que vous soyez un professionnel cherchant à optimiser votre réseau ou simplement quelqu’un qui aime garder ses contacts personnels bien organisés, vous avez probablement déjà rencontré des numéros de téléphone formatés de manière inconsistante.

Aujourd’hui, je vais partager avec vous comment un script Google Apps Script peut transformer votre gestion de contacts en rendant tous vos numéros conformes à la norme française (+33 x xx xx xx xx), peu importe comment ils ont été initialement enregistrés.

L’importance d’une organisation cohérente

Avant de plonger dans le script, réfléchissons un instant à pourquoi cela est important. Un format uniforme pour les numéros de téléphone non seulement facilite la lecture et la recherche dans votre liste de contacts, mais peut aussi prévenir des erreurs lors de l’utilisation de services automatisés, comme l’envoi de SMS ou d’appels internationaux. En normalisant le format de vos numéros de téléphone, vous assurez une cohérence qui peut grandement simplifier votre communication.

Le script magique

Le script que je propose utilise Google Apps Script, un puissant outil permettant d’automatiser des actions au sein des applications Google. Pour notre cas, le script va parcourir tous vos contacts Google, vérifier le format de chaque numéro de téléphone, et le mettre à jour si nécessaire selon la norme française. Voici une vue d’ensemble de son fonctionnement :

  1. Reformatage des Numéros de Téléphone : Le script analyse chaque numéro, enlève les caractères non numériques, vérifie le format et, si le numéro est national (commençant par 0), il le reformate en ajoutant l’indicatif international français (+33), tout en restructurant le numéro pour une meilleure lisibilité.
  2. Mise à Jour sélective : Plutôt que de mettre à jour aveuglément tous les contacts, le script vérifie d’abord si une modification est nécessaire. Cette étape assure une utilisation minimale des ressources et évite les mises à jour inutiles.
  3. Backoff Exponentiel : Pour éviter de dépasser les quotas d’utilisation de l’API Google People, le script implémente une stratégie de backoff exponentiel, réessayant avec des intervalles de temps croissants en cas d’erreur liée au dépassement de quota.

Mise en place du script

Pour utiliser ce script, vous aurez besoin d’un compte Google et d’un accès à Google Apps Script. Créez un nouveau projet Apps Script depuis Google Drive ou Sheets, collez le code du script, et exécutez-le. Vous pourriez avoir à autoriser le script à accéder à vos contacts la première fois.

// Fonction pour reformater les numéros de téléphone selon la norme française
function reformaterNumeroTelephone(numeroTelephone) {
  var numeroNettoye = numeroTelephone.replace(/\D/g, '');
  if (numeroNettoye.startsWith('33')) {
    numeroNettoye = '+' + numeroNettoye;
  } else if (numeroNettoye.startsWith('0')) {
    numeroNettoye = '+33' + numeroNettoye.substring(1);
  }
  if (numeroNettoye.length == 12 && numeroNettoye.startsWith('+33')) {
    return numeroNettoye.replace(/^\+33(\d)(\d{2})(\d{2})(\d{2})(\d{2})$/, '+33 $1 $2 $3 $4 $5');
  } else {
    return numeroNettoye;
  }
}

function mettreAJourNumerosDeTelephone() {
  backoffExponentiel(function() {
    var contacts = [];
    var jetonPage;
    do {
      var reponse = People.People.Connections.list('people/me', {
        pageSize: 100,
        personFields: 'names,phoneNumbers,metadata',
        pageToken: jetonPage,
      });
      if (reponse.connections) {
        contacts = contacts.concat(reponse.connections);
      }
      jetonPage = reponse.nextPageToken;
    } while (jetonPage);

    contacts.forEach(contact => {
      if (contact.phoneNumbers && contact.phoneNumbers.length > 0) {
        let miseAJourNecessaire = false;
        const numerosMisAJour = contact.phoneNumbers.map(numero => {
          const numeroOriginal = numero.value;
          const numeroFormate = reformaterNumeroTelephone(numeroOriginal);
          if (numeroOriginal !== numeroFormate) {
            miseAJourNecessaire = true; // Marquer pour mise à jour si le numéro reformatté est différent
            return { value: numeroFormate, type: numero.type };
          } else {
            return numero; // Conserver le numéro original si aucun changement n'est nécessaire
          }
        });

        if (miseAJourNecessaire) {
          const requeteMiseAJour = {
            etag: contact.etag,
            phoneNumbers: numerosMisAJour
          };

          try {
            People.People.updateContact(requeteMiseAJour, contact.resourceName, {
              updatePersonFields: 'phoneNumbers'
            });
            Logger.log('Contact mis à jour : ' + (contact.names ? contact.names[0].displayName : 'Sans nom'));
          } catch (e) {
            Logger.log('Erreur lors de la mise à jour du contact : ' + e.message);
          }
        }
      }
    });
  });
}

function backoffExponentiel(fonctionAppel) {
  var tentativesMax = 5;
  var tentative = 0;
  while (tentative < tentativesMax) {
    try {
      fonctionAppel();
      break; // Si l'appel réussit, sortir de la boucle
    } catch (e) {
      if (e.toString().includes("Quota exceeded")) {
        if (tentative == tentativesMax - 1) {
          Logger.log('Tentative finale, échec après ' + tentativesMax + ' tentatives. Attendre plus longtemps.');
          Utilities.sleep(10000); // Attendre plus longtemps avant la dernière tentative
        } else {
          var delai = Math.pow(2, tentative) * 1000; // Délai exponentiel
          Utilities.sleep(delai);
        }
        tentative++;
      } else {
        // Pour les erreurs non liées au quota, log l'erreur et sortir
        Logger.log('Erreur non liée au quota : ' + e.message);
        break;
      }
    }
  }
  if (tentative == tentativesMax) {
    Logger.log('La mise à jour des contacts a échoué après ' + tentativesMax + ' tentatives.');
  }
}

Conclusion

Automatiser la gestion de vos contacts peut vous faire économiser du temps et des efforts considérables. Ce script est un exemple de comment un peu de code peut apporter une grande valeur à vos routines quotidiennes. Si vous avez des centaines, voire des milliers de contacts, ce script Google Apps Script est la solution parfaite pour assurer que tous vos numéros de téléphone sont non seulement uniformes mais aussi conformes aux standards internationaux.

Je vous propose dans un autre article de gérer les noms et prénoms de vos contacts dans Google Contacts.


1 réflexion au sujet de « Comment garder vos numéros de téléphone de Google Contacts impeccablement organisés ? »

Laisser un commentaire