This workflow follows the Chainllm → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Planning Assistant 2",
"nodes": [
{
"parameters": {
"method": "POST",
"url": "http://pa-liferay:8080/o/graphql",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "query",
"value": "{ c{ vehicules{ items { vehiculeId immatriculation marque modele capaciteChargement } }, commandes{ \titems{ commandeId adresse volumeContenant } } } }"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-320,
-40
],
"id": "b6a3a2b3-831e-4832-948f-9888affc9dee",
"name": "Get Commandes and Vehicules",
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.data }}",
"hasOutputParser": true,
"messages": {
"messageValues": [
{
"message": "Vous \u00eates un plannificateur d'itin\u00e9raire.\nVous devez utiliser les donn\u00e9es de trafic pour vous proposer le meilleur ordre de passage.\nVous recevez une liste de v\u00e9hicules et une liste de commandes avec des adresses sous format JSON, voici un exemple :\n{\n \"data\": {\n \"c\": {\n \"vehicules\": {\n \"items\": [\n {\n \"vehiculeId\": 1, //ID du v\u00e9hicule\n \"immatriculation\": \"IJ-123-KL\",\n \"marque\": \"Iveco\",\n \"modele\": \"Daily\",\n \"capaciteChargement\": 19 //capacit\u00e9 de chargement en metre cube (m3)\n },\n {\n \"vehiculeId\": 2, //ID du v\u00e9hicule\n \"immatriculation\": \"EF-456-GH\",\n \"marque\": \"Peugeot\",\n \"modele\": \"Boxer\",\n \"capaciteChargement\": 15 //capacit\u00e9 de chargement en metre cube (m3)\n }\n ]\n },\n \"commandes\": {\n \"items\": [\n {\n \"commandeId\": 10, //Id de la commande\n \"adresse\": \"2 Rue Adolphe Pegoud, 78140 V\u00e9lizy-Villacoublay\", //adresse \n \"volumeContenant\": 5 //volume du contenant \u00e0 ramasser par le v\u00e9hicule en metre cube (m3)\n },\n {\n \"commandeId\": 20, //Id de la commande\n \"adresse\": \"33 Av. Henri Dunant, 91200 Athis-Mons\", //adresse\n \"volumeContenant\": 10 //volume du contenant \u00e0 ramasser par le v\u00e9hicule en metre cube (m3)\n },\n {\n \"commandeId\": 30, //Id de la commande\n \"adresse\": \"24 Rue Arago, 93000 Bobigny\", //adresse\n \"volumeContenant\": 2 //volume du contenant \u00e0 ramasser par le v\u00e9hicule en metre cube (m3)\n }\n ]\n }\n }\n }\n}//fin de l'exemple JSON\nVous devez planifier un itin\u00e9raire de passage pour chaque v\u00e9hicule afin de ramasser un certain volume de contenant \npour les commandes de la liste celon l'adresse fournie. \nIl faut suivre les r\u00e8gles suivantes :\n- Chaque v\u00e9hicule peut rouler entre 8:00 et 20:00.\n- Chaque v\u00e9hicule poss\u00e8de une capacit\u00e9 de chargement \u00e0 ne pas d\u00e9passer tout au long de sont trajet.\n- Chaque v\u00e9hicule doit partir de l'adresse suivante : 7 Rue Touzet Gaillard, 93400 Saint-Ouen-sur-Seine.\n- Un seul passage d'un seul v\u00e9hicule \u00e0 l'adresse d'une commande suffit pour un ramassage.\nCrit\u00e8res d'optimisation :\n- Minimiser la distance totale et le nombre de v\u00e9hicules utilis\u00e9s.\n\nVous devez me fournir un ordre de passage pour chaque v\u00e9hicule.\nLe r\u00e9sultat doit \u00eatre au format JSON comme l'exemple suivant :\n{\n \"data\": {\n \"c\": {\n \"plannings\": {\n \"items\": [\n {\n \"ordrePassage\": 1, \n \"vehiculeId\": 1,//ID du v\u00e9hicule\n \"commandeId\": 20 //Id de la commande\n },\n\t\t {\n \"ordrePassage\": 2, //Ordre de passage\n \"vehiculeId\": 1,//ID du v\u00e9hicule\n \"commandeId\": 10 //Id de la commande\n },\n\t\t {\n \"ordrePassage\": 1, //Ordre de passage\n \"vehiculeId\": 2,//ID du v\u00e9hicule\n \"commandeId\": 30 //Id de la commande\n }\n ]\n }\n }\n }\n}//fin exemple du r\u00e9sultat\n"
}
]
}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.5,
"position": [
-100,
-40
],
"id": "36489579-e468-4559-a1c1-38425383412f",
"name": "Basic LLM Chain"
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
"typeVersion": 1,
"position": [
-100,
160
],
"id": "399fbd1c-6bdc-4cbb-89a3-e0056c57b2fb",
"name": "Mistral Cloud Chat Model",
"credentials": {
"mistralCloudApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsonSchemaExample": "{\n \"data\": {\n \"c\": {\n \"plannings\": {\n \"items\": [\n {\n \"ordrePassage\": 1,\n \"vehiculeId\": 36422,\n \"commandeId\": 36428\n },\n {\n \"ordrePassage\": 2,\n \"vehiculeId\": 36422,\n \"commandeId\": 36430\n }\n ]\n }\n }\n }\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
80,
180
],
"id": "cadaf807-8269-455d-898e-339c8bcda52c",
"name": "Structured Output Parser"
},
{
"parameters": {
"httpMethod": "POST",
"path": "8a27cb55-c030-4275-b9fb-7a458de08cbb",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-500,
-40
],
"id": "89989384-0121-4fdb-a710-93f88c278e57",
"name": "Webhook"
}
],
"connections": {
"Get Commandes and Vehicules": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"Mistral Cloud Chat Model": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Basic LLM Chain",
"type": "ai_outputParser",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "92f3fc11-49b7-45b9-a6dd-9b23059c876b",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "A6j7D3AEueidE9Rv",
"tags": []
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpBasicAuthmistralCloudApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Planning Assistant 2. Uses httpRequest, chainLlm, lmChatMistralCloud, outputParserStructured. Webhook trigger; 5 nodes.
Source: https://github.com/jpdacunha/liferay-planning-assistant/blob/34dd571417cff07dfa13ff64a0bb7b377ae9aa38/runtime/n8n/archive/Planning_Assistant_2.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
My workflow 53. Uses formTrigger, httpRequest, lmChatOpenAi, form. Event-driven trigger; 74 nodes.
Episode 23: UGC with nanobanana. Uses lmChatOpenAi, lmChatOllama, lmChatDeepSeek, lmChatOpenRouter. Event-driven trigger; 74 nodes.
The "Short Content" automation is a powerful, all-in-one solution designed to streamline the creation of short videos for social media, marketing, or personal projects. Leveraging cutting-edge AI tool
🔥 LIMITED-TIME OFFER: AI Video Automation (Previously \$59) Previously Template
Resume Screening & Behavioral Interviews with Gemini, Elevenlabs, & Notion ATS copy. Uses outputParserStructured, chainLlm, googleDrive, stickyNote. Webhook trigger; 67 nodes.