J’ai récemment ouvert WhatsApp Web et compté : 52 conversations où l’autre attendait une réponse de moi, perdues dans des centaines de groupes et de notifications.
Le filtre natif (Toutes / Non lues / Favoris / Groupes) ne propose pas de vue « à répondre ». Non lues ne capture que les messages réellement non lus, pas ceux que j’ai ouverts à 23h en oubliant ensuite d’y répondre. J’ai donc écrit une petite extension Chrome, environ 250 lignes de JavaScript sans dépendance, pour avoir cette vue manquante.

L’idée
Chaque ligne de la sidebar affiche un aperçu du dernier message. Quand c’est moi qui l’ai envoyé, l’aperçu inclut une petite icône (les checkmarks envoyé / livré / lu). Quand c’est l’autre, aucune icône n’est rendue. La règle est donc simple : icône présente = répondu, icône absente = non répondu.
function classifyRow(row) {
const sentByMe = row.querySelector(SENT_ICONS);
if (sentByMe || otherPersonReacted(row)) {
row.classList.add('wa-answered');
return true;
}
row.classList.add('wa-unanswered');
return false;
}Un MutationObserver ciblé sur #pane-side surveille la sidebar et applique la classe à mesure que les conversations bougent. Une règle CSS pilotée par un bouton de filtre masque les lignes déjà répondues.
Le piège des réactions
La première version se trompait sur un cas. Quand quelqu’un réagit à un de mes messages avec un emoji, l’aperçu devient une ligne de notification :
Margaux a réagi par 😂 à : « Sur ceux qui ont testé… »
Pas de checkmark sur cette ligne, alors même que le dernier message envoyé est le mien. Il faut détecter ces phrases de réaction par langue et les traiter comme « répondu » :
const REACTION_PATTERNS = [
/ba réagi parb.{1,30}bàb/i, // FR
/breactedb.{1,30}btob/i, // EN
/breagiertb/i, // DE
/breaccionób/i, // ES
/breagitob/i, // IT
/breagiub/i, // PT
/bgereageerdb/i, // NL
];La regex est appliquée aux éléments span[title] et span[dir] uniquement, sinon un contact dont le nom contient « réagi » déclencherait aussi une correspondance.
Publier sur le Chrome Web Store
C’était aussi ma première publication d’extension Chrome. On paie 5 dollars de frais développeur une seule fois et ensuite on attend. Je n’ai eu aucun souci avec la validation, donc je suppose que mon extension est assez simple.
