Le mode vocal de Claude modifie vraiment ton Google Agenda. Il ne le fait que quand tu parles.
Depuis la mise à jour du 23 juillet 2026, le vocal tourne sur Opus, Sonnet et Haiku, parle enfin français, et se connecte à Gmail et Agenda via OAuth. Dis « décale mon rendez-vous de 14 h à demain », il modifie l'agenda pour de bon. C'est bluffant à l'usage. Mais si tu penses « automatisation », deux limites tombent tout de suite : il rédige les mails sans les envoyer, et il n'agit que sur ton ordre vocal. Aucun événement, aucun webhook, aucune boucle en arrière-plan ne le réveille. Pour un process répétable, le déclencheur est du code que tu écris — et voici à quoi il ressemble.
Où le vocal s'arrête, précisément
Le vocal fonctionne en tour de rôle : écouter → réfléchir → répondre. C'est un assistant synchrone, piloté par la voix. Rien d'autre ne le lance. Anthropic n'a d'ailleurs pas retouché le modèle vocal lui-même dans cette mise à jour ; ce qui change, c'est l'accès aux apps, pas la mécanique conversationnelle.
Ce qu'il fait, quand tu parles :
- crée / modifie / supprime un événement, trouve des créneaux, gère les récurrences, ajoute un lien Meet ;
- rédige un brouillon dans Gmail ;
- se connecte à une seule app en gratuit (Haiku), à plusieurs en payant.
Ce qu'il ne fait pas :
- envoyer le mail — le clic « Envoyer » reste manuel, à chaque fois ;
- se déclencher sans toi : aucun cron, aucune écoute de la boîte ;
- tourner pendant que tu dors.
La ligne de partage tient en un mot. Un assistant attend qu'on lui parle, un agent réagit à un événement ; la différence, ce n'est pas le modèle, c'est le déclencheur.
Le déclencheur, c'est du code — pas une phrase
« Quand un client écrit pour un rendez-vous, réserve un créneau et confirme » : cette règle n'existe nulle part dans le vocal. Pour l'obtenir, il faut quelque chose qui écoute la boîte en continu. Sur Gmail, ça passe par users.watch et une notification Pub/Sub à chaque nouveau message.
import { google } from "googleapis";
const gmail = google.gmail({ version: "v1", auth });
await gmail.users.watch({
userId: "me",
requestBody: {
topicName: "projects/mon-projet/topics/gmail-inbound",
labelIds: ["INBOX"],
},
});
Deux pièges que la doc mentionne à peine. D'abord, watch expire au bout de 7 jours : si tu ne le renouvelles pas avec un cron, les notifications s'arrêtent en silence, sans erreur. Ensuite, la notification Pub/Sub ne contient pas le mail — juste un historyId. Tu récupères le contenu réel en rappelant users.history.list depuis le dernier historyId connu. Beaucoup de gens perdent une soirée là-dessus en cherchant le corps du message dans le payload.
Extraire l'intention avec l'API Claude
Une fois le mail en main, tu délègues à Claude le seul truc qu'il fait mieux qu'une regex : comprendre une demande écrite en langage humain. Le tool use avec tool_choice forcé te renvoie du JSON structuré. Pas de la prose à parser.
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic();
const tools = [{
name: "extract_meeting",
description: "Détecte une demande de rendez-vous dans un email",
input_schema: {
type: "object",
properties: {
wants_meeting: { type: "boolean" },
duration_minutes: { type: "integer" },
preferred_dates: { type: "array", items: { type: "string" } },
attendee_email: { type: "string" },
},
required: ["wants_meeting"],
},
}];
const res = await anthropic.messages.create({
model: "claude-haiku-4-5",
max_tokens: 512,
tools,
tool_choice: { type: "tool", name: "extract_meeting" },
messages: [{ role: "user", content: emailBody }],
});
const intent = res.content.find(c => c.type === "tool_use").input;
Haiku suffit largement pour ce tri, et il coûte quelques centimes pour mille mails. Garde en tête que ces appels sont facturés au token — exactement comme le vocal, qui décompte chaque conversation de ton quota de plan. L'agent n'est pas gratuit, il est juste prévisible.
Réserver vraiment : freebusy puis events.insert
Claude a dit oui. Reste à trouver un trou dans l'agenda, puis à poser l'événement. freebusy.query te donne les blocs occupés, events.insert crée le rendez-vous.
const calendar = google.calendar({ version: "v3", auth });
const fb = await calendar.freebusy.query({
requestBody: {
timeMin: "2026-08-03T08:00:00+02:00",
timeMax: "2026-08-03T18:00:00+02:00",
timeZone: "Europe/Paris",
items: [{ id: "primary" }],
},
});
const busy = fb.data.calendars.primary.busy; // à toi de calculer le créneau libre
await calendar.events.insert({
calendarId: "primary",
sendUpdates: "all", // sinon l'invité n'est jamais prévenu
conferenceDataVersion: 1,
requestBody: {
summary: `RDV avec ${intent.attendee_email}`,
start: { dateTime: slot.start, timeZone: "Europe/Paris" },
end: { dateTime: slot.end, timeZone: "Europe/Paris" },
attendees: [{ email: intent.attendee_email }],
conferenceData: { createRequest: { requestId: crypto.randomUUID() } },
},
});
Le piège qui coûte des rendez-vous fantômes : sendUpdates vaut false par défaut. L'événement apparaît dans ton agenda, mais l'invité ne reçoit rien. Tu crois avoir automatisé la confirmation, elle n'est jamais partie. Deuxième piège, le fuseau : sans timeZone explicite, un dateTime naïf atterrit à la mauvaise heure selon le serveur. Mets toujours l'IANA.
Le scope qui bloque l'envoi
Pourquoi le vocal rédige un brouillon au lieu d'envoyer ? Parce que gmail.send est un restricted scope chez Google. En production, il déclenche une vérification OAuth et un audit de sécurité CASA — long, payant, contraignant. Le connecteur de Claude reste volontairement en gmail.compose : il crée le brouillon, il ne franchit pas cette porte.
Si tu construis l'agent qui envoie vraiment, c'est toi qui prends en charge cette vérification, et donc la responsabilité d'une IA qui écrit dans ta boîte sans supervision. Pense aussi à la révocation. Un accès OAuth accordé se coupe dans myaccount.google.com/permissions, et tu devrais pouvoir le faire en une minute avant de connecter quoi que ce soit à ta messagerie. On détaille cette hygiène des permissions dans notre analyse produit du mode vocal.
Assistant pour l'ad-hoc, agent pour le répétable
Le verdict est net. Le vocal de Claude est excellent pour l'imprévu : « décale, résume ma journée, prépare un brouillon pour Paul ». Il gère l'ad-hoc mieux que n'importe quel raccourci clavier. Mais un process qui doit tourner sans toi — client écrit, créneau réservé, confirmation envoyée — n'est pas un problème de commande vocale, c'est un problème d'architecture : un déclencheur, un parseur, deux appels d'API, une gestion d'erreurs. Du code, en somme.
C'est là que nous prenons le relais. Neova est un studio de développement : nous construisons ces agents sur mesure, avec l'IA et les technologies de pointe, pour qu'un process répétable s'exécute seul. Si tu préfères apprendre à les coder toi-même, on montre exactement cette bascule assistant → agent dans notre guide pour créer une app avec Claude Code et dans le guide de l'agent vocal côté service client.
Le vocal te fait gagner des minutes. Un agent te rend des heures. À toi de voir laquelle des deux tu veux vraiment.
Top comments (0)