Hello everyone,
i am new to callin.io and I am trying to build an all-around agent. For now, I want to automate my calendar (Outlook). To get more options, I am using the HTTP Request node to access the Microsoft Graph API. Right now, I am stuck because the agent won't use my given tool. I would appreciate any help!
Describe the problem/error/question
I am encountering the following issue when I execute my flow: My AI agent is not calling the connected tool, even though it is active.
What is the error message (if any)?
Problem description: Problem in Node AI Agent (Received tool input did not match expected schema)
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
Share the output returned by the last node
Information on your callin.io setup
- callin.io version:
- Database (default: SQLite):
- callin.io EXECUTIONS_PROCESS setting (default: own, main):
- Running callin.io via (Docker, npm, callin.io cloud, desktop app):
- Operating system:
Hey,
Are you using {placeholder} or $fromAI
?
I believe the HTTP Request tool is compatible only with {placeholder}.
You can share your workflow here so we can examine it more closely.
Paste it into a code block like this
Hello,
Here is my HTTP request tool configuration using JSON and placeholders:
```json
{
“nodes”: [
{
“parameters”: {
“toolDescription”: “Creates Events in the user’s calendar”,
“method”: “POST”,
“url”: “ https://graph.microsoft.com/v1.0/me/calendar/events ”,
“authentication”: “predefinedCredentialType”,
“nodeCredentialType”: “microsoftOutlookOAuth2Api”,
“sendBody”: true,
“specifyBody”: “json”,
“jsonBody”: “{n "allowNewTimeProposals": true,n "body": {n "content": "{content}",n "contentType": "html"n },n "end": {n "dateTime": "{enddateTime}",n "timeZone": "Europe/Berlin"n },n "start": {n "dateTime": "{startdateTime}",n "timeZone": "Europe/Berlin"n },n "hideAttendees": {hideAttendees},n "importance": "{importance}",n "isAllDay": {isAllDay},n "isOnlineMeeting": {isOnlineMeeting},n "isReminderOn": true,n "location": {n "address": {{address}},n "displayName": "{locationdisplayName}"n },n "onlineMeetingProvider": {onlineMeetingProvider},n "reminderMinutesBeforeStart": {reminderMinutesBeforeStart},n "responseRequested": true,n "sensitivity": "{sensitivity}",n "showAs": "{showAs}",n "subject": "{subject}",n "categories": [ {categories} ],n "attendees": [ {attendees} ],n "recurrence": {{recurrence}} n}”,
“placeholderDefinitions”: {
“values”: [
{
“name”: “content”,
“description”: “The content of the event in html.”,
“type”: “string”
},
{
“name”: “enddateTime”,
“description”: “The date and time that the event ends using the "Europe/Berlin" time zone and ISO 8601 format.”,
“type”: “string”
},
{
“name”: “hideAttendees”,
“description”: “Determines whether attendees can see each other in the event invitation”,
“type”: “boolean”
},
{
“name”: “importance”,
“description”: “The importance of the event. The possible values are: low, normal, high.”,
“type”: “string”
},
{
“name”: “isAllDay”,
“description”: “Set to true if the event lasts all day. If true, regardless of whether it’s a single-day or multi-day event, start, and endtime must be set to midnight and be in the same time zone.”,
“type”: “boolean”
},
{
“name”: “isOnlineMeeting”,
“description”: “Indicates whether an event or meeting is created as an online meeting”,
“type”: “boolean”
},
{
“name”: “startdateTime”,
“description”: “The date and time that the event starts using the "Europe/Berlin" time zone and ISO 8601 format.”,
“type”: “string”
},
{
“name”: “locationdisplayName”,
“description”: “The name associated with the location.”,
“type”: “string”
},
{
“name”: “address”,
“description”: “Represents the physical address associated with an event’s location. If there is no physical address for the event give the value null.”,
“type”: “json”
},
{
“name”: “onlineMeetingProvider”,
“description”: “Represents the online meeting service provider. The possible values are "teamsForBusiness". If the event isn’t an online meeting give the value null.”,
“type”: “string”
},
{
“name”: “reminderMinutesBeforeStart”,
“description”: “The number of minutes before the event start time that the reminder alert occurs.”,
“type”: “number”
},
{
“name”: “sensitivity”,
“description”: “The sensitivity field specifies the sensitivity level of the event.|Possible values are: normal, personal, private, and confidential.”,
“type”: “string”
},
{
“name”: “showAs”,
“description”: “Specifies the availability status of the event.|It determines how the event is displayed on the calendar of the organizer and attendees in terms of availability. Possible values are: normal, personal, private, and confidential.”,
“type”: “string”
},
{
“name”: “subject”,
“description”: “The text of the event’s subject line.”,
“type”: “string”
},
{
“name”: “categories”,
“description”: “The categories associated with the event. If there are no categories give the value null.”,
“type”: “json”
},
{
“name”: “recurrence”,
“description”: “The recurrence pattern for the event. If there is no recurrence then give the value null”,
“type”: “json”
}
]
},
“optimizeResponse”: true
},
“type”: “@callin.io/callin.io-nodes-langchain.toolHttpRequest”,
“typeVersion”: 1.1,
“position”: [
420,
220
],
“id”: “2a5d46af-d3d7-43fb-827e-3a3a2fd6c087”,
“name”: “CreateEvent”,
“credentials”: {
“microsoftOutlookOAuth2Api”:
{
“name”: “Microsoft Outlook account”
}
}
}
],
“connections”: {
“CreateEvent”:
{
“ai_tool”: [
“”
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”:
}
}
```
Could you please place it within a code block?
This is a code block:
Code goes here
Otherwise, the characters won't be preserved, and I won't be able to copy and paste accurately.
Does this work? If not, how can I create a code block?
You can try this approach.
Since the request is quite intricate, ensure the AI has a thorough understanding of each parameter.
I've made some modifications to the parameter types and refined several descriptions, though further testing is definitely recommended.
I've also excluded the "recurrence" object from the request as it's one of the more complex elements. Try implementing it without this object first, and then integrate it later once you're comfortable with handling complex placeholders.
The core principle here is to use clear descriptions, correct variable formats, and persistent testing to achieve the desired outcome.
If my response addresses your question, please consider marking it as a solution.
Hi,
It seems this issue is related to the current version, as I've encountered the same error in some of my workflows, even though my callin.io instance is fully updated.
Here’s a workaround you can try:
- Instead of using the “HTTP Request Tool” node directly, you can implement the “Call callin.io Workflow Tool” node to trigger a sub-workflow.
- Within this subworkflow, start with the “When Executed by Another Workflow” node, which allows you to define your desired input schema.
- Following this node, you can then place the “HTTP Request” node to perform your API call.
Returning to the main workflow (the AI Agent), the “Call callin.io Workflow Tool” node enables you to specify all inputs that the AI should set.
Could you also let me know if you eventually managed to resolve the issue without needing this workaround?
I’ve attached a screenshot illustrating how this workflow setup could look.
I'll give this a try tomorrow and share my feedback. Thanks for the assistance!
Hey,
I'm not sure why the HTTP Request node works when used with the callin.io workflow tool but not independently. I'll test your suggestion tomorrow. Thanks for the response!
Hi,
Apologies for the delayed response. This issue persists; the AI still seems reluctant to utilize the tool.
Best regards,
Automate.it
But aren’t we limited in how many workflows we can get activated?
So the AI started to call this tool. But I couldn’t put any placeholders to let them get defined by the AI. How am I able to tell the AI to put certain fields into it?
BR
Automate.it
Hi,
Could you please share your workflow setup?
- Using the “When Executed by Another Workflow” trigger, you should be able to define your Workflow Input Schema.
- Subsequently, within the “Call n8n Workflow Tool”, you can specify how the AI should populate the input data that will be transmitted to the other workflow.
Tip:
If you are using the cloud version, there is indeed a limit on the number of active workflows.
However, you can utilize a single “When Executed by Another Workflow” trigger within the same workflow that invokes the AI Agent.
In your specific scenario, you can instruct the AI Agent to provide an action
parameter (as an example) when making the call to the subworkflow.
This parameter could accept values such as createEvent or getEvent. Within your subworkflow, you can then employ a “Switch” node to route the execution flow through different paths based on the action, with each path configured for its appropriate HTTP request.
I'm encountering the same problem.
I also have a straightforward Workflow. It features an AI Agent equipped with two MCP tools: one for listing available tools and another for executing selected ones.
I attempted to compel the AI to utilize the execution tool, but it consistently avoided doing so, even when experimenting with different AI models.
Within the execution tool, I configured the following:
tool parameter: {{ $fromAI('Tool_Parameters', '', 'json') }}
Despite this setup, the AI continues to bypass the use of the execute tool.