如何用 TwexAPI 管理 X 互动服务订单
互动服务订单不应该被写成增长捷径。它更像一个运营请求,需要审批、预算控制、审计日志,并且要清楚知道活动和平台适用哪些规则。
这篇文章介绍 TwexAPI 互动服务订单流程涉及的两个端点:用 POST /twitter/action 提交已审批订单,保存返回的 order_id,再用 GET /twitter/action/order-status 查询交付状态。
提交订单前先做检查
在把订单表单接到 API 之前,先建立防护规则。
- 确认目标账号或活动已经获得授权。
- 检查该操作是否符合相关平台规则、客户合同和内部政策。
- 要求内部审批 ID、预算负责人和活动原因。
- 记录原始目标 URL、请求服务、数量、请求人和时间戳。
- 将订单提交与数据分析报表分开,避免把付费活动和自然表现混在一起。
如果无法说明为什么允许提交、是谁批准的,就不要自动化它。
提交已审批订单
发送 POST 请求到:
https://api.twexapi.io/twitter/action请求体包含三个字段:
| 字段 | 是否必填 | 说明 |
|---|---|---|
service | 是 | 端点支持的服务值之一,例如 likes、retweets、views、bookmarks 或 followers。 |
link | 是 | 目标帖子或 profile 的完整 X/Twitter URL。 |
quantity | 是 | 正整数数量。提交前请先按你的审批规则校验。 |
curl --request POST \
--url https://api.twexapi.io/twitter/action \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"service": "views",
"link": "https://x.com/username/status/1234567890",
"quantity": 100
}'成功响应会返回订单标识:
{
"code": 200,
"msg": "success",
"data": {
"order_id": 12345
}
}建议把完整请求和响应写入你自己的订单表。order_id 是后续查询状态的关键字段。
查询订单状态
使用状态端点监控进度:
GET https://api.twexapi.io/twitter/action/order-status?order_id=<order_id>curl --request GET \
--url 'https://api.twexapi.io/twitter/action/order-status?order_id=12345' \
--header 'Authorization: Bearer <token>'状态响应可能包含 order_id、start_count、fee 和 status 等字段。
{
"code": 200,
"msg": "success",
"data": {
"order_id": 12345,
"start_count": 0,
"fee": 1,
"status": "completed"
}
}把 pending、in_progress、partial、completed 和 failed 当作运营状态处理。只有状态端点显示完成时,才认为订单交付完成。
带审批元信息的 Python 客户端
下面示例让 API 调用保持简单,把审批和审计逻辑放在应用层。脚本要求传入审批 ID,并把每次提交写入 JSONL。
1import json
2from datetime import datetime, timezone
3from pathlib import Path
4
5import requests
6
7TOKEN = "<your_bearer_token>"
8ORDER_URL = "https://api.twexapi.io/twitter/action"
9STATUS_URL = "https://api.twexapi.io/twitter/action/order-status"
10ORDER_LOG = Path("engagement-service-orders.jsonl")
11
12headers = {
13 "Authorization": f"Bearer {TOKEN}",
14 "Content-Type": "application/json",
15}
16
17ALLOWED_SERVICES = {"likes", "retweets", "views", "bookmarks", "followers"}
18
19def submit_order(service, link, quantity, approval_id, requester, reason):
20 if service not in ALLOWED_SERVICES:
21 raise ValueError(f"Unsupported service: {service}")
22 if not approval_id:
23 raise ValueError("approval_id is required")
24 if quantity <= 0:
25 raise ValueError("quantity must be positive")
26
27 payload = {
28 "service": service,
29 "link": link,
30 "quantity": quantity,
31 }
32
33 response = requests.post(ORDER_URL, headers=headers, json=payload, timeout=30)
34 response.raise_for_status()
35 body = response.json()
36 order_id = (body.get("data") or {}).get("order_id")
37
38 log_row = {
39 "approval_id": approval_id,
40 "requester": requester,
41 "reason": reason,
42 "submitted_at": datetime.now(timezone.utc).isoformat(),
43 "request": payload,
44 "response": body,
45 "order_id": order_id,
46 }
47 with ORDER_LOG.open("a", encoding="utf-8") as f:
48 f.write(json.dumps(log_row, ensure_ascii=False) + "\n")
49
50 return order_id
51
52def check_status(order_id):
53 response = requests.get(
54 STATUS_URL,
55 headers={"Authorization": f"Bearer {TOKEN}"},
56 params={"order_id": order_id},
57 timeout=30,
58 )
59 response.raise_for_status()
60 return response.json()
61
62order_id = submit_order(
63 service="views",
64 link="https://x.com/username/status/1234567890",
65 quantity=100,
66 approval_id="APPROVAL-2025-001",
67 requester="campaign-ops@example.com",
68 reason="Approved campaign operations request",
69)
70
71print(check_status(order_id))生产环境中,订单应存进数据库,而不是本地 JSONL 文件;这个流程也应该只开放给已授权的运营人员。
运营检查清单
每次提交前都做一遍检查:
| 检查项 | 为什么重要 |
|---|---|
| 目标 URL 正确 | 避免把活动发到错误帖子或 profile。 |
| 活动已审批 | 花费发生前先建立责任链。 |
| 数量符合审批 | 防止误提交过量订单。 |
| 服务类型允许 | 保证流程在你的政策边界内。 |
| 已保存 order ID | 后续状态查询和支持沟通都需要它。 |
| 报表有明确标签 | 避免把付费活动误当成自然表现。 |
这些检查能让营销、财务和支持团队少一些意外。
状态追踪模式
一个简单的轮询任务可以持续更新订单状态,直到订单进入终态。
1import time
2
3TERMINAL_STATUSES = {"completed", "failed"}
4
5def wait_for_terminal_status(order_id, poll_seconds=60, max_checks=30):
6 for _ in range(max_checks):
7 body = check_status(order_id)
8 status = (body.get("data") or {}).get("status")
9 print(f"order={order_id} status={status}")
10
11 if status in TERMINAL_STATUSES:
12 return body
13
14 time.sleep(poll_seconds)
15
16 raise TimeoutError(f"Order {order_id} did not reach a terminal status")轮询间隔要合理。状态查询是为了帮助运营,而不是制造不必要的请求压力。
常见坑
- 没有审批记录就提交订单。
- 报表中混合付费和自然指标,却没有明确标签。
- 提交失败后直接重试,没有确认是否已经创建订单。
- 目标 URL 没规范化,导致活动发错位置。
- 把
partial当成completed。 - 把 API 权限给得太宽,实际有些人只应该提交活动申请。
小结
请只把 POST /twitter/action 当作已审批流程的最后一步。保存请求、响应、审批元信息和 order_id,再用 GET /twitter/action/order-status 监控状态。
技术调用本身很简单,真正重要的是外围控制层:验证、审批、审计能力和清晰的报表边界。