mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-09-16 14:57:15 +00:00
feat(n8n-runner): support async response handling (#2487)
* feat(n8n-runner): support async response handling * fix(n8n-runner): expose response handling in form * fix(n8n-runner): preserve async response semantics --------- Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
This commit is contained in:
@@ -39,6 +39,9 @@ class N8nServiceAPIRunner(runner.RequestRunner):
|
||||
|
||||
# 获取输出键名,默认为response
|
||||
self.output_key = self.pipeline_config['ai']['n8n-service-api'].get('output-key', 'response')
|
||||
self.response_handling = self.pipeline_config['ai']['n8n-service-api'].get('response-handling', 'reply')
|
||||
if self.response_handling not in {'reply', 'ignore'}:
|
||||
raise ValueError(f'Invalid n8n response-handling: {self.response_handling}')
|
||||
|
||||
# 获取认证类型,默认为none
|
||||
self.auth_type = self.pipeline_config['ai']['n8n-service-api'].get('auth-type', 'none')
|
||||
@@ -262,7 +265,11 @@ class N8nServiceAPIRunner(runner.RequestRunner):
|
||||
async with session.post(
|
||||
self.webhook_url, json=payload, headers=headers, auth=auth, timeout=self.timeout
|
||||
) as response:
|
||||
if response.status != 200:
|
||||
if self.response_handling == 'ignore':
|
||||
status_ok = 200 <= response.status < 300
|
||||
else:
|
||||
status_ok = response.status == 200
|
||||
if not status_ok:
|
||||
error_text = (
|
||||
await httpclient.read_limited(
|
||||
response,
|
||||
@@ -272,6 +279,11 @@ class N8nServiceAPIRunner(runner.RequestRunner):
|
||||
self.ap.logger.error(f'n8n webhook call failed: {response.status}, {error_text}')
|
||||
raise Exception(f'n8n webhook call failed: {response.status}, {error_text}')
|
||||
|
||||
if self.response_handling == 'ignore':
|
||||
response.release()
|
||||
self.ap.logger.debug('n8n async webhook accepted; response body ignored')
|
||||
return
|
||||
|
||||
async for chunk in self._process_response(response):
|
||||
if is_stream:
|
||||
yield chunk
|
||||
|
||||
@@ -80,7 +80,8 @@
|
||||
"header-name": "",
|
||||
"header-value": "",
|
||||
"timeout": 120,
|
||||
"output-key": "response"
|
||||
"output-key": "response",
|
||||
"response-handling": "reply"
|
||||
},
|
||||
"langflow-api": {
|
||||
"base-url": "http://localhost:7860",
|
||||
|
||||
@@ -475,6 +475,25 @@ stages:
|
||||
type: string
|
||||
required: false
|
||||
default: 'response'
|
||||
- name: response-handling
|
||||
label:
|
||||
en_US: Webhook Response Handling
|
||||
zh_Hans: Webhook 响应处理方式
|
||||
description:
|
||||
en_US: Choose whether LangBot forwards the n8n webhook response to the chat user. Ignore mode requires the n8n Webhook node to use Respond Immediately.
|
||||
zh_Hans: 选择是否将 n8n Webhook 响应转发给聊天用户。忽略模式要求 n8n Webhook 节点使用“立即响应”。
|
||||
type: select
|
||||
required: false
|
||||
default: 'reply'
|
||||
options:
|
||||
- name: reply
|
||||
label:
|
||||
en_US: Forward as chat reply
|
||||
zh_Hans: 转发为聊天回复
|
||||
- name: ignore
|
||||
label:
|
||||
en_US: Ignore response body (asynchronous workflow)
|
||||
zh_Hans: 忽略响应正文(异步工作流)
|
||||
- name: coze-api
|
||||
label:
|
||||
en_US: coze API
|
||||
|
||||
Reference in New Issue
Block a user