Botpress Salesforce 集成实战指南:OAuth 授权、对象增删改查与通用 API 代理
AI 应用后端【免费下载链接】botpressThe open-source hub to build deploy GPT/LLM Agents ⚡️项目地址https://gitcode.com/gh_mirrors/bo/botpress点击查看免费下载本文以 Botpress 官方仓库中的 Salesforce 集成文档 为主体结合 集成定义文件 与底层 TypeScript 实现系统讲解如何在 Botpress Studio 中安装并授权 Salesforce、使用沙箱环境以及通过Make API Request、Search/Create/Update Contacts、Search/Create/Update Leads等卡片完成 CRM 数据操作。读完本文你将能独立完成 Salesforce 集成的接入配置并在 Bot 流程中稳定地读写联系人、线索等对象同时掌握 OAuth 令牌刷新与自定义字段扩展的实现原理。集成能力总览Salesforce 集成允许 Bot 直接操作 Salesforce 中的对象联系人、线索、Case 等并提供通用 API 代理能力。根据 integration.definition.ts该集成当前版本为1.0.3官方描述为“允许创建、搜索、更新和删除多种 Salesforce 对象”。从 动作定义聚合文件 可以看到集成实际暴露了 10 个动作分属四组分组动作说明Contact联系人createContact/searchContacts/updateContact创建、搜索、更新 Salesforce ContactLead线索createLead/searchLeads/updateLead创建、搜索、更新 Salesforce LeadCase工单createCase/searchCases/updateCase创建、搜索、更新 Salesforce CaseAPImakeApiRequest以代理方式直接请求 Salesforce REST API这些动作在 Studio 中会以卡片Card形式出现在流程编辑器中可直接拖入对话流使用。集成安装与 OAuth 授权按照 hub.md 的步骤接入流程只需三步安装集成在 Botpress 集线器Hub中安装 Salesforce 集成。OAuth 授权点击Authorize或Connect with OAuth按钮跳转到 Salesforce 完成授权从而完成安装过程。选择环境如需使用 Salesforce 的 Sandbox沙箱环境在连接前将配置类型切换为Sandbox即可。授权背后的 OAuth Wizard 流程点击授权按钮后真正执行授权的是 handler.ts 中定义的 OAuth 向导Wizard。整个流程分为两步start 步骤handler.ts#L6-L16拼接 Salesforce 授权 URL携带response_typecode、client_id来自密钥CONSUMER_KEY、redirect_uriBotpress 的 oauth-callback 地址以及state当前 webhookId随后将用户重定向到 Salesforce 登录授权页。oauth-callback 步骤handler.ts#L18-L66用户授权后回调到 Botpress使用jsforce的OAuth2与Connection以授权码换取accessToken、instanceUrl和refreshToken然后写入集成级状态credentials并通过configureIntegration({ identifier: ctx.webhookId })完成实例标识配置。集成所需的密钥与状态在创建并配置集成实例前需要在 Botpress 中为集成配置两个密钥integration.definition.ts#L45-L52CONSUMER_KEYSalesforce 连接应用Connected App的 Consumer KeyCONSUMER_SECRETSalesforce 连接应用的 Consumer Secret。授权成功后accessToken、instanceUrl、refreshToken与isSandbox会以 JSON 形式持久化在集成级状态credentials中integration.definition.ts#L27-L44。所有后续 API 调用都会从该状态读取令牌与实例地址。使用 Sandbox 沙箱环境hub.md 明确指出连接前选择Sandbox配置类型即可使用 Salesforce 沙箱环境。这一配置在源码中有明确对应integration.definition.ts#L17-L25 定义了名为sfsandbox的配置项标题为Sandbox描述为“使用 Salesforce 沙箱环境test.salesforce.com”。sf-utils.ts#L114-L116 中的getEnvironmentUrl会根据当前配置类型返回不同登录地址sfsandbox返回https://test.salesforce.com否则返回https://login.salesforce.com。值得注意的一个细节在集成注册register钩子中src/index.ts#L7-L22如果检测到当前配置类型与已保存凭证中的isSandbox不一致会清空credentials状态并提示“Salesforce 环境已变更请重新登录”。也就是说从正式环境切换到沙箱或反向切换后必须重新走一次 OAuth 授权流程不能直接复用旧凭证。Make API Request通用 API 代理当内置卡片无法覆盖需求时Make API Request卡片充当代理允许直接向 Salesforce API 发起请求。hub.md 中的使用方式如下在流程中添加Make API Request卡片传入合法的 HTTP 方法、URL 路径格式为yourinstance.salesforce.com/services/data/v54.0/PATH以及需要的附加请求数据。输入参数详解根据 api-actions.ts该动作的完整输入如下参数类型说明methodstring必填HTTP 方法GET、POST、PATCH、DELETEpathstring必填相对路径如sobjects/Contact、query?qSELECTIdFROMContactheadersstring可选附加请求头JSON 格式paramsstring可选URL 查询参数JSON 格式requestBodystring可选请求体JSON 格式支持多行编辑与动态变量注意path中不需要包含域名部分。从 src/actions/api.ts#L13 的实现可以看到最终请求 URL 由代码拼装为${instanceUrl}/services/data/v54.0/${input.path}其中instanceUrl来自授权时保存的凭证形如https://yourorg.salesforce.comAPI 版本v54.0由集成内置。hub.md 中“yourinstance.salesforce.com/services/data/v54.0/PATH”的写法即是对该路径格式的示意。输出与错误处理动作输出api-actions.ts#L28-L35包含successboolean请求是否成功statusnumber可选HTTP 状态码bodyany可选API 返回体errorstring可选失败时的错误信息。在 src/actions/api.ts#L23-L61 中还内置了令牌自动刷新逻辑当请求返回 HTTP 401访问令牌过期时集成会调用refreshSfToken刷新令牌并自动重试一次请求全程对流程无感知非 401 错误则直接记录告警并返回错误信息。Contact联系人操作hub.md 为 Contact 提供了三种操作卡片下面逐一展开并补充源码层面的字段细节。Search Contacts搜索联系人操作步骤hub.md在 Studio 中向流程添加Search Contacts卡片在卡片输入中至少传入一个搜索条件可将动作结果存入变量供后续使用。搜索条件定义于 contact-actions.ts#L54-L72均为可选字段Id联系人 ID、Name名字如 John、Email邮箱。三个字段中至少填写一个集成会基于传入的条件查询 Salesforce 并返回匹配的记录数组。Create Contact创建联系人操作步骤hub.md在流程中添加Create Contact卡片在卡片输入中传入联系人信息其中First Name、Last Name、Email为必填可通过 JSON 格式传入自定义字段可将创建出的联系人Id存入变量。字段定义见 contact-actions.ts#L4-L27字段必填说明FirstName是名字如 JohnLastName是姓氏如 DoeEmail是邮箱需符合 email 格式校验Phone否电话如 1-555-1234customFields否自定义字段JSON 格式多行文本编辑Update Contact更新联系人操作步骤hub.md在流程中添加Update Contact卡片传入要更新的联系人Id以及需要更新的字段可通过 JSON 格式传入自定义字段可将更新后的联系人Id存入变量。源码实现上contact-actions.ts#L40-L52updateContact的输入是“Id 创建卡片全部字段的可选版本”即除Id外所有字段均可选只更新实际传入的字段。Lead线索操作Lead 与 Contact 的操作模式完全一致区别在于必填字段与可用字段。Search Leads搜索线索步骤hub.md添加Search Leads卡片 → 至少传入一个搜索条件 → 将结果存入变量。可选搜索条件为Id、Name、Emaillead-actions.ts#L53-L71。Create Lead创建线索步骤hub.md添加Create Leads卡片 → 传入线索信息其中First Name、Last Name、Email、Company为必填 → 可选 JSON 自定义字段 → 将生成的Id存入变量。完整字段见 lead-actions.ts#L4-L26字段必填说明FirstName是名字LastName是姓氏Email是邮箱Company是公司如 Acme Inc.Phone否电话Title否职位Description否描述customFields否自定义字段JSON 格式Update Lead更新线索步骤hub.md添加Update Leads卡片 → 传入Id与待更新字段 → 可选 JSON 自定义字段 → 将Id存入变量。同样地源码中updateLead为“Id 创建字段全可选”的结构lead-actions.ts#L39-L51。补充Case工单操作hub.md 未单独列出 Case 操作但集成源码中同样提供了createCase、searchCases、updateCase三个动作case-actions.ts并在集成定义中统一导出definitions/index.ts#L7-L13。其中createCase的必填字段为Subject与DescriptionStatus可选同样支持customFieldsJSON 扩展。若你的场景需要处理客服工单可直接使用这三个卡片操作方式与 Contact/Lead 完全一致。自定义字段Custom Fields的底层处理Contact、Lead、Case 的创建与更新动作都支持customFields参数它接受一段 JSON 字符串用于传入 Salesforce 对象上的自定义字段如自定义的My_Field__c。其底层实现在 sf-utils.ts#L102-L112解析customFieldsJSON将展开后的键值对合并进请求负载合并完成后删除customFields键本身避免把原始 JSON 字符串误当作字段名提交。例如在Create Contact卡片中传入{ FirstName: John, LastName: Doe, Email: john.doeexample.com, customFields: {\Industry__c\: \Software\, \LeadSource\: \Bot\} }最终提交给 Salesforce 的负载等价于{ FirstName: John, LastName: Doe, Email: john.doeexample.com, Industry__c: Software, LeadSource: Bot }注意customFields必须是合法 JSON 字符串若解析失败动作会直接报错。Studio 中该输入框支持多行编辑与动态变量displayAs配置见 contact-actions.ts#L13-L26方便在流程中拼接动态内容。动作的统一输出结构所有对象操作都遵循统一的输出约定common-schemas.ts创建 / 更新recordResultSchema字段类型说明idstring可选创建或更新的记录 IDsuccessboolean操作是否成功errorstring可选失败时的错误信息搜索searchOutputSchema字段类型说明successboolean搜索是否成功recordsarray可选搜索返回的记录数组errorstring可选失败时的错误信息因此在流程中你可以直接用“{{action_result.success}}”判断成败用“{{action_result.id}}”或“{{action_result.records}}”承接后续逻辑。从实现上看这些动作最终复用了 generic 目录 下的createSalesforceRecord、fetchSalesforceRecords、updateSalesforceRecord三个通用函数见 contacts.ts#L7-L17对不同对象传入对应的SalesforceObject枚举即可复用同一套 CRUD 逻辑。令牌生命周期与自动刷新Salesforce 的访问令牌accessToken默认有有效期过期后返回 HTTP 401。该集成在两层做了自动处理API 代理层src/actions/api.ts#L34-L51makeApiRequest收到 401 后调用refreshSfToken刷新令牌并用新令牌重试一次。jsforce 连接层sf-utils.ts#L36-L54创建Connection时注册refresh事件监听一旦 jsforce 内部发现令牌过期会自动用refreshToken换取新令牌并将新令牌回写进credentials状态持久化。refreshSfToken的具体实现sf-utils.ts#L59-L100是向${环境地址}/services/oauth2/token发起grant_typerefresh_token的 OAuth 令牌交换请求。需要留意的是若凭证中不存在refreshToken刷新会直接失败并提示“请重新授权”这通常发生在 Salesforce 连接应用未勾选refresh_tokenscope 或用户撤销授权的情况下。常见问题与排查建议授权后报错“No refresh token provided”说明 Salesforce 连接应用未授予refresh_tokenscope或该用户已授权过但 scope 变更需要在 Salesforce Connected App 中检查 OAuth 配置并重新授权。切换正式/沙箱环境后接口报未授权这是设计行为——register 钩子 检测到环境切换后会清空旧凭证必须重新点击 Authorize。Make API Request 返回 401 后仍失败令牌刷新重试只有一次若刷新本身失败如 refresh token 失效请重新走授权流程。自定义字段 JSON 解析失败请确认传入的是合法的 JSON 字符串而不是花括号内直接写字段名的裸文本。搜索条件全部留空searchContacts、searchLeads、searchCases都要求至少传入一个条件否则查询没有依据。关联文件索引集成使用文档本篇文章的骨架来源integrations/salesforce/hub.md集成定义版本、配置、密钥、状态与动作清单integrations/salesforce/integration.definition.ts动作定义Contact / Lead / Case / API 分组定义见 integrations/salesforce/definitionsOAuth 授权向导 integrations/salesforce/src/handler.ts令牌刷新与环境地址工具 integrations/salesforce/src/misc/utils/sf-utils.ts通用 CRUD 实现 integrations/salesforce/src/actions/generic赞分享AI 应用后端【免费下载链接】botpressThe open-source hub to build deploy GPT/LLM Agents ⚡️项目地址https://gitcode.com/gh_mirrors/bo/botpress点击查看免费下载相关推荐Instant Platform OAuth 2.0 集成指南授权码流程与 Superadmin API 实战Instant Platform OAuth 2.0 集成指南授权码流程与 Superadmin API 实战 Instant 支持标准的 OAuth 2.0后端数据库Argilla 用户管理实战角色体系、SDK 增删改查与工作区授权完整指南Argilla 用户管理实战角色体系、SDK 增删改查与工作区授权完整指南 Argilla 的 用户管理User management 是构建高质量标注数数据标注人工智能NLPMLOpsRAGDataHub Tags API 实战指南通过 GraphQL 与 Python SDK 完成标签的增删改查DataHub Tags API 实战指南通过 GraphQL 与 Python SDK 完成标签的增删改查 Tags 是 DataHub 中一类非正式、松散数据目录数据治理数据血缘后端前端数据工程数据集成上一篇baidupankey 使用指南几秒钟查到百度网盘分享链接的提取码下一篇XUnity自动翻译器实战不等汉化组十分钟让你的Unity游戏变成中文创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何从零跑通 Autoware:面向新手的完整安装指南

