Loading...
Loading...
Fast automation platform error resolver for Power Automate, n8n, Make, Zapier and other platforms. Handles common patterns like 401/403 auth errors, 429 throttling, and data format issues. Provides immediate fixes without deep research for well-known error patterns. Use when error matches common scenarios (status codes 401, 403, 404, 429, timeout, parse JSON failures). For complex or unknown errors, defer to automation-debugger skill. When the user outputs some code/json snippets and ask for a quick fix, this skill will provide immediate solutions.
npx skill4agent add macroman5/automationhelper_plugins automation-quick-fix// In filters/queries, check the where clause:
// Array of STRINGS (primitives):
"where": "@contains(item(), 'text')" // ← item() without property
// Array of OBJECTS:
"where": "@contains(item()?['Name'], 'text')" // ← item()?['Property']item()items('Loop')?['Property']items('Loop')?['Property']// Check your filter:
"where": "@contains(item(), 'value')" // ← This means array of STRINGS!
// But loop tries:
"value": "@items('Loop')?['PropertyName']" // ← ERROR: Can't access property on string!{
"actions": {
"Scope_With_Auth_Handling": {
"type": "Scope",
"actions": {
"Your_Action": {
"type": "ApiConnection",
"inputs": { /* your config */ },
"authentication": {
"type": "Raw",
"value": "@parameters('$connections')['shared_sharepointonline']['connectionId']"
}
}
}
},
"Catch_Auth_Error": {
"type": "Terminate",
"inputs": {
"runStatus": "Failed",
"runError": {
"code": "AuthenticationFailed",
"message": "Please re-authenticate the connection in Power Automate"
}
},
"runAfter": {
"Scope_With_Auth_Handling": ["Failed"]
}
}
}
}{
"actions": {
"Apply_to_each_FIXED": {
"type": "Foreach",
"foreach": "@body('Get_items')?['value']",
"runtimeConfiguration": {
"concurrency": {
"repetitions": 1
}
},
"actions": {
"Your_API_Action": {
"type": "ApiConnection",
"inputs": { /* your config */ },
"runAfter": {}
},
"Delay_1_Second": {
"type": "Wait",
"inputs": {
"interval": {
"count": 1,
"unit": "Second"
}
},
"runAfter": {
"Your_API_Action": ["Succeeded"]
}
}
}
}
}
}runtimeConfiguration.concurrency.repetitions: 1{
"actions": {
"Parse_JSON_FIXED": {
"type": "ParseJson",
"inputs": {
"content": "@body('HTTP')",
"schema": {
"type": "object",
"properties": {
"id": {"type": "string"},
"name": {"type": "string"},
"value": {"type": ["string", "null"]}
}
}
}
},
"Safe_Access_Property": {
"type": "Compose",
"inputs": "@coalesce(body('Parse_JSON_FIXED')?['value'], 'default')",
"runAfter": {
"Parse_JSON_FIXED": ["Succeeded"]
}
}
}
}?['property']coalesce()"null"{"type": ["string", "null"]}{
"actions": {
"Do_until_FIXED": {
"type": "Until",
"expression": "@equals(variables('Complete'), true)",
"limit": {
"count": 60,
"timeout": "PT1H"
},
"actions": {
"Your_Action": {
"type": "Compose",
"inputs": "@variables('Data')"
},
"Check_Complete": {
"type": "SetVariable",
"inputs": {
"name": "Complete",
"value": "@greater(length(variables('Data')), 0)"
},
"runAfter": {
"Your_Action": ["Succeeded"]
}
}
}
}
}
}limit.countlimit.timeout{
"actions": {
"Check_File_Size_FIXED": {
"type": "If",
"expression": {
"and": [{
"lessOrEquals": [
"@triggerBody()?['Size']",
50000000
]
}]
},
"actions": {
"Process_Normal_File": {
"type": "ApiConnection",
"inputs": { /* your file action */ }
}
},
"else": {
"actions": {
"Log_Large_File": {
"type": "Compose",
"inputs": "File over 50MB - skipping"
}
}
}
}
}
}{
"actions": {
"Try_Get_Item": {
"type": "Scope",
"actions": {
"Get_Item": {
"type": "ApiConnection",
"inputs": { /* your get action */ }
}
}
},
"Handle_Not_Found": {
"type": "If",
"expression": {
"and": [{
"equals": [
"@result('Try_Get_Item')[0]['status']",
"Failed"
]
}]
},
"runAfter": {
"Try_Get_Item": ["Failed", "Succeeded"]
},
"actions": {
"Create_If_Missing": {
"type": "ApiConnection",
"inputs": { /* your create action */ }
}
},
"else": {
"actions": {
"Use_Existing": {
"type": "Compose",
"inputs": "@body('Get_Item')"
}
}
}
}
}
}result()// BAD
@body('Get_Item')['MissingProperty']
// GOOD
@body('Get_Item')?['MissingProperty']
// BETTER (with default)
@coalesce(body('Get_Item')?['MissingProperty'], 'default_value')// BAD - concatenating string and number
@concat('Value: ', variables('NumberVariable'))
// GOOD
@concat('Value: ', string(variables('NumberVariable')))// BAD - array might be empty
@first(body('Get_Items')?['value'])
// GOOD
@if(greater(length(body('Get_Items')?['value']), 0), first(body('Get_Items')?['value']), null)// BAD
@variables('NullableVar')
// GOOD
@if(empty(variables('NullableVar')), 'default', variables('NullableVar'))// BAD - format parameter outside formatDateTime()
toLower(formatDateTime(outputs('Action')?['body/Date'], 'yyyy-MM'))
// ↑
// This closes formatDateTime BEFORE format string!
// ERROR MESSAGE:
// "The template language function 'toLower' expects one parameter:
// the string to convert to lower casing. The function was invoked with '2' parameters."
// GOOD - format parameter INSIDE formatDateTime()
toLower(formatDateTime(outputs('Action')?['body/Date'], 'yyyy-MM'))
// ↑
// Format string is now INSIDE formatDateTime()// Original (broken):
@and(
contains(toLower(item()), 'cnesst'),
contains(
toLower(item()),
toLower(formatDateTime(outputs('Ajouter_une_ligne_à_un_tableau')?['body/Date d''événement CNESST']),'yyyy-MM'))
)
// Fixed expression (ready to copy-paste into Filter Query action):
@and(
contains(toLower(item()), 'cnesst'),
contains(
toLower(item()),
toLower(formatDateTime(outputs('Ajouter_une_ligne_à_un_tableau')?['body/Date d''événement CNESST'], 'yyyy-MM'))
)
)Error Code/Type
│
├── Data Structure Mismatch (item() vs item()?['Prop']) → ❌ Use automation-debugger (NOT quick fix)
│
├── 401/403 → Re-authenticate connection + Add error handling
│
├── 429 → Set concurrency=1 + Add delays
│
├── 404 → Add existence check + Handle not found case
│
├── Timeout → Add limits to Do until OR check file sizes
│
├── Parse JSON → Add schema + Use safe navigation (?[])
│
└── Expression Errors
├── "Function expects N parameters but was invoked with M" → Check parenthesis placement
├── Missing/null properties → Add ?[] + coalesce()
├── Type mismatch → Add string(), int() conversions
└── Array access → Add length checks + first()/last()Quick Fix: Function Parenthesis Placement Error
Pattern: formatDateTime() format parameter placed outside function call
Original (broken):
@and(contains(toLower(item()), 'text'), contains(toLower(item()), toLower(formatDateTime(outputs('Action')?['body/Date']),'yyyy-MM')))
Fixed expression (copy-paste ready):
@and(contains(toLower(item()), 'text'), contains(toLower(item()), toLower(formatDateTime(outputs('Action')?['body/Date'], 'yyyy-MM'))))
What changed: Moved 'yyyy-MM' format string INSIDE formatDateTime() parentheses| Connector | API Limit | Recommended Delay |
|---|---|---|
| SharePoint | 600/60s | 1 second |
| OneDrive | 100/60s | 3 seconds |
| HTTP | 600/60s | 1 second |
| Apply to each | 50 concurrent | Set to 1 for APIs |
Quick Fix: SharePoint Throttling (429)
Reduce concurrency and add delays:
[JSON snippet with concurrency + delay]
Apply these changes:
1. Set concurrency to 1
2. Add 1-second delay
3. Save and test
This limits you to 60 API calls/minute (well under 600/minute limit).Quick Fix: Parse JSON Property Access
Use safe navigation (?[]) and defaults:
[JSON snippet with coalesce()]
Changes needed:
1. Replace ['property'] with ?['property']
2. Add coalesce() for defaults
3. Test with sample data
This handles null/missing properties gracefully.Quick Fix: Function Parenthesis Placement Error
Pattern: formatDateTime() format parameter placed outside function call
Original (broken):
@and(
contains(toLower(item()), 'cnesst'),
contains(
toLower(item()),
toLower(formatDateTime(outputs('Ajouter_une_ligne_à_un_tableau')?['body/Date d''événement CNESST']),'yyyy-MM'))
)
Fixed expression (copy-paste ready):
@and(
contains(toLower(item()), 'cnesst'),
contains(
toLower(item()),
toLower(formatDateTime(outputs('Ajouter_une_ligne_à_un_tableau')?['body/Date d''événement CNESST'], 'yyyy-MM'))
)
)
What changed:
1. Moved 'yyyy-MM' format string INSIDE formatDateTime() parentheses (before the closing parenthesis)
2. The format parameter is now the second parameter of formatDateTime(), not a second parameter to toLower()
How to apply:
1. Open your Filter Query action in Power Automate
2. Delete the current expression
3. Paste the fixed expression above
4. Save and test with your datatoLower(formatDateTime(...), 'format')item()item()?['Property']