TDS平台使用手册
平台中心
修订记录
|
版本号 |
发布日期 |
编制人 |
备注 |
|
TDSV0.0.1 |
2020-03-25 |
nezha |
创建 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
目录
1.2.1 开放接入各类功能,已经接入了抽奖、绑定大区、分享、充值排行等常用功能............... - 7 -
1.2.2 各功能提供条件及动作接口,功能与功能间的关联不用编写条件CGI.................................. - 8 -
1.2.3 支持直接配置常见的IDIP、积分、OIDB接口,不用再编写代码....................................... - 8 -
1.2.6 支持多条件任意关系的组合配置,包括and
or 甚至括号................................................... - 9 -
1.2.8 可以直接配置大区获取来源.从绑定大区模块获取 或者 弹出选择框获取........................ - 11 -
1.2.9 支持公共资格,多个不同流程可以共享同一公共资格......................................................... - 11 -
6.2 同一个活动里的分享、及几个抽奖按钮,分别在不同的时间段,怎么办?................................... - 29 -
6.5 为啥在IE浏览器下点击按钮,始终停留在“数据正在提交中”?................................................ - 31 -
6.12 条件的检测顺序是按什么顺序?如何调整条件检查顺序?........................................................... - 34 -
本手册主要按照大家使用TDS进行活动配置开发的顺序进行。
先介绍下TDS的各个概念、功能特性及基本原理;然后在了解了概念及基本原理之后,通过活动实例来展示下如何配置活动;然后活动配置完毕后,上线之前肯定有测试调测,这时就可能会遇到一些问题,这时就需要日志查询等;然后活动上线了肯定会需要查看活动的运营情况,运营管理;最后附上一些常见问题及技巧等。
功能, 就是完成一类功能需求的集合。例如抽奖、调研、报名、充值等。
由用户或程序去触发的一个完整的请求事件。例如,某些抽奖活动页面上的一个抽奖按钮,就对应TDS的一个流程。
流程下面包含一个或多个规则。
规则即描述了玩家参与该活动时,应该遵守的规则,例如满足什么条件,有多少次资格,做什么事。每一条规则,由条件、资格、动作组成。
玩家触发一个按钮,进入一个流程后,将执行该流程下面的规则。每个流程下面包含一个或多个规则。规则与规则之间有三种关系:
成功则退出:当流程遇到成功执行的规则时,则立即退出,不再执行后面的规则。
失败则退出:当流程遇到执行失败的规则时,则立即退出,不再执行后面的规则。
全部执行: 无论规则执行成功或失败,都将全部执行完所有结果。
某条规则执行所需要满足的条件,可以是抽奖V3的条件CGI,也可以是各业务模块提供的条件接口,也可以使IDIP或OIDB接口等。
一个规则可能需要配置多个条件。多个条件之间的关系,可以是and, or, 甚至有括号。
控制玩家参与某个动作(例如抽奖)的次数限制。资格可能是周期性的,也可能是一次性的。
某个规则在满足条件和资格后所要做的事情,例如:抽奖领取,提交问卷等。
通常,大家在配置条件时所需要的参数都是一些固定值。但某些时候,这个值却不是固定的。例如,某个流程有两个条件,条件2的输入参数,就是条件1的某个返回值。这时,这里的所需配的条件2的输入参数,我们称之为“动态参数”。
与动态参数概念类似。通常资格都是一些固定值,例如一次性1次,每天3次。但有时玩家的资格总数,会随着某个条件的变化而变化。 例如玩家1级时抽奖1次,2级时抽奖2次,3级时抽奖3次... ...。这时配置的资格,我们称之为“动态资格”。动态资格,往往通过配置动态参数来实现。
用户在TDS配置完毕活动后,点了预览发布,会将用户所配置的活动信息生成到两个活动描述文件里。一个是act.desc.php, 一个是act.desc.js 。然后AME将会按照这两个活动描述文件,去执行该活动的流程规则等。
TDS的Engine。主要负责检测各类条件,控制各类资格,执行各模块动作等等。每个流程都是向ame.php发起请求。AME处理用户访问的请求如下:

