抖音开放平台Logo
开发者文档
控制台

直播互动工具接入抖音云指南
收藏
我的收藏

一、介绍

直播互动工具是以主播为展示主体,提供丰富直播间互动效果的助播工具。互动工具由开发者自主开发,接入平台并开放给抖音主播挂载使用。互动工具支持通过 JS API 接入直播开放能力,包含直播间的用户信息、互动数据(点赞、送礼、评论等)。
直播互动工具会使用到抖音直播间数据,基于抖音侧合规风险考量,互动工具如果需要进行网络请求,需将后端服务部署到抖音云。
抖音云是服务于抖音开放生态的一站式后端服务托管平台,为应用(小程序、小游戏、小玩法)开发者提供后端服务的开发、部署、运行、监控、运维的一站式开发体验。
    提升研效:一体机式后端服务托管平台,免登录免鉴权云调用降低接入门槛。首次接入 3-14 人天,迭代减少 0.5 人天起
    提升安全性:调用链路免费防 DDoS 攻击,就近加速;服务端与抖音开放平台 OpenApi 走内网专线。
    提升稳定性:通过 Serverless 弹性伸缩的服务、开箱即用的的运维监控等产品能力提高稳定性

二、整体接入流程

接入流程
系统交互

三、分环节说明

为应用开通抖音云并初始化云资源

为应用开通抖音云

前往抖音云控制台,首次开通发放 180 元云服务体验代金券(30 天有效),同一实名认证主体(企业、个人)下仅限发放一次。
选择应用
开通抖音云
进入「总览页」

初始化云资源:新建服务及开通数据库

步骤
详情
新建服务
我们提供了 2 类服务部署模式可供选择
    1.容器服务:适合后端开发者,通过 dockerfile 构建镜像,支持所有语言和框架。参考快速部署服务服务部署失败问题排查
    2.函数服务:适合前端开发者,支持 Node.js 在线开发、运行、部署,详情云函数开发指南,支持重度开发者进行本地开发函数服务
新建触发器
抖音云提供了触发器能力,开发者可以通过配置触发器来实现定时性周期任务。
开通数据库
基于行业运营规则要求,组件中心目前开放 MySQLMongoDBRedis,开发者可按需启用、

开发

客户端开发

下载开发者工具 4.3.2 及以上版本开发抖音云相关能力,目前向直播互动工具开放如下 2 个网络请求的 JS API

兼容性说明

