Salesforce连接器

概述

Salesforce连接器提供从Salesforce对象(标准对象、自定义对象)获取数据并注册到 Fess 索引的功能。

此功能需要 fess-ds-salesforce 插件。

支持的对象

  • 标准对象: 预定义的标准对象(Account、Contact、Lead、Opportunity、Case、Solution等)。标准对象的集合是固定的,每次爬取时会全部获取。

  • 自定义对象: 通过 custom 参数指定的用户自定义对象(API 名称以 __c 结尾的对象)。

Note

标准对象始终进行全量爬取(无法单独选择要爬取的标准对象)。 若要排除不需要的对象,请使用 include_pattern / exclude_pattern 进行URL过滤。

标准对象列表

以下为爬取对象的标准对象。「对象名称」是字段映射中使用的标识符(例如 <对象名称>.title);object.type 是可在脚本中引用的对象类型值。

对象名称 object.type 说明
ACCOUNT Account 客户
CONTACT Contact 联系人
LEAD Lead 潜在客户
OPPORTUNITY Opportunity 商机
CASE Case 案例
SOLUTION Solution 解决方案
CONTRACT Contract 合同
ORDER Order 订单
CAMPAIGN Campaign 营销活动
PRODUCT2 Product2 产品
PRICEBOOK2 Pricebook2 价格手册
ASSET Asset 资产
ASSET_RELATIONSHIP AssetRelationship 资产关系
TASK Task 任务
USER User 用户
COLLABORATION_GROUP CollaborationGroup Chatter群组
IDEA Idea 创意
RECOMMENDATION Recommendation 推荐
QUICK_TEXT QuickText 快捷文本
MACRO Macro
LIST_EMAIL ListEmail 列表邮件
IMAGE Image 图像
DAND_B_COMPANY DandBCompany D&B公司

前提条件

  1. 需要安装插件

  2. 需要创建Salesforce Connected App(连接应用程序)

  3. 需要设置OAuth认证

  4. 需要对象的读取访问权限

插件安装

从管理界面的「系统」→「插件」进行安装。

或者,详情请参阅 插件

配置方法

从管理界面的「爬虫」→「数据存储」→「新建」进行配置。

基本设置

项目 设置示例
名称 Salesforce CRM
处理器名称 SalesforceDataStore
启用

参数设置

OAuth Token认证(推荐):

base_url=https://login.salesforce.com
auth_type=oauth_token
username=admin@example.com
client_id=3MVG9...
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
number_of_threads=1
ignore_error=true
custom=FessObj,CustomProduct
FessObj.title=Name
FessObj.contents=Name,Description__c
CustomProduct.title=Product_Name__c
CustomProduct.contents=Product_Name__c,Product_Description__c

OAuth Password认证:

base_url=https://login.salesforce.com
auth_type=oauth_password
username=admin@example.com
password=YourPassword
client_id=3MVG9...
client_secret=1234567890ABCDEF
security_token=AbCdEfGhIjKlMnOpQrSt
number_of_threads=1
ignore_error=true

参数列表