大家都可以向TDS接入各类功能。目前已经接入的有以下功能:
报名:可设置玩家报名字段等。
问卷:可设置玩家答题、得分等。
绑定大区:用户玩家需要绑定游戏内大区角色。
抽奖:抽奖或领取、礼包配置、概率设置等。
签到: 玩家每天可以在活动页面签到,例如通常用于签到抽奖。
分享:分享微博、QQ空间等。
充值:充值送抽奖资格、充值排行抽奖、排行名次等。
邀请:好友邀请。
消费:游戏内的消费数据。
包月:常用于包月开钻等。
反馈:用户可在活动页面反馈相关问题。
白名单:在白名单里的用户可做某件事,例如:白名单抽奖。
如果某一功能,需要另一功能做为前提条件。例如好友邀请数量30个以上,才能填问卷;填了问卷,才能绑定大区;绑定大区后,才能抽奖.... 这些都不用再编写条件CGI,都可以用模块各功能提供的条件接口、动作接口直接配置。
常见的IDIP、OIDB的接口,例如查游戏内角色等级、繁荣度,查询QQ等级、好友数量等,都可以直接配置,不用再编写代码。例:

在创建活动时,可以直接根据电子流号,获取活动的基本信息,例如:


目前的分表策略如下:
0-50W 1张表;50W-500W 10张表;500W以上100张表。然后QQ号会进行取模。
条件与条件之间的默认关系是and。如果活动需求比较复杂,也可以配置更灵活的条件关系。例如,假如有5个条件,他们的关系可以是 : 条件1 and 条件2 or (条件3 and条件4) or 条件5
当执行一个流程时,是默认按照规则关系,先后顺序依次执行流程下面的各个规则。目前支持一个流程的多规则之间的三种关系:成功则退出,失败则退出,全部执行。

成功则退出:是指某规则所包含的条件、资格、动作都满足且成功执行,
则退出流程。
失败则退出:是指某规则所包含的条件、资格、动作其一不满足或执行失败,则退出流程。
全部执行: 是指无论规则执行成功或失败,都全部执行所有规则。
假如你的活动页面是一个排行领奖,其中有一个按钮,第1名领取奖品A,第2名领取奖品B,第3名领取C。你就可以在抽奖这个流程里,建这三个规则,规则关系为:成功则退出。
又假如你的活动页面有一个按钮,这个按钮的作用是
玩家点了这个按钮就可以各分享1次微博和1次空间。那么我们可以为这个按钮,建一个流程,然后配置两个规则: 分享1次微博,分享1次空间,
规则关系为全部执行.
可以直接配置某个流程需要的大区来源,从绑定大区模块获取
或者 弹出选择框获取。


不同的任意流程,都可以用同一类公共资格来限制。例如,玩家可以答题,也可以抽奖,也可以分享微博,但公共资格只有2次。那么玩家可以自己选择答题与抽奖,或选择抽奖与分享微博,反正这3件事总的资格限制是2次,玩家只能选其二。
又例如一个实际活动需求,在一个页面上有4个按钮,每个按钮可以领取一次某一个QQ秀。但玩家总的又只能领取其中2个。那么就可以为这4个按钮配置上公共资格2次。
不仅有公共资格,还可以为单个规则配置资格频率限制

可以直接为条件配置不满足时的提示信息,或者根据条件的返回值,提示不同的提示信息。

如果您想根据条件的不同返回值,提示不同的信息,那么可以在失败提示那里输入json,
例[{"val":"-1","msg":"好"},{"val":"-2","msg":"很好"}]
有时在配置中,需要配置的某个参数,是前面某个接口的返回值。例如,玩家的资格次数就是其QQ等级。可以点击右边的“选择”,然后会列出前面的接口返回值进行选择。

比如上面这个例子。玩家的资格次数,等于其QQ等级再加2,那么可以这样:

目前支持153上的活动日志查询,方便调试。

可以在运营工具里,查看玩家的资格消耗流水情况。可以看到玩家参与某个流程某个规则的时间次数.(后续流程规则这里还会加上中文名称)

进入运营管理-》模块运营管理,可以看到各个模块的运营工具

如下:

