ClawSkills logoClawSkills

Salesforce

使用托管 OAuth 集成 Salesforce CRM API。使用 SOQL 查询记录,管理 sObjects(联系人、客户、潜在客户、商机),并执行批量操作

介绍

# Salesforce

通过托管的 OAuth 身份验证访问 Salesforce REST API。使用 SOQL 查询记录,管理 sObjects,并对您的 Salesforce 数据执行 CRUD 操作。

## Quick Start

```bash # Query contacts python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/salesforce/services/data/v59.0/query?q=SELECT+Id,Name,Email+FROM+Contact+LIMIT+10') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

## Base URL

``` https://gateway.maton.ai/salesforce/{native-api-path} ```

将 `{native-api-path}` 替换为实际的 Salesforce REST API 端点路径。网关将请求代理到 `{instance}.salesforce.com`(自动替换为您的连接配置)并注入您的访问令牌。

## Authentication

所有请求都需要在 Authorization 头中包含 Maton API 密钥:

``` Authorization: Bearer $MATON_API_KEY ```

**Environment Variable:** 将您的 API 密钥设置为 `MATON_API_KEY`:

```bash export MATON_API_KEY="YOUR_API_KEY" ```

### Getting Your API Key

1. 在 [maton.ai](https://maton.ai) 登录或创建账户 2. 前往 [maton.ai/settings](https://maton.ai/settings) 3. 复制您的 API 密钥

## Connection Management

在 `https://ctrl.maton.ai` 管理您的 Salesforce OAuth 连接。

### List Connections

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=salesforce&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Create Connection

```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'salesforce'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Get Connection

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

**Response:** ```json { "connection": { "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80", "status": "ACTIVE", "creation_time": "2025-12-08T07:20:53.488460Z", "last_updated_time": "2026-01-31T20:03:32.593153Z", "url": "https://connect.maton.ai/?session_token=...", "app": "salesforce", "metadata": {} } } ```

在浏览器中打开返回的 `url` 以完成 OAuth 授权。

### Delete Connection

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Specifying Connection

如果您有多个 Salesforce 连接,请使用 `Maton-Connection` 头指定使用哪一个:

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/salesforce/services/data/v59.0/sobjects') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

如果省略,网关将使用默认(最旧)的活动连接。

## API Reference

### SOQL Query

```bash GET /salesforce/services/data/v59.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+10 ```

复杂查询:

```bash GET /salesforce/services/data/v59.0/query?q=SELECT+Id,Name,Email+FROM+Contact+WHERE+Email+LIKE+'%example.com'+ORDER+BY+CreatedDate+DESC ```

### Get Object

```bash GET /salesforce/services/data/v59.0/sobjects/{objectType}/{recordId} ```

示例:

```bash GET /salesforce/services/data/v59.0/sobjects/Contact/003XXXXXXXXXXXXXXX ```

### Create Object

```bash POST /salesforce/services/data/v59.0/sobjects/{objectType} Content-Type: application/json

{ "FirstName": "John", "LastName": "Doe", "Email": "[email protected]" } ```

### Update Object

```bash PATCH /salesforce/services/data/v59.0/sobjects/{objectType}/{recordId} Content-Type: application/json

{ "Phone": "+1234567890" } ```

### Delete Object

```bash DELETE /salesforce/services/data/v59.0/sobjects/{objectType}/{recordId} ```

### Describe Object (get schema)

```bash GET /salesforce/services/data/v59.0/sobjects/{objectType}/describe ```

### List Objects

```bash GET /salesforce/services/data/v59.0/sobjects ```

### Search (SOSL)

```bash GET /salesforce/services/data/v59.0/search?q=FIND+{searchTerm}+IN+ALL+FIELDS+RETURNING+Contact(Id,Name) ```

### Composite Request (batch multiple operations)

```bash POST /salesforce/services/data/v59.0/composite Content-Type: application/json

{ "compositeRequest": [ { "method": "GET", "url": "/services/data/v59.0/sobjects/Contact/003XXXXXXX", "referenceId": "contact1" }, { "method": "GET", "url": "/services/data/v59.0/sobjects/Account/001XXXXXXX", "referenceId": "account1" } ] } ```

### Composite Batch Request

```bash POST /salesforce/services/data/v59.0/composite/batch Content-Type: application/json

{ "batchRequests": [ {"method": "GET", "url": "v59.0/sobjects/Contact/003XXXXXXX"}, {"method": "GET", "url": "v59.0/sobjects/Account/001XXXXXXX"} ] } ```

### sObject Collections Create (batch create)

```bash POST /salesforce/services/data/v59.0/composite/sobjects Content-Type: application/json

{ "allOrNone": true, "records": [ {"attributes": {"type": "Contact"}, "FirstName": "John", "LastName": "Doe"}, {"attributes": {"type": "Contact"}, "FirstName": "Jane", "LastName": "Smith"} ] } ```

### sObject Collections Delete (batch delete)

```bash DELETE /salesforce/services/data/v59.0/composite/sobjects?ids=003XXXXX,003YYYYY&allOrNone=true ```

### Get Updated Records

```bash GET /salesforce/services/data/v59.0/sobjects/{objectType}/updated/?start=2026-01-30T00:00:00Z&end=2026-02-01T00:00:00Z ```

### Get Deleted Records

```bash GET /salesforce/services/data/v59.0/sobjects/{objectType}/deleted/?start=2026-01-30T00:00:00Z&end=2026-02-01T00:00:00Z ```

### Get API Limits

```bash GET /salesforce/services/data/v59.0/limits ```

### List API Versions

```bash GET /salesforce/services/data/ ```

## Common Objects

- `Account` - 公司/组织 - `Contact` - 与账户关联的人员 - `Lead` - 潜在客户 - `Opportunity` - 销售机会 - `Case` - 支持案例 - `Task` - 待办事项 - `Event` - 日历事件

## Code Examples

### JavaScript

```javascript const response = await fetch( 'https://gateway.maton.ai/salesforce/services/data/v59.0/query?q=SELECT+Id,Name+FROM+Contact+LIMIT+5', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json(); ```

### Python

```python import os import requests

response = requests.get( 'https://gateway.maton.ai/salesforce/services/data/v59.0/query', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'q': 'SELECT Id,Name FROM Contact LIMIT 5'} ) ```

## Notes

- 对 SOQL 查询使用 URL 编码(空格变为 `+`) - 记录 ID 是 15 或 18 个字符的字母数字字符串 - API 版本(v59.0)可以调整;最新版本为 v65.0 - 更新和删除操作成功时返回 HTTP 204(无内容) - 更新/删除查询的日期使用 ISO 8601 格式:`YYYY-MM-DDTHH:MM:SSZ` - 在批量操作中使用 `allOrNone: true` 以实现原子事务 - 重要提示:使用 curl 命令时,如果 URL 包含括号(`fields[]`、`sort[]`、`records[]`),请使用 `curl -g` 以禁用 glob 解析 - 重要提示:当将 curl 输出通过管道传递给 `jq` 或其他命令时,在某些 shell 环境中,`$MATON_API_KEY` 等环境变量可能无法正确展开。进行管道传输时,您可能会遇到“Invalid API key”(无效的 API 密钥)错误。

## Error Handling

| Status | Meaning | |--------|---------| | 400 | 缺少 Salesforce 连接 | | 401 | Maton API 密钥无效或缺失 | | 429 | 速率受限(每个账户每秒 10 次请求)| | 4xx/5xx | 来自 Salesforce API 的透传错误 |

### Troubleshooting: API Key Issues

1. 检查是否设置了 `MATON_API_KEY` 环境变量:

```bash echo $MATON_API_KEY ```

2. 通过列出连接来验证 API 密钥是否有效:

```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ```

### Troubleshooting: Invalid App Name

1. 确保您的 URL 路径以 `salesforce` 开头。例如:

- 正确:`https://gateway.maton.ai/salesforce/services/data/v59.0/query` - 错误:`https://gateway.maton.ai/services/data/v59.0/query`

## Resources

- [REST API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm) - [List sObjects](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_describeGlobal.htm) - [Describe sObject](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_describe.htm) - [Get Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_retrieve_get.htm) - [Create Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_create.htm) - [Update Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_update_fields.htm) - [Delete Record](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_delete_record.htm) - [Query Records (SOQL)](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm) - [Composite Request](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_composite_post.htm) - [sObject Collections](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_sobjects_collections_create.htm) - [SOQL Reference](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql.htm) - [SOSL Reference](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_sosl.htm) - [Maton Community](https://discord.com/invite/dBfFAcefs2) - [Maton Support](mailto:[email protected])

更多产品