已配置Zapier新关注者触发,能否用代码动作调用Twitter API发私信?
当然可以实现!
完全没问题——你可以通过Zapier的Python/JavaScript代码动作对接Twitter API,给每一位新关注者自动发送私信。下面是具体的实现步骤和注意事项:
第一步:准备Twitter Developer凭证
首先你需要在Twitter Developer Portal创建一个项目和应用,确保申请到必要的权限:
dm.write:允许发送私信user.read:允许读取用户信息dm.read(可选,但建议开启):允许读取私信对话
创建完成后,获取以下用户级凭证:
- API Key 和 API Secret Key
- Access Token 和 Access Token Secret(需要授权你的Twitter账号给这个应用,拿到可操作个人账号的凭证)
第二步:在Zapier中配置代码动作
在你的Zap里,触发条件已经设为“新关注者”,接下来添加一个Code动作,选择Python或JavaScript,然后配置输入变量:
- 将触发步骤中的「Follower ID」映射到输入变量(比如命名为
follower_id) - 添加你的Twitter凭证作为输入变量(比如
twitter_api_key、twitter_api_secret等)
第三步:编写代码示例
Python 示例
Zapier的Python环境预装了requests库,直接用它调用Twitter API v2即可:
import requests # 从输入变量获取凭证和数据 api_key = input_data['twitter_api_key'] api_secret = input_data['twitter_api_secret'] access_token = input_data['twitter_access_token'] access_token_secret = input_data['twitter_access_token_secret'] follower_id = input_data['follower_id'] message = "Hey there! Thanks so much for following me. I'm glad you're here 😊" # OAuth 1.0a 认证 auth = (api_key, api_secret, access_token, access_token_secret) # 调用Twitter API v2发送私信 api_url = f"https://api.twitter.com/2/dm_conversations/with/{follower_id}/messages" payload = {"text": message} response = requests.post(api_url, auth=auth, json=payload) # 处理响应 if response.status_code == 201: print("私信发送成功!") return {"status": "success", "data": response.json()} else: error_msg = response.json().get("errors", [{}])[0].get("message", "未知错误") print(f"发送失败:{error_msg}") raise Exception(f"API请求失败,状态码:{response.status_code}")
JavaScript 示例
Zapier的Node.js环境预装了oauth-1.0a和crypto库,用来处理OAuth 1.0a认证:
const OAuth = require('oauth-1.0a'); const crypto = require('crypto'); // 从输入变量获取数据 const apiKey = inputData.twitter_api_key; const apiSecret = inputData.twitter_api_secret; const accessToken = inputData.twitter_access_token; const accessTokenSecret = inputData.twitter_access_token_secret; const followerId = inputData.follower_id; const message = "Hey there! Thanks so much for following me. I'm glad you're here 😊"; // 配置OAuth 1.0a const oauth = OAuth({ consumer: { key: apiKey, secret: apiSecret }, signature_method: 'HMAC-SHA1', hash_function: (baseStr, key) => crypto.createHmac('sha1', key).update(baseStr).digest('base64') }); const token = { key: accessToken, secret: accessTokenSecret }; const apiUrl = `https://api.twitter.com/2/dm_conversations/with/${followerId}/messages`; const payload = { text: message }; // 生成认证头 const headers = oauth.toHeader(oauth.authorize({ url: apiUrl, method: 'POST', data: payload }, token)); headers['Content-Type'] = 'application/json'; // 发送请求 fetch(apiUrl, { method: 'POST', headers: headers, body: JSON.stringify(payload) }) .then(res => { if (!res.ok) throw new Error(`HTTP错误:${res.status}`); return res.json(); }) .then(data => { console.log("私信发送成功!"); callback(null, { status: "success", data: data }); }) .catch(err => { console.error("发送失败:", err); callback(err); });
关键注意事项
- 权限审核:确保你的Twitter应用已经通过必要的权限审核(如果是Essential Access,可能需要升级到Elevated Access才能使用私信API)
- 速率限制:Twitter API对私信有严格的速率限制(比如每15分钟最多150条),避免短时间内发送大量私信导致账号受限
- 内容合规:不要发送垃圾或违规内容,否则可能触发Twitter的反垃圾机制,导致账号被封禁
- 变量映射:务必确认触发步骤的「Follower ID」正确映射到代码的输入变量,否则代码无法获取目标用户ID
内容的提问来源于stack exchange,提问作者Elad Ratson
相关产品推荐
相关产品推荐

