Typeform:自动化调查与数据收集 - Openclaw Skills

作者:互联网

2026-03-20

AI教程

什么是 Typeform?

Typeform 技能使开发者能够与 Typeform API 交互,而无需处理繁琐的传统 OAuth 管理。通过利用 Maton 网关,此 Openclaw Skills 集成会自动将授权令牌注入请求中,允许您以编程方式创建、更新和删除表单或检索调查洞察。

它是您的自动化工作流与 Typeform 强大的数据收集平台之间的桥梁,确保收集用户反馈尽可能高效。无论您是在构建复杂的数据管道还是简单的通知系统,此技能都提供了必要的工具来大规模处理 Typeform 数据,同时保持凭据安全。

下载入口:https://github.com/openclaw/skills/tree/main/skills/byungkyu/typeform

安装与下载

1. ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install typeform

2. 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/ 工作区 /skills/

优先级:工作区 > 本地 > 内置

3. 提示词安装

将此提示词复制到 OpenClaw 即可自动安装。

请帮我使用 Clawhub 安装 typeform。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

Typeform 应用场景

  • 自动化创建用于客户反馈和潜在客户生成的调查。
  • 以编程方式检索和处理表单回复,进行实时数据分析。
  • 在单个工作流中管理多个 Typeform 工作空间和组织单位。
  • 提取调查洞察和摘要,用于自动化管理报告。
  • 根据外部触发器或数据库更新来更新现有的表单字段或配置。
Typeform 工作原理
  1. 使用请求头中提供的 Maton API 密钥建立身份验证。
  2. 用户通过 Maton 控制面板创建 OAuth 连接以授权 Typeform 访问。
  3. 请求发送到 Maton 网关 URL,该 URL 识别相应的 Typeform 连接。
  4. 网关将请求代理到原生 Typeform API,同时自动注入有效的 OAuth 令牌。
  5. 来自 Typeform 的响应通过网关传回给调用代理或应用程序。

Typeform 配置指南

  1. maton.ai/settings 获取 Maton API 密钥。
  2. 在终端中设置环境变量:
export MATON_API_KEY="YOUR_API_KEY"
  1. 使用控制 API 创建到 Typeform 的连接:
# 创建新连接
curl -X POST https://ctrl.maton.ai/connections r
-H "Authorization: Bearer $MATON_API_KEY" r
-H "Content-Type: application/json" r
-d '{"app": "typeform"}'
  1. 在浏览器中打开返回的 URL 以完成 OAuth 流程并授权 Openclaw Skills 访问。

Typeform 数据架构与分类体系

端点组 描述 关键操作
/typeform/forms 表单管理 创建、列出、更新和删除表单
/typeform/responses 提交数据 使用 since、until 和完成状态等过滤器检索回复
/typeform/insights 数据分析 访问特定表单性能的摘要洞察
/typeform/workspaces 组织 列出并检索特定 Typeform 工作空间的详细信息
/typeform/me 用户资料 检索有关已认证 Typeform 用户的信息
name: typeform
description: |
  Typeform API integration with managed OAuth. Create forms, manage responses, and access insights. Use this skill when users want to interact with Typeform surveys and responses. 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

Typeform

Access the Typeform API with managed OAuth authentication. Create and manage forms, retrieve responses, and access insights.

Quick Start

# List forms
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/typeform/forms?page_size=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/typeform/{native-api-path}

Replace {native-api-path} with the actual Typeform API endpoint path. The gateway proxies requests to api.typeform.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

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Typeform 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=typeform&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': 'typeform'}).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": "typeform",
    "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 Typeform 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/typeform/forms?page_size=10')
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

User

GET /typeform/me

Forms

List Forms

GET /typeform/forms?page_size=10

Get Form

GET /typeform/forms/{formId}

Create Form

POST /typeform/forms
Content-Type: application/json

{
  "title": "Customer Survey",
  "fields": [
    {"type": "short_text", "title": "What is your name?"},
    {"type": "email", "title": "What is your email?"}
  ]
}

Update Form

PUT /typeform/forms/{formId}
Content-Type: application/json

{
  "title": "Updated Survey Title",
  "fields": [...]
}

Delete Form

DELETE /typeform/forms/{formId}

Responses

List Responses

GET /typeform/forms/{formId}/responses?page_size=25

With filters:

GET /typeform/forms/{formId}/responses?since=2024-01-01T00:00:00Z&until=2024-12-31T23:59:59Z&completed=true

Insights

GET /typeform/insights/{formId}/summary

Workspaces

GET /typeform/workspaces
GET /typeform/workspaces/{workspaceId}

Field Types

  • short_text - Single line text
  • long_text - Multi-line text
  • email - Email address
  • number - Numeric input
  • rating - Star rating
  • opinion_scale - 0-10 scale
  • multiple_choice - Single or multiple selection
  • yes_no - Boolean
  • date - Date picker
  • dropdown - Dropdown selection

Code Examples

JavaScript

const response = await fetch(
  'https://gateway.maton.ai/typeform/forms?page_size=10',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);

Python

import os
import requests

response = requests.get(
    'https://gateway.maton.ai/typeform/forms',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
    params={'page_size': 10}
)

Notes

  • Form IDs are alphanumeric strings
  • Response pagination uses before token
  • Timestamps are in ISO 8601 format
  • DELETE operations return HTTP 204
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsing
  • IMPORTANT: When piping curl output to jq 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.

Error Handling

Status Meaning
400 Missing Typeform connection
401 Invalid or missing Maton API key
429 Rate limited (10 req/sec per account)
4xx/5xx Passthrough error from Typeform API

Troubleshooting: API Key Issues

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. 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

  1. Ensure your URL path starts with typeform. For example:
  • Correct: https://gateway.maton.ai/typeform/forms
  • Incorrect: https://gateway.maton.ai/forms

Resources