这里以楚河汉界的转盘抽奖活动为例,该活动需求主要功能及规则如下:
1、玩家在活动期间只要游戏等级达到 20 级以上(包括 20 级),每天则可获得抽奖机会 1 次 (抽奖模块) 。
2、QQ 会员每天可以多获得一次抽奖计划,即 QQ 会员玩家每天可以参与抽奖 2 次 (抽奖 模块) 。
3、玩家在活动期间通过 QQ 电影票购买任意电子或纸质兑换劵,每天可参与抽奖 3 次 (抽 奖模块)。
4、玩家抽奖前必须登录角色所在大区、服务器,然后点击抽奖按钮即可 (绑定大区模块)。
5、为了玩家能顺利收到实物奖品,玩家可以填写个人信息(抽奖模块 具有该功能)。
6、查询玩家资格次数,该活动是查询抽奖资格次数(TDS 内置)
下面我们开始在 TDS 配置该活动。TDS 地址: http://ams.ied.com/
“TDS 配置步曲”:1.活动信息管理-》2.功能配置-》3.预览&发布

分析需求,该活动需要的功能有: 抽奖,及
绑定大区。
我们先选择需要添加的功能:

选择大区功能:

选择抽奖功能:

功能选择好之后,分别配置各个功能:
例如选择抽奖流程,在右侧即可看到抽奖的礼包配置,点礼包配置:


礼包配置完毕以后,我们再配置该抽奖流程下面的规则的条件及资格限制。
其中绑定大区功能,没有条件限制,我们不用再配置。
抽奖领取功能,我们还得做一些配置。该活动的抽奖规则如下:
① 玩家在活动期间只要游戏等级达到 20 级以上(包括 20 级),每天则可获得抽奖机会 1 次
② QQ 会员每天可以多获得一次抽奖计划,即 QQ 会员玩家每天可以参与抽奖 2 次。
③ 玩家在活动期间通过 QQ 电影票购买任意电子或纸质兑换劵,每天可参与抽奖 3 次 所以我们得为该流程添加 3 个规则。如:

而且这 3 条规则之间的关系为:“成功则退出”。
可以点击每一个条件,进行修改配置。

如上图:在配置条件和动作时,我们可以根据右边的下拉接口类别,来选择不同的接口。
目前 TDS 支持的接口类型有: 业务模块类(也就是抽奖模块、报名模块等),只要该活动前面添加了该模块,这里就会出
现该模块的接口;
基 础 类(TDS 自带的一些接口,例如具体每个流程每个动作的时间限制、资格次数查询等);
IDIP 类(可以直接在这里配置 IDIP,而不用再去写的条件 CGI 来查询 IDIP 啦) 积分云账户(积分赠送、扣除等)
抽奖平台 V3 条件 CGI(兼容大家在抽奖平台上的 CGI,以前的劳动果实不会白费!)
配置完毕以后,我们就可以预览白模版,整合页面等,测试。

