Shopify: 电商 AI 智能体集成 - Openclaw Skills
2026-08-16 3451686
2026-08-16 0
Xero 技能在您的 AI 代理与 Xero 会计平台之间提供了强大的桥梁。通过利用托管的 OAuth 网关,它消除了手动刷新令牌和管理标头的复杂性。此 Openclaw Skills 集成允许开发人员以编程方式管理联系人、发票和银彳交易,同时通过简化的代理生成详细的财务报告,如损益表或资产负债表。
该技能专为需要在不构建自定义 OAuth 流程的情况下将财务工作流集成到应用程序中的开发人员而设计,简化了与 Xero 广泛的会计功能的交互。无论您是自动化计费还是同步 CRM 数据,此 Openclaw Skills 资源都提供了企业级财务自动化所需的安全性、托管基础设施。
下载入口:https://github.com/openclaw/skills/tree/main/skills/byungkyu/xero从源直接安装技能的最快方式。
npx clawhub@latest install xero
将技能文件夹复制到以下位置之一
全局模式~/.openclaw/skills/
工作区
/skills/
优先级:工作区 > 本地 > 内置
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 xero。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
export MATON_API_KEY="YOUR_API_KEY"
curl -X POST https://ctrl.maton.ai/connections \r
-H "Authorization: Bearer $MATON_API_KEY" \r
-H "Content-Type: application/json" \r
-d '{"app": "xero"}'
该技能遵循原生 Xero Accounting API 模式。常见对象包括:
| 对象 | 描述 | 关键字段 |
|---|---|---|
| Contacts | 客户或供应商信息 | Name, EmailAddress, ContactID |
| Invoices | 销售或 | Type (ACCREC/ACCPAY), LineItems, Total |
| Accounts | 会计科目表 | AccountCode, Name, Type |
| Reports | 财务报表 | ReportID, ReportName, Rows |
| Payments | 交易记录 | PaymentID, Amount, Date |
name: xero
description: |
Xero API integration with managed OAuth. Manage contacts, invoices, payments, accounts, and run financial reports. Use this skill when users want to interact with Xero accounting data. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
compatibility: Requires network access and valid Maton API key
metadata:
author: maton
version: "1.0"
clawdbot:
emoji: ??
requires:
env:
- MATON_API_KEY
Access the Xero API with managed OAuth authentication. Manage contacts, invoices, payments, bank transactions, and run financial reports.
# List contacts
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/xero/api.xro/2.0/Contacts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://gateway.maton.ai/xero/{native-api-path}
Replace {native-api-path} with the actual Xero API endpoint path. The gateway proxies requests to api.xero.com and automatically injects your OAuth token and Xero-Tenant-Id header.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Xero OAuth connections at https://ctrl.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=xero&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
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'xero'}).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
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:
{
"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": "xero",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
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
If you have multiple Xero connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/xero/api.xro/2.0/Contacts')
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
If omitted, the gateway uses the default (oldest) active connection.
GET /xero/api.xro/2.0/Contacts
GET /xero/api.xro/2.0/Contacts/{contactId}
POST /xero/api.xro/2.0/Contacts
Content-Type: application/json
{
"Contacts": [{
"Name": "John Doe",
"EmailAddress": "[email protected]",
"Phones": [{"PhoneType": "DEFAULT", "PhoneNumber": "555-1234"}]
}]
}
GET /xero/api.xro/2.0/Invoices
POST /xero/api.xro/2.0/Invoices
Content-Type: application/json
{
"Invoices": [{
"Type": "ACCREC",
"Contact": {"ContactID": "xxx"},
"LineItems": [{
"Description": "Service",
"Quantity": 1,
"UnitAmount": 100.00,
"AccountCode": "200"
}]
}]
}
GET /xero/api.xro/2.0/Accounts
GET /xero/api.xro/2.0/Payments
GET /xero/api.xro/2.0/BankTransactions
GET /xero/api.xro/2.0/Reports/ProfitAndLoss?fromDate=2024-01-01&toDate=2024-12-31
GET /xero/api.xro/2.0/Reports/BalanceSheet?date=2024-12-31
GET /xero/api.xro/2.0/Reports/TrialBalance?date=2024-12-31
GET /xero/api.xro/2.0/Organisation
ACCREC - Accounts Receivable (sales invoice)ACCPAY - Accounts Payable (bill)const response = await fetch(
'https://gateway.maton.ai/xero/api.xro/2.0/Contacts',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
import os
import requests
response = requests.get(
'https://gateway.maton.ai/xero/api.xro/2.0/Contacts',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
Xero-Tenant-Id header is automatically injectedYYYY-MM-DD formatwhere query parameter for filteringcurl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.| Status | Meaning |
|---|---|
| 400 | Missing Xero connection |
| 401 | Invalid or missing Maton API key |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Xero API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
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
xero. For example:https://gateway.maton.ai/xero/api.xro/2.0/Contactshttps://gateway.maton.ai/api.xro/2.0/Contacts