middleware.js 的基础运行模型和通用返回体。开始写业务逻辑前,先确认你的插件运行在消息、HTTP 路由还是 cron / fake 上下文。
运行上下文
每次插件运行都会有一个senderID。消息触发时,senderID 包含 IM、账号、会话和用户;cron 触发时使用 fake 运行上下文;路由触发时使用路由上下文。
运行时返回包装
插件调用拿到的是data 字段,不需要处理 HTTP 包装。底层运行时响应格式如下:
middleware.js 会把运行时错误转成 Error 抛出。
SendReceipt
文本、媒体、混合消息和撤回类方法通常返回发送回执。
boolean
是否发送成功。适配器未显式返回时,运行时会补为
true。string
标准消息 ID。撤回消息时把它传给
recallMessage(...)。string
兼容旧插件的消息 ID 字段,通常与
message_id 相同。string[]
多段消息或适配器返回多个 ID 时使用。只有单条消息时通常包含一个 ID。
unknown
适配器原始回执。需要排查平台问题时再读取。
string
适配器可能返回的失败说明。失败时优先检查
receipt.ok === false 和 receipt.error。FileDownloadResult
fileDownload(...) 返回 FileDownloadResult,downloadAdapterFile(...) 返回同样字段并额外包含 ok、url、action。
boolean
仅
downloadAdapterFile(...) 一定返回。表示文件已保存。string
当 SDK 需要先通过适配器把平台文件 ID 换成下载 URL 时,值通常是
resolveFileURL;直接下载 URL 时可能为空。string
实际下载地址。可能是原始 URL,也可能是适配器解析后的临时 URL。
string
保存后的本地路径。推荐把这个字段传给
replyImage(...)、replyFile(...) 等媒体方法。string
与
path 相同,兼容更明确的字段名。string
保存后的文件名。
string
检测或传入的 MIME 类型,例如
image/png、text/csv。number
文件大小,单位为字节。
MediaItem
sender.getMediaItems() 返回标准化媒体数组。它会优先返回最近一次 listen(...) / input(...) 捕获到的媒体;否则返回当前事件里的 media_items / mediaItems。
'image' | 'voice' | 'video' | 'file' | string
必填
媒体类型。当前标准化流程主要保留有
type 和 source 的媒体项。string
必填
媒体来源。可能是 URL、本地路径、临时资源 ID、平台文件 ID 或适配器原始文件标识。
string
文件名或展示名。运行时会从
name、filename、file_name 中标准化为 name。string
MIME 类型。运行时会从
mime_type 或 mimeType 标准化。object
平台原始文件信息,例如
file_id、path、url。下载用户上传文件时直接把整个 MediaItem 传给 downloadAdapterFile(...)。下一步
读取和回复消息
查看
Sender 的消息上下文、回复和撤回方法。主动推送账号规则
查看
push(...) 的 account_id 优先级和跨 IM 行为。