TDS的活动运行日志在:/usr/local/appsweb/log/ams/ame/act/活动号/日期.Log
或者直接通过help.ied.com 查询日志
在该文件里,每一条日志会标明是哪一个活动,哪一个流程,哪一个规则,哪一个条件或动作。日志记录了该活动的详细运行情况,其中日志里最主要的标记如下:
[Act_125,Flow_1248]AME Star to run ,表示AME开始执行;
[Act_125,Flow_1248]
Flow::RunFlow ,表示开始执行1248这个流程。
[Act_125,Flow_1248]Rules
relations: or ,表示规则之间的关系是or,成功则退出。
[Act_125,Flow_1248,Rule_1376]
Rule::RunRule , 表示开始执行流程1248下的1376这个规则。
[Act_125,Flow_1248,Rule_1376]
Qual::getUserQualStatus
获取玩家在1376这个规则的资格状态。
[Act_125,Flow_1248,Rule_1376]
User qual status:DB_NO_USERQUAL
玩家在1376这个规则在DB里还没有产生资格记录。
[Act_125,Flow_1248,Rule_1376]
Rule::RunConditions conditions
relation: 962and964
检查规则1376这个规则的条件。这个规则有两个条件962和964,而且条件关系是and。
[Act_125,Flow_1248,Rule_1376,Cond_962]
Condition::RunCondition 开始检查962这个条件。
[Act_125,Flow_1248,Rule_1376,condition_API_962]API::callAPIAPIInfo:{"iId":"962","iModuleId":"839","sApiName":null,"sApiType":"20","iApiTimeOut":"20","sApiFunName":"checkUserRualQual","sApiClassName":"AMEQual","arrParas":{"iUsedRuleId":"656,1320,1321,1322"},"arrParasEncode":{"iUsedRuleId":{"character":"---","send":"---"}},"arrReturns":{"iRet":{"sCompareParam":"iRet","sCompareRelation":"==","sCompareValue":"1","sNotMetTips":null}}}
962这个条件的接口具体信息,包括接口名称,URL,超时时间等等。
[Act_125,Flow_1248,Rule_1376,condition_API_962]API::callAPIparams:{"iActivityId":"125","iFlowId":"1248","gameId":"undefined","sArea":"326","iSex":"","sRoleId":"2202080767","iGender":"","sServiceType":"cf","objCustomMsg":"[object
Object]","areaname":"undefined","roleid":"undefined","rolelevel":"undefined","rolename":"undefined","areaid":"undefined","iUsedRuleId":"656,1320,1321,1322","iModuleId":"839","iUin":"2202080767","sRole":"2202080767","sUserIP":"10.8.6.24","sServerIP":"172.27.129.153","sIp":"172.27.129.153","sServiceCode":"cf"}
传递给962这个条件的接口具体参数。
[Act_125,Flow_1248,Rule_1376,RuleChild_1,condition_API_964]
API::callAPI return: <root>
<result ret1="-10006" /><data1
ret1="" /></root> 条件964的返回值
如果配置正常,但却出现“访问人数过多,服务器繁忙”类似的错误,最主要的原因就是条件或动作接口调用失败,或返回错误。
可以通过在日志里,查到该流程该规则的
API::callAPI APIInfo查看所调用的接口的具体信息,查看是否是接口信息有误,例如参数名或接口URL有误等等
。
API::callAPI params查看传递给接口的所有参数。查看是否参数传递不完整
或者 传递错误。
API::callAPI return查看该接口的返回值,是否返回值格式有误等。
数据提交到ame.php后,返回的是一个JSON, 包括flowRet与modRet两部分。
{"flowRet":{},"modRet":{}}.其中modRet是执行某模块的动作正常返回时的返回值。如果是某条件不满足,在flowRet里还会有不满足的条件的ID iCondNotMetId。
flowRet的iRet值说明:
|
100 |
用户访问频率限制 |
|
101 |
用户未登录 |
|
300 |
活动未开始 |
|
301 |
活动已经结束 |
|
302 |
不在活动开放时间段 |
|
600 |
资格耗尽 |
|
700 |
条件不满足 |
|
999 |
活动暂时关闭 |
|
-101 |
缺少活动ID |
|
-102 |
缺少流程ID |
|
-103 |
缺少规则ID |
|
-104 |
活动描述文件不存在 |
|
-105 |
错误的流程ID |
|
-106 |
该流程没有配置规则 |
|
-107 |
该流程没有配置任何动作 |
|
-200 |
请求接口时CURL异常 |
|
-201 |
接口返回错误的httpdcode,例如404、500等 |
|
-210 |
条件CGI返回XML格式错误 |
|
-211 |
条件CGI返回result的ret不等于0 |
|
-220 |
模块接口返回值格式误 |
|
-230 |
IDIP接口请求异常 |
|
-231 |
通用配置文件里无该业务的IDIP配置 |
|
-302 |
动作接口请求异常 |
|
-303 |
动作接口httpdcode错误404,500等 |
|
-304 |
动作接口返回值格式错误 |
|
-401 |
资格设置错误 |
|
-402 |
资格冻结错误 |
|
-403 |
资格扣除错误 |
|
-404 |
资格回滚错误 |
|
-405 |
资格流水记录错误 |
|
-1000 |
大区角色获取错误(当配置从大区绑定模块获取时) |
|
-1001 |
活动描述文件里缺少大区描述信息(当配置从大区绑定模块获取时) |
点击活动列表右侧的“运营管理”,可以进入TDS及各模块运营管理。
点“TDS资格”,可以查询玩家某个流程某个规则的资格可使用总次数,已使用次数:

点“TDS流水”,可以查询某个流程某个规则的资格消耗明细

进入模块运营管理-》抽奖-》统计信息。 可以进行抽奖轮播数据清空,礼包发放流水查询及到处。

导出记录:

在抽奖V3只能导出5000,TDS里面可以导出全部的。

