The operation failed with an error. [400] Invalid requests[0]...
Le suffixe après requests[0] est la partie utile. Il nomme l'opération, le champ ou l'indice refusé par Google. Le 0 désigne le premier élément du tableau de requêtes Google, pas un numéro de module Make ni un numéro de ligne de feuille.
Réduisez le corps en échec à une requête contre un fichier jetable. Ne réessayez pas le lot de production complet en changeant plusieurs champs simultanément.
1. Identifier lequel des trois endpoints est appelé
Ces chemins se ressemblent, mais acceptent des corps différents :
| Travail | Suffixe Google | Structure supérieure |
|---|---|---|
| Remplacer du texte ou modifier un Doc | /v1/documents/DOCUMENT_ID:batchUpdate | requests avec opérations Docs |
| Modifier structure, format ou cellules typées de Sheets | /v4/spreadsheets/SPREADSHEET_ID:batchUpdate | requests avec opérations Sheets |
| Écrire des valeurs dans des plages Sheets | /v4/spreadsheets/SPREADSHEET_ID/values:batchUpdate | valueInputOption et data |
Références officielles : Docs batchUpdate, Sheets batchUpdate, Sheets values.batchUpdate.
Pour des valeurs ordinaires en A2:B2, utilisez values. Pour userEnteredValue typé ou le formatage, utilisez un lot requests de Sheets. Pour du texte de document, utilisez une requête Docs. Ces corps ne sont pas interchangeables.
2. Vérifier l'URL de base du module Make
Pour Docs, utilisez Google Docs › Make an API Call. L'URL est relative à https://docs.googleapis.com/. Saisissez :
/v1/documents/DOCUMENT_ID:batchUpdate
Pour Sheets, utilisez Google Sheets › Make an API Call. L'URL est relative à https://sheets.googleapis.com/v4/. Saisissez l'un des chemins suivants :
/spreadsheets/SPREADSHEET_ID:batchUpdate
/spreadsheets/SPREADSHEET_ID/values:batchUpdate
Réglez Method sur POST et envoyez du JSON avec Content-Type: application/json. La connexion fournit l'autorisation ; ne collez pas un bearer token sans rapport. Bases et connexions sont documentées pour Google Docs et Google Sheets.
Remplacez les identifiants en majuscules par ceux de fichiers de test. Vérifiez l'entrée développée dans l'exécution en échec. Le champ configuré peut sembler correct alors que sa valeur mappée est vide ou désigne un autre fichier.
3. Valider un remplacement littéral dans Docs
Créez un Doc jetable contenant NAME_SLOT. Utilisez ce corps sans réponses de formulaire mappées :
{
"requests": [
{
"replaceAllText": {
"containsText": {
"text": "NAME_SLOT",
"matchCase": true
},
"replaceText": "Jamie Quinn"
}
}
]
}
Relisez le document enregistré. Le nom fictif doit remplacer le marqueur. NAME_SLOT est volontairement du texte simple : l'exemple ne dépend pas de l'interprétation de {{...}} comme syntaxe de modèle Make.
Remplacez le nom littéral par une réponse mappée seulement lorsque cette requête fonctionne. Si la version littérale fonctionne et l'autre échoue, comparez les corps JSON finaux. Un guillemet ou un retour à la ligne peut casser du JSON assemblé manuellement.
Utilisez JSON › Create JSON avec une structure correspondant au corps ; voir Make JSON. Une syntaxe JSON valide ne prouve pas que les champs d'opération Google sont valides.
4. Valider séparément une écriture de valeurs Sheets
Créez un spreadsheet de test avec un onglet Intake. Utilisez /values:batchUpdate et ce corps :
{
"valueInputOption": "RAW",
"data": [
{
"range": "'Intake'!A2:B2",
"values": [["Jamie Quinn", 1234.56]]
}
]
}
Le nom est une chaîne JSON et le montant un nombre JSON. La plage utilise le titre de l'onglet. Gardez data comme tableau et values comme tableau de lignes. N'enveloppez pas ce corps dans requests et n'y placez pas de replaceAllText Docs.
Inspectez A2 et B2 après l'appel. Une réponse réussie contre le mauvais spreadsheet reste un test échoué pour votre scénario.
5. Vérifier les cellules typées et masques de champs
Pour Sheets updateCells, utilisez l'endpoint structurel batchUpdate. Cet exemple écrit deux cellules à partir de A2 :
{
"requests": [
{
"updateCells": {
"start": {
"sheetId": 12345,
"rowIndex": 1,
"columnIndex": 0
},
"rows": [
{
"values": [
{"userEnteredValue": {"stringValue": "Jamie Quinn"}},
{"userEnteredValue": {"numberValue": 1234.56}}
]
}
],
"fields": "userEnteredValue"
}
}
]
}
12345 est un identifiant d'onglet illustratif. Remplacez-le par le vrai sheetId numérique. L'identifiant du fichier spreadsheet est différent.
La référence des requêtes Sheets décrit start ou range et un masque relatif à CellData. La référence des types définit numberValue numérique et les indices depuis zéro. A2 correspond à ligne 1 et colonne 0.
Gardez le test limité. Une grande range avec trop peu de données peut effacer les champs masqués dans le reste de la zone. N'utilisez pas fields: "*" pour cacher une incertitude sur les champs à modifier.
Erreurs courantes et corrections
Le champ appartient à l'autre API
Une opération Docs ne fonctionne pas dans un lot requests Sheets. Comparez le nom refusé à la référence de l'endpoint réellement appelé. Reconstruisez le plus petit corps valide pour cet endpoint.
numberValue contient du texte formaté
"numberValue": "€1.234,56" est une chaîne, pas un nombre JSON. Parsez le montant selon un format déclaré avant sérialisation. Envoyez 1234.56 comme nombre seulement si c'est la valeur voulue et gardez la devise séparément. Voir Invalid number dans les réponses de formulaire.
L'identifiant d'onglet est incorrect
Lisez les métadonnées du spreadsheet et associez le titre au sheetId numérique. La position visuelle d'un onglet n'est pas son identifiant. S'il a été recréé, actualisez les métadonnées plutôt que réutiliser l'ancienne valeur.
Un indice sort du document actuel
Pour les opérations indexées, récupérez d'abord la structure actuelle. Validez replaceAllText pour un marqueur simple avant d'ajouter des éditions par indice.
Le document comporte plusieurs onglets
Le guide des onglets Docs précise que replaceAllText peut toucher tous les onglets sans critères de tabs. Limitez le remplacement si le même marqueur figure ailleurs.
La révision requise est périmée
Si vous envoyez writeControl.requiredRevisionId, comparez-le à la révision actuelle. Docs peut rejeter une révision obligatoire ancienne. Relisez le document ; retirer la protection de concurrence sans inspection n'est pas une réparation.
Retry échoue encore
Répéter une entrée mal formée ne corrige pas son schéma. Conservez l'entrée, réparez une cause et testez un fichier jetable. Ne sautez pas l'écriture pour considérer ensuite le document comme mis à jour.
Crédits et effets d'un lot en échec
Un module ordinaire d'appel API exécuté donne une estimation d'un crédit. Une lecture puis une écriture donnent deux. Plusieurs sous-requêtes dans un appel restent une exécution de module Make. Vérifiez l'historique ; voir Make Credits.
Les lots requests de Docs et Sheets valident avant application. Un élément invalide bloque les changements de ce lot. Cela n'annule pas un document créé ou une ligne ajoutée par un module Make antérieur. Inspectez ces résultats avant de relancer tout le scénario.
Tests
- Conservez le suffixe complet et l'entrée développée de l'erreur.
- Confirmez API, chemin, méthode et identifiant du fichier.
- Envoyez une requête littérale à un fichier de test.
- Relisez la cible et vérifiez exactement texte ou cellules modifiés.
- Remplacez un littéral par une réponse mappée et comparez le corps.
- Testez ponctuation et format numérique déclaré.
- Ajoutez les autres requêtes une à une et contrôlez chaque changement.
Arrêtez-vous à la première nouvelle requête qui échoue. Ne réordonnez pas le lot simplement pour déplacer l'indice signalé.
Utiliser une collecte plus simple si elle convient
Pour recueillir des prospects de formulaire dans Sheets et avertir Slack, commencez par le modèle gratuit Lead Capture → Sheets + Slack. C'est un flux de collecte distinct, pas un correctif pour un corps batchUpdate arbitraire.
Pas encore de compte ? Créer un compte Make gratuit: affiliate link. Flowpaja peut recevoir une commission sans frais supplémentaires pour vous.