检测用户何时取消链接 alexa 技能

Detecting when user unlinks alexa skill

我正在实施 Alexa 智能家居技能,我想知道一段时间后用户是否仍在使用该应用程序。

Google 例如,当我取消我的应用程序与 Google Smarthome 应用程序的链接时,Home 会发送一个请求。如果用户不再使用该技能,我需要知道它禁止向 Amazon Alexa 网关发送更新。

最好的方法是什么? Alexa 文档没有谈论它。

我能否仅依靠检查用户是否拥有过期的 OAuth 令牌?例如。如果过期超过一天,将用户标记为不活跃。

我明天要测试的另一件事是在取消技能链接后查看网关响应。但就我而言,无论如何这都不是一个好的选择,因为我只会在物理更改并尝试提交它并可能失败后才知道用户状态。这可能会在几天或几周后发生,所以它不那么可靠。

您可以与 Alexa 技能事件集成,并在用户禁用技能时收到通知。 https://developer.amazon.com/docs/smapi/skill-events-in-alexa-skills.html#skill-disabled-event.

SkillDisabled 事件仅包含 user_id(即没有访问令牌)。所以你还需要监听 SkillAccountLinked 事件,这样你就可以 link 那 user_id 使用你自己的用户标识符。

您的智能家居技能清单应如下所示:

{
  "manifest": {
    "publishingInformation": {
      "locales": {
        "en-US": {
          "summary": "...",
          "examplePhrases": [
            "Alexa, ...",
            "Alexa, ...",
            "Alexa, ..."
          ],
          "keywords": [],
          "name": "...",
          "smallIconUri": "...",
          "description": "...",
          "largeIconUri": "..."
        }
      },
      "isAvailableWorldwide": false,
      "testingInstructions": "...",
      "category": "SMART_HOME",
      "distributionCountries": [
        "US"
      ]
    },
    "apis": {
      "smartHome": {
        "endpoint": {
          "uri": "arn:aws:lambda:..."
        },
        "protocolVersion": "3"
      }
    },
    "manifestVersion": "1.0",
    "permissions": [
      {
        "name": "alexa::async_event:write"
      }
    ],
    "privacyAndCompliance": {
      "allowsPurchases": false,
      "locales": {
        "en-US": {
          "termsOfUseUrl": "...",
          "privacyPolicyUrl": "..."
        }
      },
      "isExportCompliant": true,
      "containsAds": false,
      "isChildDirected": false,
      "usesPersonalInfo": false
    },
    "events": {
      "endpoint": {
        "uri": "arn:aws:lambda:..."
      },
      "subscriptions": [
        {
          "eventName": "SKILL_ENABLED"
        },
        {
          "eventName": "SKILL_DISABLED"
        },
        {
          "eventName": "SKILL_PERMISSION_ACCEPTED"
        },
        {
          "eventName": "SKILL_PERMISSION_CHANGED"
        },
        {
          "eventName": "SKILL_ACCOUNT_LINKED"
        }
      ],
      "regions": {
        "NA": {
          "endpoint": {
            "uri": "arn:aws:lambda:..."
          }
        }
      }
    }
  }
}