diff --git a/c2c.http b/c2c.http index 4bfcb5f8e81e412559712c10695689389c57999e..2cab64ee26fb1a145ecbdd5af3c81dcb2b5cbe4d 100644 --- a/c2c.http +++ b/c2c.http @@ -39,7 +39,7 @@ X-AppKey: 391b50b5ed634fc49a3db7cfd6bc40db "ip": "14.215.222.17", "mac": "ece154a865eb", "mid": "10f05", - "query":"播放上一首古诗", + "query":"关闭静音模式", "requestId": "123456111" } @@ -60,7 +60,7 @@ Content-Type: application/json "trafficParameter": "mode=childxxx;macWifi=28b77c218ed1;mid=10f05;vender=7e000025;macVoice=testyuntiancloud;ver=3.0;scenario=smarthome;filterName=nlu;req_nlu_length=1;returnType=json;fullDuplex=true;appendLength=1;additionalService=geli_nlu2;version=0.5;filterUrl=https://testnlu.gree.com:443/semantic/unisoundc2c/querys;" }, "nluRet": { - "text": "央视的新闻" + "text": "打开静音模式" }, "postProc": {} } @@ -101,7 +101,7 @@ Content-Type: application/json "trafficParameter": "mode=childxx;macWifi=ece154a73d38;mid=11011;macVoice=testyuntiancloud;ver=3.0;scenario=smarthome;filterName=nlu;req_nlu_length=1;returnType=json;fullDuplex=true;appendLength=1;additionalService=geli_nlu2;version=0.5;filterUrl=https://testnlu.gree.com:443/semantic/unisoundc2c/querys;" }, "nluRet": { - "text": "播放上一首古诗" + "text": "打开静音模式" }, "postProc": {} } diff --git a/service/speechNlu/domain.go b/service/speechNlu/domain.go index 44d5c11e12c4d26509272318a607a7cc86e9df22..5869db3c73fa737ab94e88ef988dd688f3178101 100644 --- a/service/speechNlu/domain.go +++ b/service/speechNlu/domain.go @@ -507,8 +507,15 @@ func alarmDomain(params *model.SpeechDomainParams) []byte { return replyWithChat(error_reply, "doudi") } api := params.SpeechWsResp.Dm.Command.Api - extra := params.SpeechWsResp.Dm.Command.Param["extra"].(string) - object := params.SpeechWsResp.Dm.Command.Param["object"].(string) + var extra, object string + if v, ok := params.SpeechWsResp.Dm.Command.Param["extra"]; ok { + extra = v.(string) + } + if v1, ok := params.SpeechWsResp.Dm.Command.Param["object"]; ok { + object = v1.(string) + } + //extra := params.SpeechWsResp.Dm.Command.Param["extra"].(string) + //object := params.SpeechWsResp.Dm.Command.Param["object"].(string) var extraParam model.ExtraParams if err := json.Unmarshal([]byte(extra), &extraParam); err != nil { @@ -717,13 +724,21 @@ func globalCtrlDomain(params *model.SpeechDomainParams) []byte { if !params.CheckCommandParam() { return replyWithChat(error_reply, "doudi") } else { - if params.SpeechWsResp.Dm.Command.Param["volume"].(string) != "" && params.SpeechWsResp.Dm.Command.Api == "DUI.MediaController.SetVolume" { - if strings.Contains(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "-") || strings.Contains(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "+") { + var volume, mode string + if v, ok := params.SpeechWsResp.Dm.Command.Param["volume"]; ok { + volume = v.(string) + } + if v1, ok := params.SpeechWsResp.Dm.Command.Param["mode"]; ok { + mode = v1.(string) + } + + if volume != "" && params.SpeechWsResp.Dm.Command.Api == "DUI.MediaController.SetVolume" { + if strings.Contains(volume, "-") || strings.Contains(volume, "+") { pattern := `([+-]?)(\d+)` // 分组1:符号(+/-),分组2:数字 re := regexp.MustCompile(pattern) // 查找所有匹配项 - matches := re.FindAllStringSubmatch(params.SpeechWsResp.Dm.Command.Param["volume"].(string), -1) + matches := re.FindAllStringSubmatch(volume, -1) var sign, numStr, action string for _, match := range matches { @@ -735,6 +750,8 @@ func globalCtrlDomain(params *model.SpeechDomainParams) []byte { if numStr != "" { semanticParams["degree"] = model.ParamsStr{Origin: numStr, Norm: numStr, Code: 0} + } else { + semanticParams["degree"] = model.ParamsStr{Origin: "一", Norm: "1", Code: 0} } if sign == "-" { @@ -744,22 +761,22 @@ func globalCtrlDomain(params *model.SpeechDomainParams) []byte { } return transformGreeProtocolReply(query, "UniversalControl", action, &semanticParams) - } else if params.SpeechWsResp.Dm.Command.Param["volume"].(string) == "max" { + } else if volume == "max" { return transformGreeProtocolReply(query, "UniversalControl", "control_riseVolMax", nil) - } else if params.SpeechWsResp.Dm.Command.Param["volume"].(string) == "min" { + } else if volume == "min" { return transformGreeProtocolReply(query, "UniversalControl", "control_reduceVolMin", nil) } else { semanticParams := make(map[string]interface{}) // 百分数 - if strings.Contains(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "%") { - parts := strings.SplitN(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "%", 2) + if strings.Contains(volume, "%") { + parts := strings.SplitN(volume, "%", 2) semanticParams["degree"] = model.ParamsStr{Origin: parts[0], Norm: parts[0], Code: 0} return transformGreeProtocolReply(query, "UniversalControl", "control_setVol", &semanticParams) } // 分数 - if strings.Contains(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "/") { - num, err := fractionToPercent(params.SpeechWsResp.Dm.Command.Param["volume"].(string)) + if strings.Contains(volume, "/") { + num, err := fractionToPercent(volume) if err != nil { global.Logger.WithFields(logger.Fields{ "requestId": params.RequestId, @@ -774,12 +791,12 @@ func globalCtrlDomain(params *model.SpeechDomainParams) []byte { return transformGreeProtocolReply(query, "UniversalControl", "control_setVol", &semanticParams) } - semanticParams["degree"] = model.ParamsStr{Origin: params.SpeechWsResp.Dm.Command.Param["volume"].(string), Norm: params.SpeechWsResp.Dm.Command.Param["volume"].(string), Code: 0} + semanticParams["degree"] = model.ParamsStr{Origin: volume, Norm: volume, Code: 0} return transformGreeProtocolReply(query, "UniversalControl", "control_setVol", &semanticParams) } - } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.OpenMode" && params.SpeechWsResp.Dm.Command.Param["mode"].(string) == "静音模式" { + } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.OpenMode" && mode == "静音模式" { return transformGreeProtocolReply(query, "SystemControl", "control_volumeOff", nil) - } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.CloseMode" && params.SpeechWsResp.Dm.Command.Param["mode"].(string) == "静音模式" { + } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.CloseMode" && mode == "静音模式" { return transformGreeProtocolReply(query, "SystemControl", "control_volumeOn", nil) } }