参数 必需 说明
base_url Salesforce的URL(默认: https://login.salesforce.com,沙盒: https://test.salesforce.com
auth_type 认证类型(oauth_tokenoauth_password
username Salesforce用户名
client_id Connected App的Consumer Key
private_key oauth_token时 私钥(PEM格式,换行使用 \n
client_secret oauth_password时 Connected App的Consumer Secret
password oauth_password时 Salesforce密码
security_token oauth_password时 用户的安全令牌
number_of_threads 并行处理线程数(默认: 1)
ignore_error 出错时继续处理(默认: true)
custom 自定义对象名(逗号分隔)
<对象>.title 用于标题的字段名
<对象>.contents 用于内容的字段名(逗号分隔)
<对象>.descriptions 用于描述的字段名(逗号分隔)
<对象>.thumbnail 用于缩略图的字段名
include_pattern URL过滤器包含模式(正则表达式)
exclude_pattern URL过滤器排除模式(正则表达式)
refresh_token_interval 令牌刷新间隔(秒,默认值:3540)
proxy_host HTTP代理主机名
proxy_port 设置了proxy_host时 HTTP代理端口号

脚本设置

title="[" + object.type + "] " + object.title
digest=object.description
content=object.content
created=object.created
timestamp=object.last_modified
url=object.url

可用字段

字段 说明
object.type 对象类型(例: Case、User、Solution)
object.title 对象名称
object.description 对象描述
object.content 对象的文本内容
object.id 对象ID
object.content_length 内容长度
object.created 创建时间
object.last_modified 最后更新时间
object.url 对象的URL
object.thumbnail 缩略图URL

Salesforce Connected App设置

1. 创建Connected App

在Salesforce Setup中:

  1. 打开「应用程序管理器」

  2. 点击「新建Connected App」

  3. 输入基本信息:

  4. 勾选「启用API(启用OAuth设置)」

2. OAuth Token认证设置(推荐)

在OAuth设置中:

  1. 勾选「使用数字签名」

  2. 上传证书(按照下面的步骤创建)

  3. 选择的OAuth范围:

    • Full access (full)

    • Perform requests on your behalf at any time (refresh_token, offline_access)

  4. 点击「保存」

  5. 复制Consumer Key

创建证书:

# 生成私钥
openssl genrsa -out private_key.pem 2048

# 生成证书
openssl req -new -x509 -key private_key.pem -out certificate.crt -days 365

# 确认私钥
cat private_key.pem

将证书(certificate.crt)上传到Salesforce, 将私钥(private_key.pem)的内容设置到参数。

3. OAuth Password认证设置

在OAuth设置中:

  1. 回调URL: https://localhost (不会使用但必需)

  2. 选择的OAuth范围:

    • Full access (full)

    • Perform requests on your behalf at any time (refresh_token, offline_access)

  3. 点击「保存」

  4. 复制Consumer Key和Consumer Secret

获取安全令牌:

  1. 在Salesforce中打开个人设置

  2. 点击「重置我的安全令牌」

  3. 复制通过邮件发送的令牌

4. 授权Connected App

在「管理」→「管理Connected App」中:

  1. 选择创建的Connected App

  2. 点击「编辑」

  3. 将「允许的用户」更改为「管理员批准的用户已预先授权」

  4. 分配配置文件或权限集

自定义对象设置

爬取自定义对象

在参数中使用 custom 指定自定义对象名:

custom=FessObj,CustomProduct,ProjectTask

各对象的字段映射:

FessObj.title=Name
FessObj.contents=Name,Description__c,Notes__c

CustomProduct.title=Product_Name__c
CustomProduct.contents=Product_Name__c,Product_Description__c,Specifications__c

ProjectTask.title=Task_Name__c
ProjectTask.contents=Task_Name__c,Task_Description__c

字段映射规则

  • <对象名>.title - 用于标题的字段(单个字段)

  • <对象名>.contents - 用于内容的字段(可用逗号分隔指定多个)

  • <对象名>.descriptions - 用于描述的字段(可用逗号分隔指定多个)

  • <对象名>.thumbnail - 用于缩略图的字段(单个字段)

Note

标准对象的字段映射中,对象名称使用大写下划线命名(UPPER_SNAKE_CASE) (即 标准对象列表 中「对象名称」列的值) (例如: ACCOUNT.title=NameDAND_B_COMPANY.title=Name)。 自定义对象则直接使用API名称(例如: Product__c.title=Name)。

使用示例

爬取标准对象

参数:

base_url=https://login.salesforce.com
auth_type=oauth_token
username=admin@example.com
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
number_of_threads=1
ignore_error=true

脚本:

title="[" + object.type + "] " + object.title
content=object.content
digest=object.description
created=object.created
timestamp=object.last_modified
url=object.url

爬取自定义对象

参数:

base_url=https://login.salesforce.com
auth_type=oauth_token
username=admin@example.com
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
number_of_threads=2
ignore_error=true
custom=Product__c,Contract__c
Product__c.title=Name
Product__c.contents=Name,Description__c,Category__c
Contract__c.title=Contract_Name__c
Contract__c.contents=Contract_Name__c,Terms__c,Notes__c

脚本:

title="[" + object.type + "] " + object.title
content=object.content
created=object.created
timestamp=object.last_modified
url=object.url

爬取沙盒环境

参数:

base_url=https://test.salesforce.com
auth_type=oauth_password
username=admin@example.com.sandbox
password=YourPassword
client_id=3MVG9A2kN3Bn17hvOLkjEo7GFdC...
client_secret=1234567890ABCDEF1234567890ABCDEF
security_token=AbCdEfGhIjKlMnOpQrStUvWxYz
number_of_threads=1
ignore_error=true

脚本:

title="[SANDBOX] [" + object.type + "] " + object.title
content=object.content
timestamp=object.last_modified
url=object.url

故障排除

认证错误

症状: Authentication failedinvalid_grant

确认事项:

  1. OAuth Token认证时:

    • 确认Consumer Key是否正确

    • 确认私钥是否正确复制(换行是否为 \n

    • 确认证书是否已上传到Salesforce

    • 确认用户名是否正确

  2. OAuth Password认证时:

    • 确认Consumer Key和Consumer Secret是否正确

    • 确认安全令牌是否正确

    • 确认是否没有将密码和安全令牌连接(需分别设置)

  3. 通用:

    • 确认base_url是否正确(生产环境还是沙盒环境)

    • 确认Connected App是否已授权

无法获取对象

症状: 爬取成功但对象数为0

确认事项:

  1. 确认用户是否有对象的读取权限

  2. 自定义对象时,确认对象名是否正确(API名称)

  3. 确认字段映射是否正确

  4. 在日志中确认错误信息

自定义对象名称

确认自定义对象的API名称:

  1. 在Salesforce Setup中打开「对象管理器」

  2. 选择自定义对象

  3. 复制「API名称」(通常以 __c 结尾)

示例:

  • 显示标签: Product

  • API名称: Product__c (使用这个)

确认字段名

确认自定义字段的API名称:

  1. 打开对象的「字段和关系」

  2. 选择自定义字段

  3. 复制「字段名称」(通常以 __c 结尾)

示例:

  • 字段显示标签: Product Description

  • 字段名称: Product_Description__c (使用这个)

API速率限制

症状: REQUEST_LIMIT_EXCEEDED

解决方法:

  1. 减少 ``number_of_threads``(设置为1)

  2. 增加爬取间隔

  3. 确认Salesforce API使用情况

  4. 如需要,购买额外的API限制

有大量数据的情况

症状: 爬取耗时长或超时

解决方法:

  1. 将对象分割到多个数据存储

  2. 调整 ``number_of_threads``(2~4左右)

  3. 分散爬取计划

  4. 只映射必要的字段

私钥格式错误

症状: Invalid private key format

解决方法:

确认私钥的换行是否正确为 \n:

# 正确格式
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n

# 错误格式(包含实际换行)
private_key=-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQE...
-----END PRIVATE KEY-----

参考信息