ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Botpress Dropbox 集成指南:OAuth 认证配置、Webhook 实时同步与文件管理动作实战

Botpress Dropbox 集成指南:OAuth 认证配置、Webhook 实时同步与文件管理动作实战 AI 应用后端【免费下载链接】botpressThe open-source hub to build deploy GPT/LLM Agents ⚡️项目地址https://gitcode.com/gh_mirrors/bo/botpress点击查看免费下载Botpress 的 Dropbox 集成集成定义将你的 Agent 与 Dropbox 账号打通支持在机器人工作流中直接列出、上传、下载、移动、复制和搜索 Dropbox 中的文件与文件夹并通过 Botpress 文件 API 在两者之间无缝传输。本文基于该集成在仓库中的官方文档 hub.md 与其源码实现完整讲解「自带 Dropbox App 的 OAuth 认证配置」这一核心步骤、File Synchronizer 插件的 Webhook 联动方式以及全部内置动作的入参与出参细节让你能够在自己的 Botpress 项目中快速复现这套文件管理能力。集成能力总览该集成在 integration.definition.ts 中被注册为名为dropbox、版本2.0.5的集成属性归类为File Management文件管理。从定义与实现来看它具备以下能力列出 Dropbox 账号中的文件与文件夹支持递归遍历与游标分页从 Dropbox 下载文件/文件夹上传到 Botpress 文件存储并返回可访问 URL将文本内容作为文件上传到 Dropbox创建、删除文件夹在 Dropbox 内部移动或复制文件/文件夹按关键词、扩展名、文件类别搜索文件接收 Dropbox 的实时文件变更 Webhook供 File Synchronizer 插件使用此外集成通过extend(filesReadonly, ...)继承了仓库中 files-readonly 接口的能力将listItemsInFolder与transferFileToBotpress两个动作重命名为 files-readonly 语义并标记为HIDDEN_IN_STUDIO用于支撑文件类插件的底层文件流转。这一点在后面的「与 Botpress 文件 API 的集成」一节会进一步说明。认证方式必须使用你自己的 Dropbox App目前该集成只支持 OAuth 认证且要求使用你自己在 Dropbox 开发者后台创建的 App不支持 Botpress 内置的共享凭据。认证配置在 configuration.ts 中定义为manual模式需要提供三个字段Botpress 配置字段源码字段名说明App KeyclientId在 Dropbox App Console 中获取App SecretclientSecret在 Dropbox App Console 中获取以 secret 方式存储Access CodeauthorizationCode通过下方授权 URL 获取的一次性授权码同样以 secret 方式存储从源码看getOAuthClientId/getOAuthClientSecretoauth-client.ts在 manual 模式下直接读取这三个配置项整个流程的本质是用一次性 Access Code 换取长期有效的 Refresh Token随后每次调用 Dropbox API 前再用 Refresh Token 换取短期 Access Token。第一步在 Dropbox 创建自定义 App登录 Dropbox 账号进入 Dropbox App Console。点击Create app创建新应用选择Scoped access受限访问选项选择访问范围单个文件夹或整个 Dropbox 账号为 App 命名并点击Create app。在应用设置页复制App Key与App Secret稍后需要填入 Botpress 集成配置。在应用的Permissions页面添加以下 5 个权限scopeaccount_info.readfiles.metadata.writefiles.content.readfiles.content.writesharing.read添加完成后点击Submit提交生效。提示这 5 个 scope 分别覆盖了账号信息读取、文件元数据写入、文件内容读写以及分享信息读取恰好对应集成内部调用 Dropbox SDK 时所涉及的filesListFolder、filesUpload、filesDownload、filesSearchV2、filesCopyV2、filesMoveV2、filesDeleteV2等接口见 dropbox-client.ts。第二步获取 Access Code一次性授权码在浏览器中打开以下授权地址https://www.dropbox.com/oauth2/authorize?response_typecodetoken_access_typeofflineclient_idApp Key务必把App Key替换为你在第 3 步复制的 App Key。例如你的 App Key 为abcde则 URL 应以client_idabcde结尾。其中token_access_typeoffline是关键参数——它要求 Dropbox 在授权完成后同时返回 Refresh Token这是后续免重复授权地调用 API 的前提。页面会引导你授权该 App 访问你的 Dropbox 账号授权完成后会展示一个Access Code。请复制该授权码它只在几分钟内有效。第三步在 Botpress 完成配置在 Botpress 的集成配置页面依次填入App key第 3 步复制的 App KeyApp secret第 3 步复制的 App SecretAccess Code上一步获取的授权码保存配置即启用集成。关于「Access Code 几分钟即失效」这一点源码中有明确印证setup.ts 的_getAuthFailureMessage在 manual 模式认证失败时给出的提示是——授权码仅有效几分钟可能需要重新走一遍授权 URL 并更新配置。该文件的注册逻辑也解释了配置后的完整认证链register时先调用isProperlyAuthenticated()检查已有凭据是否仍然有效manual 模式下若提供了新 Access Code则走processAuthorizationCode将授权码换成 Refresh Token 并连同account_id、已授权 scope 一起写入名为authorization的集成状态oauth-client.ts 中的processAuthorizationCode之后每次创建 Dropbox 客户端都从该状态读取 Refresh Token调用refreshAccessToken换取新的 Access Token_exchangeRefreshTokenForAccessToken。若未提供 Access Code 且状态中已有 Refresh Token则会直接尝试用既有 Refresh Token 认证OAuth 模式下则一律使用状态中的 Refresh Token。这意味着即使授权码过期只要首次授权成功过后续运行并不需要反复输入授权码。为 File Synchronizer 插件配置 Webhook实时文件变更通知如果你使用File Synchronizer 插件需要为 Dropbox App 配置 Webhook以便接收实时的文件变更通知在 Botpress 集成配置页面复制Webhook URL通常以https://webhook.botpress.cloud/开头。进入 Dropbox App Console 中你的 App 设置页。在Webhook一节中把从 Botpress 复制的 Webhook URL 粘贴进去点击Add。完成配置后你的机器人就能实时接收来自 Dropbox 的文件变更通知。从源码可以还原这条 Webhook 的完整处理链路入口在 handler-dispatcher.ts由 src/index.ts 的handler挂载Webhook 验证握手Dropbox 会先发送一个带challenge参数的 GET 请求来验证 Webhook 归属webhook-verification.ts 原样返回该 challenge 字符串并附带text/plain响应头完成验证。签名校验对于后续的 POST 变更通知处理器会读取请求头X-Dropbox-Signature用 App Secret 作为密钥对请求体计算 HMAC-SHA256 签名并比对防止伪造通知_validatePayloadSignature。变更事件处理file-change.ts 解析list_folder.accounts负载确认事件属于当前集成的账号后通过递归列出全量文件并与状态中缓存的 FileTree以路径为键的本地文件树快照做 diff得到added / updated / deleted三类变更最终以每批最多 50 条的方式广播aggregateFileChanges事件给上层插件_getDiffBatches中MAX_BATCH_SIZE 50。首次同步去重首次同步时会结合集成注册时间setupMeta状态中的integrationRegisteredAt过滤掉在集成配置之前就已存在的旧文件避免把历史文件误报为新变更。在机器人工作流中使用集成动作集成对外暴露的全部动作及其入参/出参都定义在 actions.ts 中动作实现则集中在 src/index.ts 的actions字段。下面按功能分类逐一说明参数以源码 schema 为准。浏览与搜索List items in a folder列出文件夹内容参数类型说明pathstring可选文件夹路径留空表示列出根目录内容recursiveboolean可选默认false是否递归遍历子文件夹nextTokenstring可选分页游标用于继续翻页输出为items文件与文件夹的联合数组和nextToken存在则还有下一页缺失表示没有更多结果。底层实现调用 Dropbox 的filesListFolder/filesListFolderContinuedropbox-client.ts每次最多返回 100 条_maxResultsPerPage并且实现会把deleted类型的条目过滤掉再返回。Search Items搜索文件与文件夹参数类型说明querystring必填搜索关键词pathstring可选限定搜索的路径orderByrelevance|last_modified_time可选结果排序方式fileNameOnlyboolean可选默认false是否只搜索文件名fileExtensionsstring[]可选按扩展名过滤fileCategoriesimage/document/pdf/spreadsheet/presentation/audio/video/folder/paper/others可选按文件类别过滤nextTokenstring可选分页游标输出为results每项包含item与可选的matchType后者取值包括filename、file_content、filename_and_content、image_content、metadata、other和nextToken。底层对应filesSearchV2/filesSearchContinueV2。上传与下载Upload File上传文件入参contents文件内容必填与path文件路径须包含文件名与扩展名必填返回newFile。实现通过filesUpload将文本内容直接写入 Dropbox 路径。Download File下载文件入参pathDropbox 中的文件路径必填返回fileUrl。实现流程是用filesDownload取回文件二进制 → 通过 Botpress 客户端的uploadFile上传到 Botpress 文件存储key 为dropbox:path→ 返回可访问的下载 URL。也就是说「下载到机器人存储」实际是落地在 Botpress 文件 API 上。Download Folder下载文件夹入参path文件夹路径必填返回zipUrl——底层调用filesDownloadZip将整个文件夹压缩为 zip 后上传到 Botpress 存储key 为dropbox:path.zip。目录组织Create Folder创建文件夹入参path必填返回newFolder底层filesCreateFolderV2。Delete Item删除文件或文件夹入参path必填无输出底层filesDeleteV2。Copy Item复制入参fromPath源路径与toPath目标路径返回newItem底层filesCopyV2。Move Item移动入参fromPath与toPath返回newItem底层filesMoveV2。动作返回的实体模型所有动作返回的文件/文件夹对象统一由 definitions/entities 定义Filefile.ts在公共字段基础上额外包含revision修订号、size字节数、fileHash校验哈希、isDownloadable、可选的symlinkTarget以及 ISO 8601 格式的modifiedAt。Folderfolder.ts在公共字段基础上固定itemType: folder。公共字段来自 base-item.tsid、itemType、name含扩展名、path、可选的webUrlDropbox 网页查看地址、isDeleted、isShared。这些字段正是 File Synchronizer 类插件做索引、过滤如按sizeInBytes、modifiedAfter、itemType过滤时所依赖的数据基础见 src/index.ts 中filesReadonlyListItemsInFolder的过滤逻辑。与 Botpress 文件 API 的深层集成该集成不仅仅是 Dropbox 的 API 代理它把「Dropbox ↔ Botpress 文件 API」之间的传输做成了闭环下载方向downloadFile/downloadFolder把 Dropbox 内容上传到 Botpress 文件存储返回的是 Botpress 侧的下载 URLclient.uploadFile。接口复用方向通过继承 files-readonly 接口暴露filesReadonlyListItemsInFolder按folderId 过滤条件列出并映射为 files-readonly 统一实体与filesReadonlyTransferFileToBotpress按文件 id 拉取 Dropbox 内容上传至 Botpress 文件存储并可选是否索引返回botpressFileId。这两个动作在 Studio 中隐藏主要供 File Synchronizer 等插件在后台调用。因此如果希望机器人的知识库或文件同步插件直接消费 Dropbox 文件无需自己额外编写「下载 → 上传」的胶水逻辑集成的隐藏动作已经覆盖。限制与注意事项Dropbox API 标准限制适用速率限制、文件大小限制、分页行为等均遵循 Dropbox 官方 API 的约束。仅支持自有 App 的 OAuth认证配置不提供开箱即用的共享凭据必须按本文流程创建 Dropbox App 并配置 5 个 scope。Access Code 时效授权码仅几分钟有效超时后需要重新访问授权 URL 生成新码好在首次授权成功后Refresh Token 会持久化在集成状态中日常运行不再依赖授权码。下载接口的 SDK 兼容处理实现中有一段针对 Dropbox SDK 长期存在的类型错误的规避——filesDownload/filesDownloadZip实际返回的是{ fileBinary: Buffer, fileBlob: Blob }而非文档声称的FileMetadata集成内部通过_castFileToBuffer直接提取二进制dropbox-client.ts。这提醒你在自行扩展该集成时注意这一兼容点。Webhook 安全所有 POST 通知都会校验X-Dropbox-SignatureHMAC-SHA256密钥为 App Secret不匹配的请求会被拒绝。小结Dropbox 集成是 Botpress 生态中一个典型的「文件管理」型集成认证侧通过「自带 App 一次性授权码换 Refresh Token」的 OAuth 模式落地运行侧通过 9 个公开动作覆盖文件/文件夹的增删查改、移动复制、搜索与双向传输再辅以 Webhook 实时变更事件和 files-readonly 接口为 File Synchronizer 插件提供了完整的数据底座。参考 hub.md 的配置步骤配合 actions.ts 的动作定义与 src/index.ts 的实现即可在自己的机器人工作流中直接使用这些能力。赞分享AI 应用后端【免费下载链接】botpressThe open-source hub to build deploy GPT/LLM Agents ⚡️项目地址https://gitcode.com/gh_mirrors/bo/botpress点击查看免费下载相关推荐Botpress Google Drive 知识库集成googledrivekb实战指南OAuth 配置、文件同步与变更订阅Botpress Google Drive 知识库集成googledrivekb实战指南OAuth 配置、文件同步与变更订阅 导读 googledriveAI 应用后端Botpress Linear 集成完全指南OAuth/API Key 配置、Webhook 签名校验与 Issue 自动化实战Botpress Linear 集成完全指南OAuth/API Key 配置、Webhook 签名校验与 Issue 自动化实战 导读 本文围绕 BotpreAI 应用后端Composio Dropbox 集成实战指南OAuth 配置、文件上传与账户排障Composio Dropbox 集成实战指南OAuth 配置、文件上传与账户排障 导读 本文基于 Composio 官方知识库中 Dropbox 集成的排障人工智能AI Agent工具调用MCP 服务MCP Clients创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表