答题类社群机器人:接入猜一猜谜语 API 做"每日一题"
# 答题类社群机器人:接入猜一猜谜语 API 做"每日一题"
> 接口/接入点:猜一猜谜语 API(151-2 随机) · 免费 · 适用人群:社群运营、客服/机器人开发者 · 阅读时间:约 5 分钟
## 核心要点
- 玩法:机器人定时在群/频道推送一道谜语,用户回复答案,机器人判题并统计。
- 接口**无订阅推送/回调**,推送节奏由你方定时任务(cron)自己控制;谜底由你自建比对(见 [答案校验](https://www.showapi.com/guides/riddle-answer-check-151))。
- 免费档位有限流,机器人高并发推题要加缓存与频控(见 [频控与缓存](https://www.showapi.com/guides/riddle-rate-limit-151))。
## Why:这跟我有什么关系
社群/公众号想做"每日一谜"提升活跃,自己维护题库麻烦。用猜一猜谜语 API 免费供给,机器人只负责出题、收答案、判题、晒榜。
## What:接口速览
| 项 | 内容 |
|----|------|
| 取题 | 151-2 随机(可传 `typeId`,如 `njmy` 脑筋急转弯) |
| 推送 | 你方 cron 定时触发(接口无回调) |
| 判题 | 自建(归一化比对 `Answer`) |
| 统计 | 你方业务数据(答对数/连续天数) |
## How:每日一题机器人
### 步骤 1 — 定时出题(cron 每日 09:00)
```python
import requests, json
def daily_question(type_id="njmy"):
r = requests.post("https://route.showapi.com/151-2",
params={"appKey": "YOUR_APPKEY"},
data={"typeId": type_id}, timeout=10).json()
items = r["showapi_res_body"].get("pagebean", {}).get("contentlist", [])
q = items[0]
# 存题面下发,答案仅服务端持有
return {"qid": hash(q["Title"]), "title": q["Title"], "answer": q["Answer"]}
```
### 步骤 2 — 收答案并判题
```python
from answer_check import check # 见 答案校验 文章
def on_user_answer(qid, user_input, stored):
if check(user_input, stored["answer"]):
return "🎉 答对啦!"
return "再想想~(答案稍后揭晓)"
```
### 步骤 3 — 互动统计
```python
def record(uid, correct: bool):
rds.hincrby("riddle_score", uid, 1 if correct else 0)
rds.hincrby("riddle_streak", uid, 1 if correct else 0) # 连续答对
```
## 返回示例与解析
取题返回结构见 [返回字段全解](https://www.showapi.com/guides/riddle-response-fields-151)。注意 151-2 字段大写 `Title`/`Answer`。
## 进阶/边界
- **无回调,自己排期**:接口不主动推送,用 cron/消息队列定时拉题再下发。
- **答案不下发**:机器人消息只发谜面,答案服务端比对,防作弊。
- **频控**:多群并发推送别直连接口,服务端建题池(见 [频控与缓存](https://www.showapi.com/guides/riddle-rate-limit-151))。
- **难度分层**:按 `typeId` 分(如早晨 `etmy` 儿童、午间 `njmy` 脑筋急转弯)。
## FAQ
**Q1:接口能自动每天推题吗?**
不能,接口无订阅/回调。推送由你方定时任务触发,接口只负责"给题"。
**Q2:机器人怎么知道用户答没答对?**
用谜底文本自建比对(去前缀 + 归一化),见 [答案校验](https://www.showapi.com/guides/riddle-answer-check-151)。
**Q3:多群同时发会超免费额度吗?**
可能。建题池 + 频控,把实时调用降到最低;额度以官方 /free-api 为准。
**Q4:能按关键词出"节日谜语"吗?**
151-2/151-4 无关键词参数,只能按 `typeId` 类型取(如 `dmmy` 灯谜适合元宵)。
**Q5:连续答对榜怎么算?**
你方业务数据维护(如上方 `riddle_streak`),接口不提供。
## 相关能力 / 下一步阅读
- [拿到谜底后怎么校验用户答案?API 不代判,需自建比对逻辑](https://www.showapi.com/guides/riddle-answer-check-151)
- [免费额度怎么用不超:猜一猜谜语 API 的调用频控与缓存建议](https://www.showapi.com/guides/riddle-rate-limit-151)
- [营销裂变:用猜一猜谜语 API 做答题抽奖与互动游戏](https://www.showapi.com/guides/riddle-marketing-activity-151)
- **本系列共 13 篇**:查看[猜一猜谜语 API 指南总目录](https://www.showapi.com/guides/riddle-guides-151)