如何从零跑通 Autoware:面向新手的完整安装指南

如何从零跑通 Autoware:面向新手的完整安装指南 【免费下载链接】autoware Autoware - the worlds leading open-source software project for autonomous driving 项目地址: https://gitcode.com/GitHub_Trending/au/autoware Autoware 是世界上最活跃的开源…

2026/10/9 13:01:32 阅读更多 →
如何快速搭建免费的 Sunshine 游戏串流服务器:10 分钟把 PC 游戏投上电视的完整教程

如何快速搭建免费的 Sunshine 游戏串流服务器:10 分钟把 PC 游戏投上电视的完整教程

如何快速搭建免费的 Sunshine 游戏串流服务器:10 分钟把 PC 游戏投上电视的完整教程 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 做完本文,你会有一条自…

2026/10/9 13:01:44 阅读更多 →
JavaScript 正则词边界 \b 深度实战:从 Modern JavaScript Tutorial 的 HH:MM 时间查找任务说起

JavaScript 正则词边界 \b 深度实战:从 Modern JavaScript Tutorial 的 HH:MM 时间查找任务说起

文档/教程前端 【免费下载链接】en.javascript.info Modern JavaScript Tutorial 项目地址: https://gitcode.com/gh_mirrors/en/en.javascript.info 点击查看 免费下载 本指南以 Modern JavaScript Tutorial(en.javascript.info)正则表达式…

