con un clic
add-channel
MindBot 通道开发指南——BaseChannel 接口契约、注册机制、消息处理流程与完整代码模板
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
MindBot 通道开发指南——BaseChannel 接口契约、注册机制、消息处理流程与完整代码模板
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
提供 MindBot 自身架构、配置、目录和能力边界的自说明知识包
MindBot LLM Provider 开发指南——Provider 基类接口、Param 配置类、Factory 注册机制与完整代码模板
MindBot Skill 创建指南——通用创建流程参考 .agents/skills/skill-creator/,本 Skill 补充 mindbot 特有的格式、加载机制与存放规则
MindBot 工具开发指南——Tool 模型定义、handler 编写、ToolBackend 注册与 CapabilityFacade 执行路径
LLM 编码行为准则,减少常见编码错误——先思考再编码、简洁优先、精准修改、目标驱动执行
提供计算相关的功能,如sigmoid函数计算,数学表达式求值等。
| name | add-channel |
| description | MindBot 通道开发指南——BaseChannel 接口契约、注册机制、消息处理流程与完整代码模板 |
| when_to_use | 添加新通道、新增 channel、接入新平台(如 Discord、微信、Slack) |
通道属于 L1 接口/传输层,职责是对接外部消息协议。通道只负责收发消息,通过 MessageBus 与 MindBot 主链路交互。
依赖规则:通道 → MindBot(L2),禁止通道直接调用 Provider(L5)或工具(L4)。
继承 BaseChannel,实现 4 个方法:
# src/mindbot/channels/base.py
class BaseChannel(ABC):
name: str = "base"
def __init__(self, config: Any, bus: MessageBus):
self.config = config
self.bus = bus
self._running = False
@abstractmethod
async def start(self) -> None:
"""启动通道,开始监听消息"""
@abstractmethod
async def stop(self) -> None:
"""停止通道,释放资源"""
@abstractmethod
async def send(self, msg: OutboundMessage) -> None:
"""向用户发送消息"""
def is_allowed(self, sender_id: str) -> bool:
"""权限检查,可在子类覆盖"""
在 src/mindbot/channels/manager.py 的 _init_channels() 中添加:
def _init_channels(self) -> None:
channels_config = getattr(self.config, "channels", None)
# 复制已有通道的模式
my_config = getattr(channels_config, "my_channel", None)
if my_config and getattr(my_config, "enabled", False):
from mindbot.channels.my_channel import MyChannel
self.channels["my_channel"] = MyChannel(my_config, self.bus)
async def _handle_message(self, sender_id: str, text: str) -> None:
"""收到外部消息后的处理"""
# 1. 权限检查
if not self.is_allowed(sender_id):
return
# 2. 构造 InboundMessage 通过 bus 发给 MindBot
await self.bus.publish(InboundMessage(
channel=self.name,
sender_id=sender_id,
content=text,
))
# 3. MindBot 处理完后通过 bus 回调 send() 发送回复
# src/mindbot/channels/my_channel.py
from typing import Any
from mindbot.channels.base import BaseChannel
from mindbot.bus.events import InboundMessage, OutboundMessage
class MyChannel(BaseChannel):
name: str = "my_channel"
def __init__(self, config: Any, bus: "MessageBus") -> None:
super().__init__(config, bus)
async def start(self) -> None:
self._running = True
# 启动外部平台的监听循环
async def stop(self) -> None:
self._running = False
# 断开连接、清理资源
async def send(self, msg: OutboundMessage) -> None:
# 将 msg.content 发送到外部平台
pass
async def _handle_message(self, sender_id: str, text: str) -> None:
if not self.is_allowed(sender_id):
return
from mindbot.bus.events import InboundMessage
await self.bus.publish(InboundMessage(
channel=self.name,
sender_id=sender_id,
content=text,
))
在 settings.json 的 channels 下添加配置:
{
"channels": {
"my_channel": {
"enabled": true,
"allowed_senders": []
}
}
}
BaseChannel,实现 start() / stop() / send()ChannelManager._init_channels() 中注册MessageBus 流转,不直接调用 MindBotsettings.json 的 channels 下tests/channels/test_my_channel.py