如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件

Posted

技术标签:

【中文标题】如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件【英文标题】:How to get amazon user email with Java in Alexa Skill 【发布时间】:2018-05-10 18:17:00 【问题描述】:

我是 Alexa 技能开发的新手,我正在尝试做一项技能,让 Alexa 通过我的电子邮件回复。

我正在开发 Java 技能,我刚刚能够获取用户会话 ID:

getSession().getUser().getUserId()

amzn1.ask.account.id 作为解决方案

问题是需要获取用户邮箱(例如:username@gmail.com)

有什么方法可以做到吗?

感谢您的帮助!

【问题讨论】:

使用访问令牌调用此 API api.amazon.com/user/profile?access_token= 以获取用户配置文件。 谢谢,这正是我要找的!我将发布我用来帮助每个需要它的人的代码作为答案 【参考方案1】:

正如Priyam Gupta 所说,这是用api.amazon.com/user/profile?access_token= 解决的,而我用来解决它的代码是:

    String accessToken = requestEnvelope.getSession().getUser().getAccessToken();
    String url = "https://api.amazon.com/user/profile?access_token=" + accessToken;
    JSONObject json = readJsonFromUrl(url);
    String email = json.getString("email");
    String name = json.getString("name");

使用 JSON 方法:

private static String readAll(Reader rd) throws IOException 
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) 
      sb.append((char) cp);
    
    return sb.toString();
  

public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException 
    InputStream is = new URL(url).openStream();
    try 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
      String jsonText = readAll(rd);
      JSONObject json = new JSONObject(jsonText);
      return json;
     finally 
      is.close();
    
 

【讨论】:

【参考方案2】:
    转到您设置了 Alexa 技能的 developer.amazon 帐户,在“构建”选项卡下,您将找到左侧菜单“权限”并打开“客户电子邮件地址”权限。 转到https://alexa.amazon.com/spa/index.html#cards -> 技能 -> 你的技能 -> 选择你的技能 -> 设置 -> 管理权限 -> 打开您在第 1 点打开的所需权限并保存 在您的意图处理程序@Override public Optional<Response> handle(HandlerInput input) UpsServiceClient upsServiceClient = input.getServiceClientFactory().getUpsService().getProfileEmail(); 内的 java 代码中

【讨论】:

【参考方案3】:

如果您需要详细说明,只需按照以下简单步骤操作:

    Set up Security Profile for Login with Amazon Enable Account Linking in Amazon Developer Console Add Redirect URLs to Security Profile 对 Amazon Profile API 进行 API 调用

【讨论】:

以上是关于如何在 Alexa Skill 中使用 Java 获取亚马逊用户电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Alexa Skill - 如何在 Lambda 函数中检索槽值

java 第一次创建Alexa Skill - Test Intent Snippet

java 第一次从JSON Snippet创建Alexa Skill - SpeechletResponse

Alexa Skill - 如何获取要求 Alexa 的完整声明文本

如何从 Alexa Skill 中的用户随机输入中提取自定义插槽

在“认证”期间如何继续开发我的 Alexa Skill?