2026/10/11 3:24:29 阅读更多 →

最新新闻

公用桌面防数据泄露:从屏幕保护到锁定连接的完整加固方案

公用桌面防数据泄露:从屏幕保护到锁定连接的完整加固方案

公用桌面上的数据泄露,往往不是被外部黑客“攻”出来的,而是被人“顺便看”出来的。你随便在办公室或公共区域的共享电脑上看一眼,可能会发现上一个人走的时候,网盘还开着、邮箱还没退出、微信静默挂在后台,甚至连 Exc…

2026/10/19 8:28:11 阅读更多 →
5777张垃圾检测数据集:六场景落地解析与训练调参实践

5777张垃圾检测数据集:六场景落地解析与训练调参实践

先说说我是怎么接触到这套数据的。有朋友丢给我一份垃圾检测数据集,文件夹里整整齐齐放了5777张图片,标题却一口气列了智慧城市环卫管理、自动化清洁机器人、环境监测与评估、违规倾倒监控、垃圾分类辅助系统、无人机环境巡检六七个应用方向。我当时的第…

2026/10/19 8:28:11 阅读更多 →
Pico一体机Unity工程从零到可运行APK的完整指南

Pico一体机Unity工程从零到可运行APK的完整指南

简介:面向Pico一体机开发者的Unity工程文件包,基于Unity 5.6.1f1搭建,适合准备入手VR一体机开发、希望减少初始配置成本的团队或个人。包内共1632个文件,除C#脚本、DLL库、Prefab预制体、Shader、Unity场景、FBX模型、PNG贴图等直…

