fix: resolve pydantic init error and auto-generate webhook callback URL

- Fix AttributeError by removing self.config assignment before super().__init__()
- Remove callback_base_url from adapter config (no longer needed)
- Add set_webhook_url() method, called by botmgr with auto-built URL
- Add gewechat to webhook URL display list in bot.py
- botmgr now passes webhook_prefix + bot_uuid to adapters via set_webhook_url()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
fdc310
2026-03-22 05:52:50 +08:00
parent 6e9fcccd7d
commit 1a3ef217d9
3 changed files with 8 additions and 19 deletions

View File

@@ -68,6 +68,7 @@ class BotService:
'wecomcs',
'LINE',
'lark',
'gewechat',
]:
webhook_prefix = self.ap.instance_config.data['api'].get('webhook_prefix', 'http://127.0.0.1:5300')
extra_webhook_prefix = self.ap.instance_config.data['api'].get('extra_webhook_prefix', '')

View File

@@ -404,11 +404,7 @@ class GewechatEventConverter(abstract_platform_adapter.AbstractEventConverter):
class GeWeChatAdapter(abstract_platform_adapter.AbstractMessagePlatformAdapter):
bot: gewechat_client.GewechatClient = None
bot_uuid: str = None
bot_account_id: str = ''
config: dict
webhook_url: str = None
message_converter: GewechatMessageConverter = None
event_converter: GewechatEventConverter = None
@@ -418,8 +414,6 @@ class GeWeChatAdapter(abstract_platform_adapter.AbstractMessagePlatformAdapter):
] = {}
def __init__(self, config: dict, logger: EventLogger):
self.config = config
super().__init__(
config=config,
logger=logger,
@@ -431,6 +425,9 @@ class GeWeChatAdapter(abstract_platform_adapter.AbstractMessagePlatformAdapter):
def set_bot_uuid(self, bot_uuid: str):
self.bot_uuid = bot_uuid
def set_webhook_url(self, webhook_url: str):
self.webhook_url = webhook_url
async def handle_unified_webhook(self, bot_uuid: str, path: str, request):
data = await request.json
await self.logger.debug(f'Gewechat callback event: {data}')
@@ -578,8 +575,9 @@ class GeWeChatAdapter(abstract_platform_adapter.AbstractMessagePlatformAdapter):
pass
def _build_callback_url(self) -> str:
base_url = self.config.get('callback_base_url', '').rstrip('/')
return f'{base_url}/api/bots/{self.bot_uuid}'
if self.webhook_url:
return self.webhook_url
raise Exception('webhook_url 未设置,请检查 LangBot 的 api.webhook_prefix 配置')
async def run_async(self):
if not self.config['token']:

View File

@@ -31,16 +31,6 @@ spec:
type: string
required: true
default: ""
- name: callback_base_url
label:
en_US: Callback Base URL
zh_Hans: 回调基础URL
description:
en_US: "LangBot public base URL for webhook callbacks, e.g. http://your-server:5300. The full callback URL will be auto-generated as {callback_base_url}/api/bots/{bot_uuid}"
zh_Hans: "LangBot 对外可访问的基础URL如 http://your-server:5300。完整回调地址将自动生成为 {callback_base_url}/api/bots/{bot_uuid}"
type: string
required: true
default: ""
- name: app_id
label:
en_US: App ID