这里整理一下大家在用TDS配置活动时的常见问题及技巧。
一个流程对应于前端活动页面所发过来的一个请求,
一个按钮。如果一个按钮,会根据不同的条件产生不同的结果(例如领奖),则需在该流程下建多个规则
可以分别在其流程下面配置基础接口来控制时间。例如:

目前一个规则上只能添加一个动作。如果一个按钮(流程)要执行多个动作,我们可以在该流程下配置多条件规则,然后规则关系配置为“全部执行”。
例如一键分享微博和空间,建2个规则:
然后将规则关系设置为“全部执行”:

目前以下js是必须的公用JS. 后续版本会再和milo一起优化,js将更加简洁:
<script
src="http://ossweb-img.qq.com/images/js/jquery/jquery-1.5.min.js"></script>
<script
src="http://ossweb-img.qq.com/images/js/login/loginmanagerv3.js">></script>
<script
src="../amshtml/script/core/milo.js"></script>
<script
src="/comm-htdocs/js/ams/flowEngine.js"></script>
<script
src="/comm-htdocs/js/ams/act/活动id/act.desc.js"></script>
将<script src="/comm-s/ams/flowEngine.js"></script>放在<body></body>间,不要放在<head></head>间
默认的多条件关系是and。如果需要更复杂的关系,可以如下选择条件面前的&小符号:

然后在这里编辑复杂条件关系:

在修改配置后,得点以下“预览&发布”,重新生成活动描述文件
见上面运营工具。在运营工具里-》TDS资格可以增减或者恢复资格,
TDS流水可以查看各流程各规则资格使用情况。
见上面运营工具。进入模块运营管理-》抽奖-》统计信息。 可以进行抽奖轮播数据清空,礼包发放流水查询及到处。

导出记录:

在抽奖V3只能导出5000,TDS里面可以导出全部的。
见上面 3 日志查询
公共资格主要用于多个流程使用公用的资格
然后,如果某个流程需要使用该公共资格,则点流程右边的配置:

点流程右边的“配置”,

条件的检测顺序是按配置顺序来。如果要调整顺序,可以点右边的按钮进行调整:

可以的。在系统管理-》接口列表里,选择创建IDIP类的接口:

例如直接配置查询LOL玩家等级经验的IDIP:

见 1.2.11 支持各条件不满
资格耗尽的提示信息的配置
这是最主要的用于记录玩家资格情况的数据表,目前除了CF外,其他的都位与172.17.142.192的dbAmsUser02下。表名:tbActQual_活动ID_分表取模.例如tbActQual_125_99。
CREATE TABLE
IF NOT EXISTS `tbActQual_456` (
`iId` int(10) unsigned NOT NULL
AUTO_INCREMENT,
`iUin` bigint(20) unsigned NOT NULL
COMMENT '玩家QQ',
`sToken` varchar(255) NOT NULL COMMENT '大区或角色',
`iFlowId` int(10) unsigned NOT NULL
COMMENT '流程ID',
`iRuleId` int(10) unsigned NOT NULL
COMMENT '规则ID',
`iRuleChildId` int(10) unsigned NOT
NULL,
`iTotalNum` int(10) unsigned NOT NULL
DEFAULT '0' COMMENT '资格总数',
`iLeftNum` int(10) unsigned NOT NULL
DEFAULT '0' COMMENT '剩余可使用资格数',
`iFrozenNum` int(10) unsigned NOT NULL
DEFAULT '0' COMMENT '冻结资格数',
`iUsedNum` int(10) unsigned NOT NULL
DEFAULT '0' COMMENT '已使用资格数',
`lastUseQualTime` datetime NOT NULL,
`dtEndTime` bigint(12) unsigned NOT NULL
COMMENT '资格过期时间',
`iUserPubQualId` int(10) unsigned NOT
NULL DEFAULT '0' COMMENT '公共资格ID',
UNIQUE KEY `userQual`
(`iUin`,`sToken`,`iRuleId`,`iUserPubQualId`)
)
ENGINE=InnoDB DEFAULT CHARSET=gbk ROW_FORMAT=COMPACT AUTO_INCREMENT=1 ;
我们在TDS上配置的活动信息,当你点击预览发布时,将会把这些信息生成到活动描述文件里。活动描述文件可以通过在活动运营-》活动相关里找到:

活动描述文件,描述了该活动的基本信息、流程、规则、条件、资格、动作等。
例如:
