2、AI能力接入准备:申请AI能力、获取Access Token、配置回调地址
好,咱们接着往下走。上一章我们把抖音小程序的开发环境搭好了,脚手架也跑起来了。但说实话,那只是个空壳子。真正让小程序“智能”起来的,是抖音平台提供的那些AI能力。
这一章,我就带你走一遍接入前的准备工作。说白了,就是三件事:申请能力、拿令牌、配回调。这三步走不对,后面全是白搭。我在项目里见过太多人卡在这一步,代码写完了发现权限没开,那叫一个尴尬。
2.1 申请AI能力——不是所有能力都默认开放
抖音开放平台提供了不少AI能力,比如OCR(文字识别)、语音识别、图像识别等等。但注意,这些能力不是注册了账号就自动有的。你得一个个去申请。
我个人习惯是,先列个清单,看看项目到底需要什么。别一股脑全申请了,审核也慢,管理也乱。
2.1.1 能力清单长什么样?
我整理了一份常用的AI能力表,你参考一下:
| 能力名称 | 能力ID | 适用场景 | 申请门槛 |
|---|---|---|---|
| 通用文字识别 | ocr_general | 图片文字提取、卡证识别 | 低(企业认证即可) |
| 语音识别(短语音) | asr_short | 语音搜索、语音输入 | 中(需提交场景说明) |
| 语音合成 | tts_default | 语音播报、有声内容 | 低 |
| 图像审核 | image_censor | 内容安全、违规检测 | 高(需签署合规协议) |
| 人脸检测 | face_detect | 美颜特效、人脸分析 | 中 |
2.1.2 申请流程
操作路径其实很简单。登录抖音开放平台控制台,找到「AI能力」菜单,点进去就能看到所有可用的能力列表。
点击「申请」按钮,会弹出一个表单。一般需要填:
- 应用名称:选你当前开发的小程序
- 能力用途:简单描述一下你打算怎么用这个能力
- 预估调用量:填个大概的数字就行,不用太精确
提交之后,等着审核。快的几分钟,慢的一两天。嗯,这里要注意,如果审核被拒,通常是因为用途描述写得太模糊。比如你写“用于识别图片”,这就不行。你得写清楚:“用于识别用户上传的身份证照片,提取姓名和身份证号”。越具体,过审越快。
2.2 获取Access Token——你的API通行证
能力申请下来了,接下来就是拿令牌。Access Token,说白了就是你调用AI接口时的身份凭证。每次请求都得带上它,不然平台不认识你。
我记得刚开始做接入时,我犯过一个低级错误——把Token写死在代码里。结果Token过期了,线上服务直接崩了。后来学乖了,必须动态获取、定时刷新。
2.2.1 获取Token的接口
抖音开放平台提供了一个统一的接口来拿Token:
POST https://open.douyin.com/oauth/client_token/
Content-Type: application/json
{
"client_key": "你的应用的client_key",
"client_secret": "你的应用的client_secret",
"grant_type": "client_credential"
}
返回的数据长这样:
{
"message": "success",
"data": {
"access_token": "clt.xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxx",
"expires_in": 86400,
"refresh_token": "rft.xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
2.2.2 怎么管理Token?
我建议你在服务端维护一个Token管理模块。大致逻辑是这样的:
- 启动时先检查本地有没有缓存的Token
- 如果有,检查是否过期(比较当前时间和expires_in)
- 如果没过期,直接用
- 如果过期了或没有,重新请求新的Token
- 把新Token存起来,同时记录获取时间
代码示例(Node.js版):
const axios = require('axios');
class TokenManager {
constructor(clientKey, clientSecret) {
this.clientKey = clientKey;
this.clientSecret = clientSecret;
this.token = null;
this.expireTime = 0;
}
async getToken() {
// 如果Token还在有效期内,直接返回
if (this.token && Date.now() < this.expireTime) {
return this.token;
}
// 否则重新获取
const res = await axios.post('https://open.douyin.com/oauth/client_token/', {
client_key: this.clientKey,
client_secret: this.clientSecret,
grant_type: 'client_credential'
});
const data = res.data.data;
this.token = data.access_token;
// 提前5分钟过期,留点余量
this.expireTime = Date.now() + (data.expires_in - 300) * 1000;
return this.token;
}
}
// 使用
const tokenMgr = new TokenManager('你的client_key', '你的client_secret');
const token = await tokenMgr.getToken();
2.3 配置回调地址——让AI主动找你
有些AI能力是异步的。比如语音识别长音频、视频审核这些,你提交任务后,平台处理需要时间。处理完了,它会通过回调地址通知你结果。
说白了,回调就是平台主动给你打电话,告诉你“活干完了,来拿结果吧”。
2.3.1 回调地址怎么配?
在抖音开放平台控制台,找到你的应用,进入「能力配置」页面。每个AI能力下面,基本都有一个「回调地址」的配置项。
填什么?填你服务端的一个HTTP接口地址。比如:
https://你的域名.com/api/ai/callback/ocr
注意,必须是公网可访问的地址。本地调试时,你可以用内网穿透工具(比如ngrok)临时搞一个公网地址来测试。
2.3.2 回调接口怎么写?
回调接口需要接收POST请求,数据格式一般是JSON。以OCR为例,回调数据长这样:
{
"event": "ocr_result",
"task_id": "task_xxxxxxxxxxxx",
"data": {
"status": "success",
"result": {
"text": "识别的文字内容",
"confidence": 0.98
}
}
}
你的接口要做的事很简单:
- 校验签名(防止伪造回调)
- 根据task_id找到对应的任务
- 把结果存起来或者推送给前端
- 返回200状态码,告诉平台“我收到了”
代码示例:
// Express.js 示例
app.post('/api/ai/callback/ocr', async (req, res) => {
const body = req.body;
// 1. 校验签名(这里省略具体实现)
if (!verifySignature(body)) {
return res.status(401).send('Invalid signature');
}
// 2. 处理结果
const { task_id, data } = body;
if (data.status === 'success') {
// 把结果存到数据库
await saveResult(task_id, data.result);
// 通知前端(比如通过WebSocket)
notifyClient(task_id, data.result);
}
// 3. 告诉平台已收到
res.status(200).send('ok');
});
2.4 小结
这一章的内容其实不复杂,但很重要。你想想看,AI能力申请不下来,后面代码写得再漂亮也没用。Token拿不到,接口调不通。回调配不对,异步任务收不到结果。
我个人的经验是,这三步最好在项目启动第一天就搞定。别等到写代码了才发现权限没开,那节奏就全乱了。
下一章,我们就要真正动手调接口了。我会拿OCR和语音识别这两个最常用的能力,带你走一遍完整的调用流程。到时候你会发现,准备工作做扎实了,后面就是一马平川。