You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Alexa自定义技能的JSON响应中添加自定义字段以操控WPF应用?

解决AVS Lambda响应添加自定义字段操控WPF应用的方案

嘿,我之前也碰到过类似的需求,给你几个可行的方案,亲测能实现通过Lambda返回自定义数据来操控你的WPF应用:

1. 使用Session Attributes(最推荐,原生支持)

Alexa Skills Kit(ASK)的响应格式本身支持sessionAttributes字段,你可以在这里存储任意自定义键值对,WPF端在接收AVS响应时可以直接提取这部分数据。

Lambda代码示例(Node.js):

exports.handler = async (event) => {
    // 处理用户请求逻辑...
    
    // 定义自定义会话属性
    const sessionAttributes = {
        wpfAction: "openUserProfile",
        targetUserId: "12345",
        theme: "light"
    };
    
    // 构造符合ASK规范的响应
    const response = {
        version: "1.0",
        sessionAttributes: sessionAttributes, // 这里放入自定义数据
        response: {
            outputSpeech: {
                type: "PlainText",
                text: "已为你打开用户资料页面"
            },
            shouldEndSession: false
        }
    };
    
    return response;
};

WPF端解析示例(C#):

在你的AVS客户端接收响应后,解析JSON并提取sessionAttributes:

// 假设responseJson是从AVS获取的响应JSON字符串
var alexaResponse = JsonConvert.DeserializeObject<AlexaResponse>(responseJson);
var customData = alexaResponse.SessionAttributes;

// 根据自定义字段执行WPF操作
if (customData["wpfAction"].ToString() == "openUserProfile")
{
    // 打开用户资料页面的WPF逻辑
    var profileWindow = new UserProfileWindow();
    profileWindow.Show();
}

2. 在SSML中嵌入自定义标记

如果需要和语音播报内容关联的自定义数据,可以在输出语音的SSML里嵌入自定义XML标记,WPF端解析SSML时提取这些标记内容。

Lambda代码示例:

const response = {
    version: "1.0",
    response: {
        outputSpeech: {
            type: "SSML",
            ssml: '<speak>已为你调整音量<customData action="adjustVolume" value="70"/></speak>'
        },
        shouldEndSession: true
    }
};

WPF端解析SSML:

// 解析SSML字符串,提取customData标签
var ssmlDocument = new XmlDocument();
ssmlDocument.LoadXml(alexaResponse.Response.OutputSpeech.Ssml);
var customNodes = ssmlDocument.GetElementsByTagName("customData");
if (customNodes.Count > 0)
{
    var action = customNodes[0].Attributes["action"].Value;
    var value = customNodes[0].Attributes["value"].Value;
    
    if (action == "adjustVolume")
    {
        // 调整WPF应用音量的逻辑
        Application.Current.MainWindow.Volume = int.Parse(value);
    }
}

3. 使用APL自定义数据源(适合带UI交互的场景)

如果你的WPF应用支持Alexa Presentation Language(APL),可以在APL响应的datasources里添加自定义数据,WPF端解析APL文档时获取这些数据。

Lambda代码示例:

const response = {
    version: "1.0",
    response: {
        outputSpeech: {
            type: "PlainText",
            text: "已为你展示推荐内容"
        },
        directives: [
            {
                type: "Alexa.Presentation.APL.RenderDocument",
                document: { /* APL文档内容 */ },
                datasources: {
                    customWpfData: {
                        action: "showRecommendations",
                        items: ["item1", "item2", "item3"]
                    }
                }
            }
        ],
        shouldEndSession: false
    }
};

注意事项

  • 无论用哪种方案,都不要破坏ASK响应的核心结构(比如version、response字段),否则Alexa会拒绝处理你的响应。
  • 如果是Session Attributes,数据会在会话存续期间保留,适合跨请求的状态传递;如果是单次请求的操控指令,用SSML标记或APL数据源更合适。

内容的提问来源于stack exchange,提问作者Suman Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:01:57