Calendly:排程自动化与活动管理 - Openclaw Skills
什么是 Calendly?
Calendly 技能是一种专门的集成,旨在桥接 AI 智能体与 Calendly 排程平台之间的差距。通过使用托管 OAuth 网关,该技能消除了手动处理令牌刷新和身份验证流程的复杂性。对于在 Openclaw Skills 生态系统中构建、并需要赋予其智能体读写排程数据能力的开发者来说,这是一个核心组件。
该技能提供了一条安全的路径来检索用户配置文件、列出可用的活动类型并管理已安排会议的完整生命周期。从检查忙碌时间到管理全组织范围的成员身份,它为任何 AI 驱动的排程助手或生产力自动化工具奠定了坚实的基础。
下载入口:https://github.com/openclaw/skills/tree/main/skills/byungkyu/calendly-api
安装与下载
1. ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install calendly-api
2. 手动安装
将技能文件夹复制到以下位置之一
全局模式~/.openclaw/skills/
工作区
<project>/skills/
优先级:工作区 > 本地 > 内置
3. 提示词安装
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 calendly-api。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
Calendly 应用场景
- 构建能够检查实时可用性并预订会议的 AI 排程助手
- 自动将 Calendly 受邀者数据与内部 CRM 系统同步
- 通过托管 Webhook 订阅坚控会议取消和触发器
- 创建自定义仪表板,汇总组织内的活动类型和已安排的会议议程
- 以编程方式管理用户忙碌时间,以确保准确的排程窗口
- AI 智能体或开发者使用特定的 Calendly 端点路径向 Maton 网关发送请求。
- 网关使用 Authorization 标头中提供的 MATON_API_KEY 对请求进行身份验证。
- 托管 OAuth 服务在将请求代理到官方 Calendly API 之前,会自动将有效的 Calendly 访问令牌附加到请求中。
- 系统处理请求(无论是检索活动类型还是创建新受邀者)并返回结构化 JSON 数据。
- 如果连接了多个帐户,网关将使用 Maton-Connection 标头将请求路由到正确的已验证帐户。
Calendly 配置指南
要开始使用此技能,您必须首先在环境中设置 API 密钥并授权您的 Calendly 帐户:
# 设置您的 Maton API 密钥
export MATON_API_KEY="YOUR_API_KEY"
创建一个连接以启动 OAuth 流程:
# 创建一个新的 Calendly 连接
curl -X POST https://ctrl.maton.ai/connections r
-H "Authorization: Bearer $MATON_API_KEY" r
-H "Content-Type: application/json" r
-d '{"app": "calendly"}'
在 Web 浏览器中打开响应中返回的 URL 以完成身份验证过程。激活后,您的 Openclaw Skills 智能体即可开始与网关进行交互。
Calendly 数据架构与分类体系
该技能以结构化 JSON 格式返回数据,利用 URI 作为资源的唯一标识符。关键数据实体包括:
| 实体 | 描述 | 关键字段 |
|---|---|---|
| 用户 | 用户配置文件和组织详细信息 | uri, name, slug, scheduling_url, timezone |
| 活动类型 | 不同会议类型的定义 | name, duration, kind, scheduling_url |
| 已安排的活动 | 特定会议实例 | start_time, end_time, status, location |
| 受邀者 | 活动中的个人参与者 | email, name, questions_and_answers, cancel_url |
| 可用性 | 用于排程的实时空闲时段 | start_time, status, invitees_remaining |
所有时间戳均遵循 ISO 8601 标准,以实现全球兼容。
name: calendly
description: |
Calendly API integration with managed OAuth. Access event types, scheduled events, invitees, availability, and manage webhooks. Use this skill when users want to view scheduling data, check availability, book meetings, or integrate with Calendly workflows. 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
Calendly
Access the Calendly API with managed OAuth authentication. Retrieve event types, scheduled events, invitees, availability data, and manage webhook subscriptions for scheduling automation.
Quick Start
# Get current user
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/users/me')
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/calendly/{native-api-path}
Replace {native-api-path} with the actual Calendly API endpoint path. The gateway proxies requests to api.calendly.com and automatically injects your OAuth token.
Authentication
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"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Calendly OAuth connections at https://ctrl.maton.ai.
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=calendly&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
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'calendly'}).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
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": "calendly",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
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
If you have multiple Calendly 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/calendly/users/me')
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.
API Reference
Users
Get Current User
GET /calendly/users/me
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/users/me')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"resource": {
"uri": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA",
"name": "Alice Johnson",
"slug": "alice-johnson",
"email": "[email protected]",
"scheduling_url": "https://calendly.com/alice-johnson",
"timezone": "America/New_York",
"avatar_url": "https://example.com/avatar.png",
"created_at": "2024-01-15T10:30:00.000000Z",
"updated_at": "2025-06-20T14:45:00.000000Z",
"current_organization": "https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB"
}
}
Get a User
GET /calendly/users/{uuid}
Event Types
List Event Types
GET /calendly/event_types
Query parameters:
user- User URI to filter event typesorganization- Organization URI to filter event typesactive- Filter by active status (true/false)count- Number of results to return (default 20, max 100)page_token- Token for paginationsort- Sort order (e.g.,name:asc,created_at:desc)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/event_types?user=https://api.calendly.com/users/AAAAAAAAAAAAAAAA&active=true')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"collection": [
{
"uri": "https://api.calendly.com/event_types/CCCCCCCCCCCCCCCC",
"name": "30 Minute Meeting",
"active": true,
"slug": "30min",
"scheduling_url": "https://calendly.com/alice-johnson/30min",
"duration": 30,
"kind": "solo",
"type": "StandardEventType",
"color": "#0066FF",
"created_at": "2024-02-01T09:00:00.000000Z",
"updated_at": "2025-05-15T11:30:00.000000Z",
"description_plain": "A quick 30-minute catch-up call",
"description_html": "<p>A quick 30-minute catch-up call</p>",
"profile": {
"type": "User",
"name": "Alice Johnson",
"owner": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA"
}
}
],
"pagination": {
"count": 1,
"next_page_token": null
}
}
Get an Event Type
GET /calendly/event_types/{uuid}
Scheduled Events
List Scheduled Events
GET /calendly/scheduled_events
Query parameters:
user- User URI to filter eventsorganization- Organization URI to filter eventsinvitee_email- Filter by invitee emailstatus- Filter by status (active,canceled)min_start_time- Filter events starting after this time (ISO 8601)max_start_time- Filter events starting before this time (ISO 8601)count- Number of results (default 20, max 100)page_token- Token for paginationsort- Sort order (e.g.,start_time:asc)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/scheduled_events?user=https://api.calendly.com/users/AAAAAAAAAAAAAAAA&status=active&min_start_time=2025-03-01T00:00:00Z')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"collection": [
{
"uri": "https://api.calendly.com/scheduled_events/DDDDDDDDDDDDDDDD",
"name": "30 Minute Meeting",
"status": "active",
"start_time": "2025-03-15T14:00:00.000000Z",
"end_time": "2025-03-15T14:30:00.000000Z",
"event_type": "https://api.calendly.com/event_types/CCCCCCCCCCCCCCCC",
"location": {
"type": "zoom",
"join_url": "https://zoom.us/j/123456789"
},
"invitees_counter": {
"total": 1,
"active": 1,
"limit": 1
},
"created_at": "2025-03-10T09:15:00.000000Z",
"updated_at": "2025-03-10T09:15:00.000000Z",
"event_memberships": [
{
"user": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA"
}
]
}
],
"pagination": {
"count": 1,
"next_page_token": null
}
}
Get a Scheduled Event
GET /calendly/scheduled_events/{uuid}
Cancel a Scheduled Event
POST /calendly/scheduled_events/{uuid}/cancellation
Content-Type: application/json
{
"reason": "Meeting rescheduled"
}
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'reason': 'Meeting rescheduled'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/calendly/scheduled_events/DDDDDDDDDDDDDDDD/cancellation', 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
Invitees
List Event Invitees
GET /calendly/scheduled_events/{event_uuid}/invitees
Query parameters:
status- Filter by status (active,canceled)email- Filter by invitee emailcount- Number of results (default 20, max 100)page_token- Token for paginationsort- Sort order (e.g.,created_at:asc)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/scheduled_events/DDDDDDDDDDDDDDDD/invitees')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"collection": [
{
"uri": "https://api.calendly.com/scheduled_events/DDDDDDDDDDDDDDDD/invitees/EEEEEEEEEEEEEEEE",
"email": "[email protected]",
"name": "Bob Smith",
"status": "active",
"timezone": "America/Los_Angeles",
"event": "https://api.calendly.com/scheduled_events/DDDDDDDDDDDDDDDD",
"created_at": "2025-03-10T09:15:00.000000Z",
"updated_at": "2025-03-10T09:15:00.000000Z",
"questions_and_answers": [
{
"question": "What would you like to discuss?",
"answer": "Project timeline review",
"position": 0
}
],
"tracking": {
"utm_source": null,
"utm_medium": null,
"utm_campaign": null
},
"cancel_url": "https://calendly.com/cancellations/EEEEEEEEEEEEEEEE",
"reschedule_url": "https://calendly.com/reschedulings/EEEEEEEEEEEEEEEE"
}
],
"pagination": {
"count": 1,
"next_page_token": null
}
}
Get an Invitee
GET /calendly/scheduled_events/{event_uuid}/invitees/{invitee_uuid}
Create Event Invitee (Scheduling API)
Schedule a meeting programmatically by creating an invitee. Requires a paid Calendly plan.
POST /calendly/event_types/{event_type_uuid}/invitees
Content-Type: application/json
{
"start_time": "2025-03-20T15:00:00Z",
"email": "[email protected]",
"name": "Bob Smith",
"timezone": "America/Los_Angeles",
"location": {
"kind": "zoom"
},
"questions_and_answers": [
{
"question_uuid": "QQQQQQQQQQQQQQQ",
"answer": "Project timeline review"
}
]
}
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'start_time': '2025-03-20T15:00:00Z', 'email': '[email protected]', 'name': 'Bob Smith'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/calendly/event_types/CCCCCCCCCCCCCCCC/invitees', 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
Note: The start_time must correspond to a valid available . Use the /event_type_available_times endpoint to find available times.
Availability
Get Event Type Available Times
GET /calendly/event_type_available_times
Query parameters:
event_type- Event type URI (required)start_time- Start of time range (ISO 8601, required)end_time- End of time range (ISO 8601, required, max 7 days from start)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/event_type_available_times?event_type=https://api.calendly.com/event_types/CCCCCCCCCCCCCCCC&start_time=2025-03-15T00:00:00Z&end_time=2025-03-22T00:00:00Z')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"collection": [
{
"status": "available",
"invitees_remaining": 1,
"start_time": "2025-03-17T14:00:00.000000Z",
"scheduling_url": "https://calendly.com/alice-johnson/30min/2025-03-17T14:00:00Z"
},
{
"status": "available",
"invitees_remaining": 1,
"start_time": "2025-03-17T14:30:00.000000Z",
"scheduling_url": "https://calendly.com/alice-johnson/30min/2025-03-17T14:30:00Z"
}
]
}
Get User Busy Times
GET /calendly/user_busy_times
Query parameters:
user- User URI (required)start_time- Start of time range (ISO 8601, required)end_time- End of time range (ISO 8601, required, max 7 days from start)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/user_busy_times?user=https://api.calendly.com/users/AAAAAAAAAAAAAAAA&start_time=2025-03-15T00:00:00Z&end_time=2025-03-22T00:00:00Z')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"collection": [
{
"type": "calendly",
"start_time": "2025-03-17T10:00:00.000000Z",
"end_time": "2025-03-17T11:00:00.000000Z"
},
{
"type": "external",
"start_time": "2025-03-18T14:00:00.000000Z",
"end_time": "2025-03-18T15:00:00.000000Z"
}
]
}
Get User Availability Schedules
GET /calendly/user_availability_schedules
Query parameters:
user- User URI (required)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/user_availability_schedules?user=https://api.calendly.com/users/AAAAAAAAAAAAAAAA')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Organization
List Organization Memberships
GET /calendly/organization_memberships
Query parameters:
organization- Organization URI (required)user- User URI to filteremail- Email to filtercount- Number of results (default 20, max 100)page_token- Token for pagination
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/organization_memberships?organization=https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"collection": [
{
"uri": "https://api.calendly.com/organization_memberships/FFFFFFFFFFFFFFFF",
"role": "admin",
"user": {
"uri": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA",
"name": "Alice Johnson",
"email": "[email protected]"
},
"organization": "https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB",
"created_at": "2024-01-15T10:30:00.000000Z",
"updated_at": "2025-06-20T14:45:00.000000Z"
}
],
"pagination": {
"count": 1,
"next_page_token": null
}
}
Webhooks
Webhooks require a paid Calendly plan (Standard, Teams, or Enterprise).
List Webhook Subscriptions
GET /calendly/webhook_subscriptions
Query parameters:
organization- Organization URI (required)scope- Filter by scope (user,organization)user- User URI to filter (when scope isuser)count- Number of results (default 20, max 100)page_token- Token for pagination
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/webhook_subscriptions?organization=https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB&scope=organization')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Webhook Subscription
POST /calendly/webhook_subscriptions
Content-Type: application/json
{
"url": "https://example.com/webhook",
"events": ["invitee.created", "invitee.canceled"],
"organization": "https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB",
"scope": "organization",
"signing_key": "your-secret-key"
}
Available events:
invitee.created- Triggered when an invitee schedules an eventinvitee.canceled- Triggered when an invitee cancels an eventrouting_form_submission.created- Triggered when a routing form is submitted
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'url': 'https://example.com/webhook', 'events': ['invitee.created', 'invitee.canceled'], 'organization': 'https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB', 'scope': 'organization'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/calendly/webhook_subscriptions', 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
Response:
{
"resource": {
"uri": "https://api.calendly.com/webhook_subscriptions/GGGGGGGGGGGGGGGG",
"callback_url": "https://example.com/webhook",
"created_at": "2025-03-01T12:00:00.000000Z",
"updated_at": "2025-03-01T12:00:00.000000Z",
"retry_started_at": null,
"state": "active",
"events": ["invitee.created", "invitee.canceled"],
"scope": "organization",
"organization": "https://api.calendly.com/organizations/BBBBBBBBBBBBBBBB",
"user": null,
"creator": "https://api.calendly.com/users/AAAAAAAAAAAAAAAA"
}
}
Get a Webhook Subscription
GET /calendly/webhook_subscriptions/{uuid}
Delete a Webhook Subscription
DELETE /calendly/webhook_subscriptions/{uuid}
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/webhook_subscriptions/GGGGGGGGGGGGGGGG', 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
Returns 204 No Content on success.
Pagination
Use page_token for pagination. Response includes pagination.next_page_token when more results exist:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/calendly/scheduled_events?user=USER_URI&page_token=NEXT_PAGE_TOKEN')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Code Examples
JavaScript
const response = await fetch(
'https://gateway.maton.ai/calendly/scheduled_events?user=https://api.calendly.com/users/AAAAAAAAAAAAAAAA&status=active',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const data = await response.json();
Python
import os
import requests
response = requests.get(
'https://gateway.maton.ai/calendly/scheduled_events',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={
'user': 'https://api.calendly.com/users/AAAAAAAAAAAAAAAA',
'status': 'active'
}
)
data = response.json()
Notes
- Resource identifiers are URIs (e.g.,
https://api.calendly.com/users/AAAAAAAAAAAAAAAA) - Timestamps are in ISO 8601 format
- The Scheduling API (Create Event Invitee) requires a paid Calendly plan
- Webhooks are not available on Calendly's free plan
- Availability endpoints have a 7-day maximum range per request and
start_timemust be in the future - The API does not support creating or managing event types programmatically
- IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling
| Status | Meaning |
|---|---|
| 400 | Bad request or missing Calendly connection |
| 401 | Invalid or missing Maton API key |
| 403 | Forbidden - insufficient permissions or plan restrictions |
| 404 | Resource not found |
| 424 | External calendar error (calendar integration issue on Calendly side) |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Calendly API |
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
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
- Ensure your URL path starts with
calendly. For example:
- Correct:
https://gateway.maton.ai/calendly/users/me - Incorrect:
https://gateway.maton.ai/users/me
Resources
-
08.07
开源NVIDIA cuFile API实现存储解决方案的互操作性
-
08.07
腾讯混元推出Hy ASR 3.0预览版,语音识别能力再上台阶
-
08.07
暗黑破坏神4如何获取神话暗金装备
-
08.07
《巅峰战舰》周年版本前瞻大国重器集结,055万吨大驱5.1入列
-
08.07
梦幻129级女儿村固伤装备如何选
-
08.07
大模型行业竞争加剧,字节跳动内部严禁蒸馏开源模型
-
- 《创世兵魂》游戏机枪玩法技巧详细说明掌握机枪玩法
- 08.07
-
- DNF2026奶妈VP技能如何选
- 08.07
-
- 《望月》飞行器制作做法
- 08.07
-
- 《望月》阿寅说明
- 08.07
-
- 《异环》扭蛋机在哪里说明
- 08.07
-
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