2026/10/19 8:28:11 阅读更多 →
open-code-review:构建高效代码评审流程与工具链实践

open-code-review:构建高效代码评审流程与工具链实践

1. 从“open-code-review”这个标题说起:它到底想解决什么问题第一次看到“open-code-review”这个标题,我脑子里蹦出来的不是某个具体工具,而是一类非常典型的工程场景:代码评审这件事,怎么才能做得既开放、又可控&am…

2026/10/19 8:28:11 阅读更多 →
Unity开发Pico一体机:环境搭建、真机部署与避坑指南

Unity开发Pico一体机:环境搭建、真机部署与避坑指南

简介:Pico一体机开发环境Unity工程项目文件,基于Unity 5.6.1f1搭建,面向VR/AR开发者与Pico设备入门者。工程已按项目开发场景预建好文件夹,并封装手柄射线检测方法,通过Pvr_Controller.CurrColliderGameObject即可调用…

2026/10/19 8:28:11 阅读更多 →
CCS 6.1.3 Win11高分辨率安装失败解决方案

CCS 6.1.3 Win11高分辨率安装失败解决方案

简介:本资源为TI官方集成开发环境Code Composer Studio(CCS)6.1.3完整安装包,专为嵌入式开发者设计,尤其适用于基于MSP430、C2000、C5000、C6000等TI处理器的固件开发、调试与优化任务。安装包已预配置多平台工具链&am…

2026/10/19 8:27:10 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →