### 3.2.1 成语接龙 #### (1)功能说明 成语接龙游戏,通过唤醒语“成语接龙”进入游戏,然后与机器人共同完成成语的接龙,同音字亦可。游戏过程可以“退出”,“跳过”,“再来一局”等指示命令重置游戏,亦可问某个成语“什么意思”,依次进行,直到主动退出或一方被打败游戏结束,结束后给出统计分数。 #### (2) 接口说明 **请求方法** * POST **请求地址** * [http://api.ruyi.ai/v1/message](http://api.ruyi.ai/v1/message) **请求参数说明** | 参数名 | 参数类型 | 是否必须 | 参数说明 | | :--- | :--- | :---: | :--- | | q | String | 是 | 自然语言表达,例如“成语接龙" | | app\_key | String | 是 | 应用开发者秘钥,注册开发者后台账号,建立虚拟助理后获得 | | user\_id | String | 是 | 用户唯一标识,便于支持个性化语义解析。建议开发者使用 UUID 字符,且不同用户必须用不同的 user\_id,防止意图串。 | #### (3) 返回说明 **返回参数说明** | 名称 | 类型 | 说明 | | :--- | :--- | :--- | | code | Integer | 返回代码 | | msg | String | 返回代码描述 | | parameters | JSON Object | 解析到的实体以及服务说明 | | action | String | 服务的接口名称 | | name | String | 匹配的意图名称 | | result | JSON Object | 接口返回内容 | | outputs | Array | 服务输出结果,微信端使用 type 类型为 wechat 开头的内容;硬件端收到所有内容,依据需求解析使用 | **返回代码说明** | 返回代码 | 错误类型 | 说明 | | :--- | :--- | :--- | | 0/200 | 成功 | 请求成功 | | 400 | 无效请求 | 某些必需参数缺失或参数值错误,详见 msg 字段 | | 401 | 未授权 | 授权失败,app\_key 缺失或错误 | | 403 | 请求被禁止 | 有效请求,但服务拒绝响应,请联系contact@ruyi.ai | | 408 | 请求超时 | 请求响应超时,一般响应时间设置为2000ms以内 | | 429 | 短时间内大量访问 | 短时间内请求数过多 | | 500 | 内部错误 | 服务处理异常 | | 503 | 服务不可用 | 服务异常或正在维护 | #### (4)请求示例 **请求范例** _成语接龙;魑魅魍魉_ _什么意思_ _刀剑光影(错误成语)_ _跳过_ _退出_ **请求示例** (用户给出正确成语) * [http://api.ruyi.ai/ruyi-api/v1/message?app\_key=APP\_KEY&user\_id=user0&q=魑魅魍魉](http://api.ruyi.ai/ruyi-api/v1/message?app_key=APP_KEY&user_id=user0&q=魑魅魍魉) 返回结果 ```json { "code": 0, "msg": "ok", "result": { "_text": "魑魅魍魉", "msg_id": "643e70d8-3658-4785-8193-002bc2477ae6", "intents": [{ "parameters": { "q": "魑魅魍魉", "msgNotChengyu": "这个是成语吗?我不知道啊。您再说一个吧,不会可以说【跳过】或者【退出】", "msgNotMatch": "你说的成语接不上哦,请再说一个,或者说【跳过】", "msgSysLose": "我认输...你好厉害啊!你还要再玩一局吗?", "msgValidMatch": "这个成语我知道!该我啦:", "service": "chengyu" }, "action": "sys.action.chengyujielong/play", "name": "玩成语接龙", "result": { "isChengyu": true, "isValidMatch": true, "chengyuToMatch": "两面三刀", "explanation": "当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。", "lastPinyin": "dao", "score": 1, "beatPercent": 1, "totalNumUserSay": 1, "prevChengyu": "两面三刀", "text": "这个成语我知道!该我啦:两面三刀。", "type": "dialog" }, "outputs": [{ "type": "wechat.text", "property": { "text": "这个成语我知道!该我啦:两面三刀。" } }, { "type": "dialog", "property": { "text": "这个成语我知道!该我啦:两面三刀。听好啦:两面三刀", "emotion": "despite" } }], "score": "1.0", "scoreColor": "c4", "is_match": 1, "id": "37663449-6260-4211-b55b-95e993a52b80" }], "meta_process_milliseconds": 613 } } ``` **请求示例** (用户询问机器人给出的成语是什么意思) * [http://api.ruyi.ai/ruyi-api/v1/message?app\_key=APP\_KEY&user\_id=user0&q=什么意思](http://api.ruyi.ai/ruyi-api/v1/message?app_key=APP_KEY&user_id=user0&q=什么意思) 返回结果 ```json { "code": 0, "msg": "ok", "result": { "_text": "什么意思", "msg_id": "564bfb27-53b6-42ad-b573-6f51472b8a1d", "intents": [{ "parameters": { "chengyuToMatch": "两面三刀", "score": "1", "prevChengyu": "两面三刀", "totalNumUserSay": "2", "lastPinyin": "dao", "explanation": "当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。", "beatPercent": "1", "chengyujielongExplanation": "……我刚才没说成语啊!骗我!~", "service": "chengyu" }, "action": "no_action", "name": "解释成语或者请求重复", "result": { "text": "我刚才说的成语是:【两面三刀】当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。~好啦,你继续接吧", "type": "dialog" }, "outputs": [{ "type": "wechat.text", "property": { "text": "我刚才说的成语是:【两面三刀】当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。~好啦,你继续接吧" } }, { "type": "dialog", "property": { "text": "我刚才说的成语是:【两面三刀】当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。~好啦,你继续接吧", "emotion": "despite" } }], "score": "1.0", "scoreColor": "c4", "is_match": 1, "id": "7e20a9ec-4908-448f-8e72-03a74a1075d5" }], "meta_process_milliseconds": 36 } } ``` **请求示例** (用户没有给出正确成语;接上一条的回答) * [http://api.ruyi.ai/ruyi-api/v1/message?app\_key=APP\_KEY&user\_id=user0&q=刀剑光影](http://api.ruyi.ai/ruyi-api/v1/message?app_key=APP_KEY&user_id=user0&q=刀剑光影) 返回结果 ```json { "code": 0, "msg": "ok", "result": { "_text": "刀剑光影", "msg_id": "4b809b85-6824-434e-9afb-e1ff2347c6a0", "intents": [{ "parameters": { "q": "刀剑光影", "chengyuToMatch": "两面三刀", "score": "1", "msgNotChengyu": "这个是成语吗?我不知道啊。您再说一个吧,不会可以说【跳过】或者【退出】", "msgNotMatch": "你说的成语接不上哦,请再说一个,或者说【跳过】", "msgSysLose": "我认输...你好厉害啊!你还要再玩一局吗?", "msgValidMatch": "这个成语我知道!该我啦:", "prevChengyu": "两面三刀", "totalNumUserSay": "1", "lastPinyin": "dao", "explanation": "当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。", "service": "chengyu" }, "action": "sys.action.chengyujielong/play", "name": "玩成语接龙", "result": { "chengyuToMatch": "两面三刀", "explanation": "当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。", "lastPinyin": "dao", "score": 1, "beatPercent": 1, "totalNumUserSay": 2, "prevChengyu": "两面三刀", "text": "这个是成语吗?我不知道啊。您再说一个吧,不会可以说【跳过】或者【退出】,接龙【两面三刀】", "type": "dialog" }, "outputs": [{ "type": "wechat.text", "property": { "text": "这个是成语吗?我不知道啊。您再说一个吧,不会可以说【跳过】或者【退出】,接龙【两面三刀】" } }, { "type": "dialog", "property": { "text": "这个是成语吗?我不知道啊。您再说一个吧,不会可以说【跳过】或者【退出】,接龙【两面三刀】,听好啦,【两面三刀】", "emotion": "confused" } }], "score": "1.0", "scoreColor": "c4", "is_match": 1, "id": "37663449-6260-4211-b55b-95e993a52b80" }], "meta_process_milliseconds": 623 } } ``` **请求示例** (用户跳过当前成语,机器人重新给出回答) * [http://api.ruyi.ai/ruyi-api/v1/message?app\_key=APP\_KEY&user\_id=user0&q=跳过](http://api.ruyi.ai/ruyi-api/v1/message?app_key=APP_KEY&user_id=user0&q=跳过) 返回结果 ```json { "code": 0, "msg": "ok", "result": { "_text": "跳过", "msg_id": "fcc6692a-643e-4cdc-a662-f9496bbdedb3", "intents": [{ "parameters": { "q": "跳过", "chengyuToMatch": "两面三刀", "score": "1", "prevChengyu": "两面三刀", "totalNumUserSay": "3", "lastPinyin": "dao", "isRandomChengyu": "true", "explanation": "当面一套,背后一套。比喻阴险狡诈,耍两面手法,挑拨是非。", "service": "chengyu" }, "action": "sys.action.chengyujielong/play", "name": "跳过", "result": { "isChengyu": true, "isValidMatch": true, "chengyuToMatch": "乳臭未干", "explanation": "身上的奶腥味都还未散去。形容人年幼无知,不懂世事。用于讽刺时,多用来表示对年轻人的轻蔑与不信任。", "lastPinyin": "gan", "score": 1, "beatPercent": 1, "totalNumUserSay": 4, "prevChengyu": "两面三刀;乳臭未干", "text": "给你换了一个成语:&out.chengyuToMatch", "type": "dialog" }, "outputs": [{ "type": "wechat.text", "property": { "text": "好的,给你一个成语:乳臭未干" } }, { "type": "dialog", "property": { "text": "好的,给你一个成语:乳臭未干。听好了:乳臭未干", "emotion": "positive" } }], "score": "1.0", "scoreColor": "c4", "is_match": 1, "id": "23039e03-b923-4e35-9d68-fdb944971519" }], "meta_process_milliseconds": 48 } } ``` **请求示例退出** (用户退出当前游戏) * [http://api.ruyi.ai/ruyi-api/v1/message?app\_key=APP\_KEY&user\_id=user0&q=退出](http://api.ruyi.ai/ruyi-api/v1/message?app_key=APP_KEY&user_id=user0&q=退出) 返回结果 ```json { "code": 0, "msg": "ok", "result": { "_text": "退出", "msg_id": "433c3f19-6be2-4d00-8644-9ebec6c08295", "intents": [{ "parameters": { "score": "1", "beatPercent": "1", "totalNumUserSay": "3", "msgGoodJob": "非常好,再接再厉哦!", "msgBadJob": "继续努力哦!", "msgQuit": "谢谢你参与成语接龙", "msgDirectQuit": "好,下次再来玩吧!", "service": "chengyu" }, "action": "no_action", "name": "退出成语接龙", "result": { "text": "谢谢你参与成语接龙,你一共进行了3轮接龙,答对1个,击败了全国1%的用户,继续努力哦!", "type": "dialog" }, "outputs": [{ "type": "wechat.text", "property": { "text": "谢谢你参与成语接龙,你一共进行了3轮接龙,答对1个,击败了全国1%的用户,继续努力哦!" } }, { "type": "dialog", "property": { "text": " 谢谢你参与成语接龙,你一共玩了3轮接龙,答对1个,击败了全国1%的用户, 继续努力哦! ", "emotion": "happy" } }], "score": "1.0", "scoreColor": "c4", "is_match": 1, "id": "032002f5-a4e9-4f2d-b1a7-6b31ba9bff66" }], "meta_process_milliseconds": 39 } } ``` **详细参数说明** | 名称 | 类型 | 说明 | | :--- | :--- | :--- | | service | String | 服务名称 | | q | String | 识别的内容 | | msgNotChengyu | String | 不是成语的缺省描述 | | msgNotMatch | String | 成语没有匹配上一条成语的缺省描述 | | msgSysLose | String | 机器人被打败的缺省描述 | | msgValidMatch | String | 匹配正确的缺省描述 | | isChengyu | Boolean | 判断是为成语,是则为true | | isValidMatch | Boolean | 判断成语是否和上一个匹配,是则为 true | | chengyuToMatch | String | 要接龙的成语 | | explanation | String | 成语的解释 | | lastPinyin | String | 成语的最后一个字的拼音 | | score | Integer | 当前得分 | | beatPercent | Integer | 当前打败了多少用户,单位百分数 | | totalNumUserSay | String | 用户目前为止说了几轮 | | prevChengyu | String | 上一个成语 | | chengyujielongExplanation | String | 当游戏还没开始用户请求解释时,机器人做出的回答 | | isRandomChengyu | String | 当用户跳过时机器人随机返回一个成语,为“true”时即表示这是机器人随机给的成语而不是接上一个成语 | | msgGoodJob | String | 退出游戏时当用户分数较高的鼓励 | | msgBadJob | String | 退出游戏时当用户分数较低的鼓励 | | msgQuit | String | 退出游戏时的提示语 | | msgDirectQuit | String | 直接退出游戏的提示语 | **指令清单** | 指令名称 | 范例 | | :--- | :--- | | 唤醒| 成语接龙| | 进行接龙游戏| 一马当先| | 解释成语意思| 这个成语是什么意思| | 跳过| 跳过| | 再来一局| 再来一局| | 退出| 退出|