通过语音启用技能时,Alexa技能未请求许可通知

问题描述

在Web或应用程序中启用该功能时,该技能需要一个许可(出站通知)。但是,在实施Skill Enabled Event后,它并没有要求用户授予通知权限。技能启用本身可以工作,但认情况下是许可,否。通过语音启用时如何使alexa寻求许可?

Alexa可以通过语音提示他们以启用出站通知吗?

skill.json

{
"manifest": {
    "publishinginformation": {
        "locales": {
            "en-US": {
                "summary": "test skill summary","examplePhrases": [
                    "Alexa,launch test skill","Alexa,open test skill",start test skill"
                ],"keywords": [
                    "test skill"
                ],"name": "test skill","description": "test skill Description","smallIconUri": "","largeIconUri": "","updatesDescription": ""
            }
        },"isAvailableWorldwide": true,"testingInstructions": "n/a","category": "EVENT_FINDERS","distributionCountries": [],"automaticdistribution": {
            "isActive": false
        }
    },"apis": {
        "custom": {
            "endpoint": {
                "uri": "arn:aws:lambda:us-east-1:"
            },"interfaces": []
        }
    },"manifestVersion": "1.0","privacyAndCompliance": {
        "allowsPurchases": false,"locales": {
            "en-US": {
                "privacyPolicyUrl": "","termsOfUseUrl": ""
            }
        },"isExportCompliant": true,"containsAds": false,"isChildDirected": false,"usesPersonalInfo": false
    },"events": {
        "endpoint": {
            "uri": "arn:aws:lambda:us-east-1:"
        },"publications": [
            {
                "eventName": "AMAZON.MessageAlert.Activated"
            },{
                "eventName": "AMAZON.MediaContent.Available"
            }
        ],"regions": {
            "NA": {
                "endpoint": {
                    "uri": "arn:aws:lambda:us-east-1:","sslCertificateType": "Trusted"
                }
            }
        },"subscriptions": [
            {
                "eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
            },{
                "eventName": "SKILL_ENABLED"
            },{
                "eventName": "SKILL_disABLED"
            },{
                "eventName": "SKILL_PERMISSION_ACCEPTED"
            },{
                "eventName": "SKILL_PERMISSION_CHANGED"
            },{
                "eventName": "SKILL_ACCOUNT_LINKED"
            }
        ]
    },"permissions": [
        {
            "name": "alexa::devices:all:notifications:write"
        }
    ]
}

}

感谢您的帮助

解决方法

可能有不同的方法,但是一旦我掌握了技能,我相信您将需要发送许可卡。据我了解,其想法是确保亚马逊作为第三方权限授予者参与其中。这将在用户手机上的Alexa应用程序中弹出权限请求。这种增加的安全性层只是确保客户能够确切地看到他们所授予的权限。

您可以通过几种不同的方法来做到这一点。您可以检查用户的第一次连接,并在持久客户数据层中跟踪该第一次连接。或者,您可以仅在使用该技能的那部分时检查用户是否具有权限。如果他们没有回应,告诉客户您已向他们发送了一张卡片以授予权限。

以下是有关许可卡的更多信息: https://developer.amazon.com/en-US/docs/alexa/custom-skills/request-customer-contact-information-for-use-in-your-skill.html#permissions-card-for-requesting-customer-consent

,

要通过lambda运行提醒,其他权限可能是相同的格式。

const CreateReminderIntent = {

  canHandle(handlerInput) {
    const { request } = handlerInput.requestEnvelope;
    return request.type === 'IntentRequest' && request.intent.name === 'CreateReminderIntent';
  },async handle(handlerInput) {
    const { requestEnvelope,serviceClientFactory,responseBuilder } = handlerInput;
    const consentToken = requestEnvelope.context.System.user.permissions
      && requestEnvelope.context.System.user.permissions.consentToken;
    if (!consentToken) {
      return handlerInput.responseBuilder
        .addDirective({
          type: "Connections.SendRequest",name: "AskFor",payload: {
            "@type": "AskForPermissionsConsentRequest","@version": "1","permissionScope": "alexa::alerts:reminders:skill:readwrite"
          },token: "<string>"
        })
        .getResponse();
    }

    try {

      const speechText = "Great! I've scheduled a reminder for you";

      const ReminderManagementServiceClient = serviceClientFactory.getReminderManagementServiceClient();
      const reminderPayload = {
        "trigger": {
          "type": "SCHEDULED_RELATIVE","offsetInSeconds": "10","timeZoneId": "Europe/London"
        },"alertInfo": {
          "spokenInfo": {
            "content": [{
              "locale": "en-GB","text": "Wash the dog"
            }]
          }
        },"pushNotification": {
          "status": "ENABLED"
        }
      };

      await ReminderManagementServiceClient.createReminder(reminderPayload);
      return responseBuilder
        .speak(speechText)
        .getResponse();

    } catch (error) {
      console.error(error);
      return responseBuilder
        .speak('Uh Oh. Looks like something went wrong.')
        .getResponse();
    }
  }
};

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...