支持在基础库 3.48.0.0 版本以上使用,在各个客户端的版本兼容性如下。
抖音 App(安卓/iOS)
直播伴侣
IDE
tt.login
32.1.0 及以上
8.8.0 及以上
4.3.2 及以上
tt.checkSession
32.1.0 及以上
8.8.0 及以上
4.3.2 及以上
tt.createCloud
32.1.0 及以上
8.8.0 及以上
4.3.2 及以上
cloud.callContainer
32.1.0 及以上
8.8.0 及以上
4.3.2 及以上
cloud.connectContainer
32.1.0 及以上
8.8.0 及以上
4.3.2 及以上
在代码中添加对基础库版本的兼容性判断逻辑:
canUseCommand(version1) { const compareVersion = '3.48.0.0'; const v1 = version1.split('.').map(Number); const v2 = compareVersion.split('.').map(Number); for (let i = 0; i < v1.length; i++) { if (v1[i] > v2[i]) { return true; } else if (v1[i] < v2[i]) { return false; } } return true; },
在使用 tt.login, tt.checkSession, tt.createCloud, cloud.callContainer, cloud.connectContainer 前使用上述判断方法,如下:
const systemInfo = tt.getSystemInfoSync(); if(this.canUseCommand(systemInfo.SDKUpdateVersion) && tt.login) { tt.login({ success: (res) => { }, fail: (res) => { }, }); }
const systemInfo = tt.getSystemInfoSync(); if(this.canUseCommand(systemInfo.SDKUpdateVersion) && tt.createCloud) { const cloud = tt.createCloud({ serviceID: 'xxx', envID: 'xxx' }); // 创建 cloud 实例后即可使用 callContainer 和 connectContainer cloud.callContainer() cloud.connectContainer() }

最佳实践 WIP

app.js 中初始化 cloud
在 app.js 的 onLaunch 方法中可全局实例化一个 cloud 实例,后续通过该 cloud 实例调用 callContainer 和 connectContainer。全局也仅需调 1 次 tt.login 即可,代码如下:
App({ canUseCommand(version1) { const compareVersion = '3.48.0.0'; const v1 = version1.split('.').map(Number); const v2 = compareVersion.split('.').map(Number); for (let i = 0; i < v1.length; i++) { if (v1[i] > v2[i]) { return true; } else if (v1[i] < v2[i]) { return false; } } return true; }, onLaunch: async function () { const systemInfo = tt.getSystemInfoSync(); if (this.canUseCommand(systemInfo.SDKUpdateVersion) && tt.createCloud && tt.login && tt.checkSession) { const cloud = tt.createCloud({ envID: "xxx", // 抖音云环境 ID serviceID: "xxx", // 抖音云服务 ID }); let isLogin = false; try { await this.handleCheckSession(); isLogin = true; } catch (err) { console.log(`session 已过期,需要重新登录`, err); const res = await this.handleLogin(); isLogin = res.isLogin; } this.globalData = { cloud, isLogin, }; }else { console.log('抖音云暂无法使用'); } }, handleLogin() { return new Promise((resolve) => { return tt.login({ success: (res) => { console.log("login success", res); resolve(res); }, fail: (err) => { console.log("login err", err); resolve({ isLogin: false, errMsg: err.errMsg, }); }, }); }); }, handleCheckSession() { return new Promise((resolve, reject) => { return tt.checkSession({ success: (res) => { console.log("checkSession success", res); resolve(res); }, fail: (err) => { console.log("checkSession fail", err); reject(err); }, }); }); }, });
备注:若在首页 onload 时需要调用 callContainer 和 connectContainer。 可将上述 onLaunch 里的逻辑移步至首页的 onLoad 中。在拿到 cloud 实例后再去调用 callContainer 或者 connectContainer。
调用云托管服务(cloud.callContainer)
开发者使用 cloud.callContainer 可调用部署在抖音云上的 http 服务接口,如下所示:
// 从全局获取 cloud 实例并调用 callContainer if (getApp().globalData && getApp().globalData.cloud) { const cloud = getApp().globalData.cloud; cloud.callContainer({ // 请改成实际业务path path: 'xxx', init: { method: 'GET', header: { 'content-type': 'application/json', }, timeout: 60000,//ms }, success: (res) => { console.log('callContainer success res', res); }, fail: (failRes) => { console.log('callContainer fail res', failRes); } }) } else { console.log('抖音云 callContainer 暂无法使用'); }
在服务端接口 header 中会默认注入如下参数,websocket 注入参数相同。
{ 'x-tt-serviceid': 'xxx', // 服务ID 'x-forwarded-for': 'XXX', // ip 地址 'x-tt-appid': 'xxx', // appid 'x-tt-envid': 'xxx', // 服务ID 'x-tt-openid': 'xxx', // 登录情况下注入主播的 openid }
调用 webSocket(cloud.connectContainer)
以下为客户端代码,服务端开发参考 服务端使用云托管 webSocket
// websocket 使用前提为必须登录 if (getApp().globalData && getApp().globalData.cloud && getApp().globalData.isLogin) { const cloud = getApp().globalData.cloud; cloudSocketTask = cloud.connectContainer({ path: "/xxx", //请填写实际业务path success: (res) => { // 创建成功的回调 console.log("websocket创建成功", res); }, fail: (res) => { // 创建失败的回调 console.log("websocket 创建失败", res); }, complete: (res) => { // 创建完毕的回调 console.log("websocket 创建完毕", res); }, }); cloudSocketTask.onOpen(() => { // 此时表示 websocket 已经处于 open 状态 console.log("WebSocket 已连接"); cloudSocketTask.send({data:'hello'}); }); cloudSocketTask.onClose(() => { // 此时表示 websocket 已经处于 closed 状态 console.log("WebSocket 已断开"); }); cloudSocketTask.onError((error) => { // 此处表示 websocket 有错误发生 console.error("WebSocket 发生错误:", error); }); cloudSocketTask.onMessage((message) => { // 每次 WebSocket 发送的信息 console.log("websocket 下行消息", message); }); }else { console.log('抖音云 websocket 不可用'); }

服务端开发

抖音云为开发者提供一批 官方模板,覆盖 GO、Java、Php、Python、Node.js 等开发语言。
抖音云针对 JetBrains 系列的 IDE 平台提供了 Douyin Cloud ToolKit 插件,支持 IDEA、Goland、Pycharm、PhpStorm。

部署到 dev 开发环境

基于行业运营规则,dev 开发环境仅限 IDE 开发时进行调用,抖音 App 及直播伴侣的线上流量无法访问。
容器服务部署
函数服务部署
IDEA 插件支持一键部署到 dev 开发环境
函数服务可使用 抖音云 cli 部署

调试

自测接口

容器服务
函数服务
可使用 IDEA 插件 进行本地接口调试,调试前请先前往服务列表开启本地调试能力。
    限频:调试请求每分钟限 100 次,每天限制 2000 次调用。
    包体限制:请求响应包体限制 1KB,禁止传输过大的包体。
目前仅支持云端在线调试

联调接口

注:非调试流量调用服务,需要前往「访问控制-外网入流量」添加授权访问路径,否则会拒绝访问 403。
容器服务
函数服务
    抖音 IDE 本地联调:配置后将网络请求转发到本地的后端服务。注:直播互动工具暂不支持
    联调 dev 开发环境:IDE 中网络请求指定为 dev 开发环境进行联调,后端开发者先部署到 dev 开发环境
    函数服务在 IDE 中默认会请求到云端编辑器的草稿区代码

4.3 真机调试

在 IDE 点击「预览」or「真机调试」,生成调试二维码,使用直播间「调试悬浮球」扫调试二维码,然后开始测试
注:真机调试 属于调试流量,目前仅支持请求 dev 开发环境。
IDE 点击「预览」or「真机调试」
使用直播间「调试悬浮球」扫调试二维码

部署到 prod 生产环境

dev/prod 环境是独立的 2 套环境,建议在 dev 环境验证后再发布到 prod 环境,避免线上故障。prod 环境提供更多特性支持,如 事件预警、告警等能力。
基于行业运营规则,抖音 App 及直播伴侣的线上流量仅限访问 prod 生产环境,无法请求 dev 开发环境。提审版本需要注意指定调用 prod 生产环境。
选择代码
部署发布
灰度上线
添加授权访问路径
prod 环境仅支持部署 dev 环境已发布成功的版本。请先在 dev 环境发布验证完后,再部署到 prod 环境。
构建并部署
灰度时,可查看灰度版本及线上版本的监控、日志、实例详情。
调整流量到 100% 后完成全量上线。
非调试流量调用服务,需要前往「访问控制-外网入流量」添加授权访问路径,否则会拒绝访问 403,导致线上请求失败。

运维

监控
服务日志
添加告警
事件预警
    数据库监控
在服务端代码中完善日志输出,用于线上异常定位,详情见日志查询
抖音云支持开发者配置事件预警规则,感知高热事件,提前介入处理避免故障的发生。开发者可在总览页面观察应用监控、环境调用量监控,实时感知流量。 应用监控及流量突增事件预警
暂不支持互动工具,预期 11 月底支持。

查看账单并充值开票

费用中心总览
充值
开发票
可用余额预警
账号下产生的费用相关问题,都可以前往「费用中心」查看。
计费说明可查看 产品定价
支持在线支付及线下汇款
发票开通的主体为直播互动工具的实名认证主体
在费用中心配置 「可用余额预警」,配置后抖音云将告警信息发送给用户权限中有管理员权限的用户。无需前往「消息中心」配置接收人。

四、最佳实践

云服务资源配置推荐

详情见产品定价
推荐配置
案例:
服务
实例数量设置 0-10,无流量下会自动缩容到 0,当并发数增长后会自动扩充实例数量。
缩容到 0 后首次调用会触发冷启动,设置最小实例为 1 可消除冷启动影响
以下配置适用于 QPS 峰值 200+,云服务月销近 200 元
    1.服务 15 元
    a.函数服务 5 元
    b.日志服务 10 元
    2.Redis 2 台 180 元
    a.dev 环境配置「256MB*2 节点」 包年包月 20 元
    b.prod 环境配置「2GiB * 2 节点」 包年包月 160 元
可选
    1.函数服务 预留 1 个 1GB 内存的实例消除冷启动:2.6 元/天*30=78 元
    2.开通 MySQL or MongoDB 做持久化存储,250 元+
存储
开通后系统默认会注入高负载告警规则,收到告警后可在控制台进行升配。
    Redis:
    dev 开发环境「256MB*2 节点」 包年包月 20 元
    prod 线上环境「1GiB * 2 节点」 包年包月 80 元
    MySQL:「1 核 2GB 内存 20GB」 包年包月 264 元
    MongoDB:「1 核 2GB 内存 20GB」 包年包月 297 元

五、常见问题

后端服务是否一定要部署在抖音云?

直播互动工具会使用到抖音直播间数据,基于抖音侧合规风险考量,互动工具如果需要进行网络请求,需将后端服务部署到抖音云。

上线前如何验证 prod 生产环境?

目前 prod 生产环境流量仅限抖音 App 及直播伴侣的线上流量访问,可在业务中做灰度逻辑进行验证,验证完成后再全量。

真机调试请求失败

真机调试 属于调试流量,目前仅支持请求 dev 开发环境。

访问接口 403

对于需要对外网提供接口的服务,请打开外网入流量开关,并添加授权外网访问的路径,避免内网接口被外网调用产生越权。详情外网流量

下线互动插件后关闭抖音云服务

步骤
说明
关闭组件、删除服务后将不再扣费
账号余额提现
开通按量付费产品后,账号将会预留 100 元不可提现。
你需要先关闭组件、删除服务后再联系我们为您退订开通的云产品,退订后将不再预留 100 元。