diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c609df548b3fc1e6207ec7ce86d74215246cee..d0172e31ecef398bf4b104a0213c7a48854586a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [0.0.1-beta.4] - 2025.6.26 ### Changed - 修改历史上的今天,修改限制判断 +- 修改新闻增加上一个下一个 +- 修改param,音乐传全部字段 ## [0.0.1-beta.4] - 2025.6.24 ### Changed diff --git a/c2c.http b/c2c.http index 805ac38b02521043c2bd3d39fcb337adc72172e1..4bfcb5f8e81e412559712c10695689389c57999e 100644 --- a/c2c.http +++ b/c2c.http @@ -10,7 +10,7 @@ Content-Type: application/json }, "nluRet": { "asr_recongize": "", - "text": "几点了几点了几点了" + "text": "放张韶涵的暮色" } }, "version": "v0" @@ -24,8 +24,8 @@ X-AppKey: 391b50b5ed634fc49a3db7cfd6bc40db { "ip": "14.215.222.17", "mac": "ece154a865eb", - "mid": "10f05", - "query":"历史上的今天", + "mid": "11011", + "query":"播放上一首古诗", "requestId": "123456111" } @@ -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/main.go b/main.go index afc50c837b04cc36301fad06d96b6f648a0d4d78..7abf7c01b5c70648c07e7321c9985ca9430aa072 100644 --- a/main.go +++ b/main.go @@ -207,7 +207,7 @@ func setupFlag() error { flag.StringVar(&serverTag, "tag", "", "注册到注册中心的标签") flag.StringVar(&ip, "ip", "", "IP") flag.IntVar(&port, "port", 0, "端口") - flag.StringVar(&consulUrl, "consul", "http://172.28.124.106:8500", "consul服务地址") + flag.StringVar(&consulUrl, "consul", "http://172.28.124.105:8500", "consul服务地址") flag.StringVar(&config, "config", "env/v2,speech_nlu_parse/conf", "指定要使用的配置文件路径") flag.BoolVar(&isVersion, "version", false, "编译信息") flag.StringVar(&consulToken, "token", "092288b5-824f-854c-39aa-a958afd9a633", "consul token") diff --git a/model/speech.go b/model/speech.go index 30d9abb4da6840092cdee04858a3496352546616..d5570d440ab128c7c2bb882e18f18c8a7f2bb9a2 100644 --- a/model/speech.go +++ b/model/speech.go @@ -76,28 +76,32 @@ type SpeechWsResp struct { ShouldEndSession bool `json:"shouldEndSession"` Api string `json:"api"` Command *struct { - Param *struct { - Volume string `json:"volume"` - Mode string `json:"mode"` - Object string `json:"object"` - Extra string `json:"extra"` - Version string `json:"version"` - Song string `json:"song"` - Singer string `json:"singer"` - Emotion string `json:"emotion"` - Album string `json:"album"` - Language string `json:"language"` - Age string `json:"age"` - Instrument string `json:"instrument"` - Author string `json:"author"` - Composer string `json:"composer"` - People string `json:"people"` - Area string `json:"area"` - Theme string `json:"theme"` - Style string `json:"style"` - Toplist string `json:"toplist"` - AgeRange string `json:"ageRange"` - } `json:"param"` + Param map[string]interface{} `json:"param"` + //Param *struct { + // Volume string `json:"volume"` + // Mode string `json:"mode"` + // Object string `json:"object"` + // Extra string `json:"extra"` + // Version string `json:"version"` + // Song string `json:"song"` + // Singer string `json:"singer"` + // Emotion string `json:"emotion"` + // Album string `json:"album"` + // Language string `json:"language"` + // Age string `json:"age"` + // Instrument string `json:"instrument"` + // Author string `json:"author"` + // Composer string `json:"composer"` + // People string `json:"people"` + // Area string `json:"area"` + // Theme string `json:"theme"` + // Style string `json:"style"` + // Toplist string `json:"toplist"` + // AgeRange string `json:"ageRange"` + // Gender string `json:"gender"` + // SuitableAge string `json:"suitable_age"` + // Scene string `json:"scene"` + //} `json:"param"` Api string `json:"api"` } `json:"command"` } `json:"dm"` diff --git a/service/speechNlu/domain.go b/service/speechNlu/domain.go index 1d42153228d389b95c36c451ff5fc98297cd53c2..44d5c11e12c4d26509272318a607a7cc86e9df22 100644 --- a/service/speechNlu/domain.go +++ b/service/speechNlu/domain.go @@ -224,6 +224,24 @@ func newsDomain(params *model.SpeechDomainParams) []byte { return replyWithChat(error_reply, "doudi") } + query := params.SpeechWsResp.Dm.Input + if params.CheckDmCommand() { + if params.SpeechWsResp.Dm.Command.Api != "" { + switch params.SpeechWsResp.Dm.Command.Api { + case "DUI.MediaController.Pause": + return transformGreeProtocolReply(query, "PlayControl", "control_pause", nil) + case "DUI.MediaController.Play": + return transformGreeProtocolReply(query, "PlayControl", "control_resume", nil) + case "DUI.MediaController.Stop": + return transformGreeProtocolReply(query, "PlayControl", "control_stop", nil) + case "DUI.MediaController.Next", "DUI.MediaController.Switch": + return transformGreeProtocolReply(query, "PlayControl", "control_next", nil) + case "DUI.MediaController.Prev": + return transformGreeProtocolReply(query, "PlayControl", "control_previous", nil) + } + } + } + res.Header.Semantic.Domain = "news" res.Header.Semantic.Intent = "search" res.Header.Semantic.SkillId = res.Header.Semantic.Domain + "." + res.Header.Semantic.Intent @@ -350,22 +368,6 @@ func ancientpoemDomain(params *model.SpeechDomainParams) []byte { } } - //if len(params.SpeechWsResp.Dm.Widget.Content) > 0 { - // for i := 0; i < len(params.SpeechWsResp.Dm.Widget.Content); i++ { - // res.ListItems = append(res.ListItems, map[string]interface{}{ - // "url": params.SpeechWsResp.Dm.Widget.Content[i].LinkUrl, - // "title": params.SpeechWsResp.Dm.Widget.Content[i].Title, - // "content": params.SpeechWsResp.Dm.Widget.Content[i].Text, - // "author": params.SpeechWsResp.Dm.Widget.Content[i].Author, - // "dynasty": params.SpeechWsResp.Dm.Widget.Content[i].Extra.Dynasty, - // "mediaId": "", - // "type": params.SpeechWsResp.Dm.Widget.Type, //原来是 AUDIO,看看是否能播放 - // //思必驰的没有回复话术 - // //"content": params.Dm.Widget.Content[i].TextContent, - // }) - // } - //} - res.Header.Semantic.SkillId = res.Header.Semantic.Domain + "." + res.Header.Semantic.Intent return Marshal(params, res) } @@ -505,8 +507,8 @@ func alarmDomain(params *model.SpeechDomainParams) []byte { return replyWithChat(error_reply, "doudi") } api := params.SpeechWsResp.Dm.Command.Api - extra := params.SpeechWsResp.Dm.Command.Param.Extra - object := params.SpeechWsResp.Dm.Command.Param.Object + 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 { @@ -715,13 +717,13 @@ func globalCtrlDomain(params *model.SpeechDomainParams) []byte { if !params.CheckCommandParam() { return replyWithChat(error_reply, "doudi") } else { - if params.SpeechWsResp.Dm.Command.Param.Volume != "" && params.SpeechWsResp.Dm.Command.Api == "DUI.MediaController.SetVolume" { - if strings.Contains(params.SpeechWsResp.Dm.Command.Param.Volume, "-") || strings.Contains(params.SpeechWsResp.Dm.Command.Param.Volume, "+") { + 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), "+") { pattern := `([+-]?)(\d+)` // 分组1:符号(+/-),分组2:数字 re := regexp.MustCompile(pattern) // 查找所有匹配项 - matches := re.FindAllStringSubmatch(params.SpeechWsResp.Dm.Command.Param.Volume, -1) + matches := re.FindAllStringSubmatch(params.SpeechWsResp.Dm.Command.Param["volume"].(string), -1) var sign, numStr, action string for _, match := range matches { @@ -742,22 +744,22 @@ func globalCtrlDomain(params *model.SpeechDomainParams) []byte { } return transformGreeProtocolReply(query, "UniversalControl", action, &semanticParams) - } else if params.SpeechWsResp.Dm.Command.Param.Volume == "max" { + } else if params.SpeechWsResp.Dm.Command.Param["volume"].(string) == "max" { return transformGreeProtocolReply(query, "UniversalControl", "control_riseVolMax", nil) - } else if params.SpeechWsResp.Dm.Command.Param.Volume == "min" { + } else if params.SpeechWsResp.Dm.Command.Param["volume"].(string) == "min" { return transformGreeProtocolReply(query, "UniversalControl", "control_reduceVolMin", nil) } else { semanticParams := make(map[string]interface{}) // 百分数 - if strings.Contains(params.SpeechWsResp.Dm.Command.Param.Volume, "%") { - parts := strings.SplitN(params.SpeechWsResp.Dm.Command.Param.Volume, "%", 2) + if strings.Contains(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "%") { + parts := strings.SplitN(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "%", 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, "/") { - num, err := fractionToPercent(params.SpeechWsResp.Dm.Command.Param.Volume) + if strings.Contains(params.SpeechWsResp.Dm.Command.Param["volume"].(string), "/") { + num, err := fractionToPercent(params.SpeechWsResp.Dm.Command.Param["volume"].(string)) if err != nil { global.Logger.WithFields(logger.Fields{ "requestId": params.RequestId, @@ -772,12 +774,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, Norm: params.SpeechWsResp.Dm.Command.Param.Volume, Code: 0} + semanticParams["degree"] = model.ParamsStr{Origin: params.SpeechWsResp.Dm.Command.Param["volume"].(string), Norm: params.SpeechWsResp.Dm.Command.Param["volume"].(string), 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 == "静音模式" { + } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.OpenMode" && params.SpeechWsResp.Dm.Command.Param["mode"].(string) == "静音模式" { return transformGreeProtocolReply(query, "SystemControl", "control_volumeOff", nil) - } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.CloseMode" && params.SpeechWsResp.Dm.Command.Param.Mode == "静音模式" { + } else if params.SpeechWsResp.Dm.Command.Api == "DUI.System.Sounds.CloseMode" && params.SpeechWsResp.Dm.Command.Param["mode"].(string) == "静音模式" { return transformGreeProtocolReply(query, "SystemControl", "control_volumeOn", nil) } }