This workflow follows the Agent → 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": "line_bot",
"nodes": [
{
"parameters": {
"model": "gpt-4o",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"typeVersion": 1,
"position": [
-280,
1520
],
"id": "cc51834b-7839-4eed-bfbc-71dc3e43d2c7",
"name": "Azure OpenAI Chat Model1"
},
{
"parameters": {},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.1,
"position": [
160,
1220
],
"id": "cf0450a6-576a-44f6-865e-9242638b32f3",
"name": "Merge"
},
{
"parameters": {
"language": "python",
"pythonCode": "\n# \u5728 n8n \u7684 Python Code \u7bc0\u9ede\u4e2d\u4f7f\u7528\uff0c\u8f38\u5165\u8b8a\u6578\u70ba items\uff08List[Dict]\uff09\n\n\n# \u78ba\u4fdd\u5fc5\u8981\u6578\u64da\u5b58\u5728\nreply_token_item = next(\n (\n item for item in items\n if item.get('json', {}) \\\n .get('body', {}) \\\n .get('events', [{}])[0] \\\n .get('replyToken')\n ),\n None\n)\n\n\n\noutput_item = next(\n (\n item for item in items\n if item.get('json', {}).get('output') is not None\n ),\n None\n)\n\n\nif not reply_token_item or not output_item:\n raise ValueError(\"\u7f3a\u5c11\u5fc5\u8981\u6578\u64da\uff0c\u8acb\u6aa2\u67e5 Webhook & AI Agent \u7bc0\u9ede\u8f38\u51fa\")\n\n# \u53d6\u5f97 replyToken \u548c AI Agent \u56de\u50b3\u6587\u5b57\uff0c\u4e26\u79fb\u9664\u591a\u9918\u7684\u63db\u884c\nreply_token = reply_token_item['json']['body']['events'][0]['replyToken']\ntext = output_item['json']['output'].strip()\n\n# \u56de\u50b3\u6574\u7406\u5f8c\u7684\u7d50\u679c\nreturn [\n {\n 'json': {\n 'replyToken': reply_token,\n 'text': text\n }\n }\n]\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
360,
1220
],
"id": "a43b0774-b902-4d40-99d5-9def813648ef",
"name": "Code"
},
{
"parameters": {
"promptType": "define",
"text": "=\u56de\u61c9\u9019\u500b\u8a0a\u606f\uff1a{{ $json.body.events[0].message.text }}\n\u4ee5\u7e41\u9ad4\u4e2d\u6587\uff0c\u7d14\u6587\u5b57\u8f38\u51fa\uff0c\u4e0d\u8981\u5e36 HTML\u3002",
"hasOutputParser": true,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.7,
"position": [
-280,
1280
],
"id": "6d41c324-8d02-4a22-8307-98abe28cda11",
"name": "AI Agent"
},
{
"parameters": {
"httpMethod": "POST",
"path": "callback",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-520,
1200
],
"id": "46d25c77-bb30-404b-ae45-bb5e92826ee4",
"name": "Webhook1"
},
{
"parameters": {
"method": "POST",
"url": "https://api.line.me/v2/bot/message/reply",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer fGYFFTC5pNVcr18u7zV6qZR5lNNHDH3/0hmlXmritsnfHEsRvNS8nF6ZGB/7avPNuxh9PlLf+1BAvaIgdQ3PtZupaOoKDhdH7ab4q2/VEtuBr8wsL29UUwoLSzbgGoix1LPHJZc9xKyNeOWVtXW7mQdB04t89/1O/w1cDnyilFU="
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"replyToken\": \"{{ $json.replyToken }}\",\n \"messages\": [\n {\n \"type\": \"text\",\n \"text\": \"{{ $json.text }}\"\n }\n ]\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
580,
1220
],
"id": "0238e96f-bd43-42fa-8154-200078e18881",
"name": "HTTP Request"
},
{
"parameters": {
"content": "# Trigger Node",
"height": 180
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-600,
1140
],
"id": "8df83eb7-0e58-4a09-8923-3a3487b845cc",
"name": "Sticky Note"
},
{
"parameters": {
"content": "# Cluster Node",
"height": 260,
"width": 360,
"color": 2
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-320,
1160
],
"id": "7bcb2cde-761a-45dc-8804-cc1b75d9492b",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "# Sub-Node",
"height": 200,
"width": 300,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-440,
1460
],
"id": "740242cd-c220-43a6-8a30-c929d1d7b75f",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "# Flow Node",
"height": 180,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
60,
1160
],
"id": "8b0f915c-fb9f-40f6-8402-7aca06e782dd",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "# Core Node",
"height": 220,
"width": 420,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
340,
1160
],
"id": "87e93453-3f1b-432d-b5a0-2aeb6d3eb5a8",
"name": "Sticky Note4"
}
],
"connections": {
"Azure OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Webhook1": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
},
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "a81f2b73-b1b2-4c5e-bb01-c147b2526428",
"id": "kbajzS6mJ7RdKYRO",
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow enables seamless interaction with LINE messaging by processing incoming messages via a webhook and generating intelligent responses powered by Azure OpenAI, delivering quick and context-aware replies to users on the LINE platform. It's ideal for developers or businesses building chatbots for customer support, notifications, or engagement on LINE, saving time on manual responses and enhancing user experience through AI-driven conversations. The key step involves the AI Agent node, which analyses the message content and crafts a tailored reply using the lmChatAzureOpenAI integration before sending it back via HTTP Request.
Use this workflow when integrating AI into LINE bots for real-time, scalable messaging without custom coding from scratch, particularly for handling queries or automating replies in apps like e-commerce or services. Avoid it for non-messaging tasks or if you lack Azure OpenAI access, as it relies on that for intelligence. Common variations include adding database nodes for conversation history or swapping Azure for other AI providers to fit different setups.
About this workflow
line_bot. Uses lmChatAzureOpenAi, agent, httpRequest. Webhook trigger; 11 nodes.
Source: https://github.com/KuiMing/n8n_agent/blob/4539f71ab276171ae8646a1e35db343a23c7d9e8/n8n/line_bot.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.
This template is for teams that use GitLab merge requests and want a practical AI-assisted review workflow in n8n. It is useful for engineering teams that want faster first-pass reviews, consistent re
Chatbot AI. Uses httpRequest, agent, lmChatAzureOpenAi, stickyNote. Webhook trigger; 14 nodes.
Are you looking to create a counseling chatbot that provides emotional support and mental health guidance through the LINE messaging platform ? This guide will walk you through connecting LINE with po
This n8n template demonstrates how to automatically process PDF purchase orders received via email and convert them into sales orders in Adobe Commerce (Magento 2) using Company Credit as the payment
⏺ 🚀 How it works