Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Botframework 从Alexa频道提取用户配置文件数据-地址、电子邮件、电话号码、姓名_Botframework_Alexa Skills Kit_Alexa Skill - Fatal编程技术网

Botframework 从Alexa频道提取用户配置文件数据-地址、电子邮件、电话号码、姓名

Botframework 从Alexa频道提取用户配置文件数据-地址、电子邮件、电话号码、姓名,botframework,alexa-skills-kit,alexa-skill,Botframework,Alexa Skills Kit,Alexa Skill,我已经查看了步骤Context.Context.Activity.ChannelData,但没有看到这些字段可用。这是查找这些字段的正确位置吗 此外,是否可以使用这些库中的任何一个来提取字段,尽管我不是使用基于适配器的方法,而是通过Bot Channel=Alexa 因为当我试着 var profileClient = new CustomerProfileClient((SkillRequest)stepContext.Context.Activity.ChannelData);

我已经查看了步骤Context.Context.Activity.ChannelData,但没有看到这些字段可用。这是查找这些字段的正确位置吗

此外,是否可以使用这些库中的任何一个来提取字段,尽管我不是使用基于适配器的方法,而是通过Bot Channel=Alexa

因为当我试着

var profileClient = new CustomerProfileClient((SkillRequest)stepContext.Context.Activity.ChannelData);
                    FullAddress x = await profileClient.FullAddress();
这是错误的

Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Alexa.NET.Request.SkillRequest'.
相反,我是否应该编写自己的方法集,并以此作为参考

因为我已经使用端点和令牌得到了下面的响应

{
    "code": "ACCESS_DENIED",
    "message": "Access denied with reason: ACCESS_NOT_REQUESTED"
}
如果是,权限卡应该如何发送?是否有可以利用的示例消息活动


如果有人能在这里给我指路,我将不胜感激。

我可以帮你。我用python编写代码,所以我将只在python中添加代码片段。我想这并不难理解

  • 您必须在Alexa技能工具包中启用权限,并指定技能所需的字段。您可以在“工具”部分找到这一点

  • 对于许可卡,您必须以以下JSON格式发送响应

  • 下面是获取用户提供的数据的代码段

  • 您还可以添加其他权限。跟着这个。我希望这对你有帮助。如果您有任何疑问,请随时询问。

    谢谢@ashish,是的,我指的是同一份文件。您能否概述一下您将JSON负载发送到哪个端点?Botframework本身不允许直接按原样发送JSON有效负载。@KyleDelaney,您知道这里的出路吗
    {
            'outputSpeech': {
                'type': 'SSML',
                'ssml': "<speak>" + output + "</speak>"
            },
            'card': {
                "type": "AskForPermissionsConsent",
                "permissions": [
                    
                    "alexa::profile:given_name:read",
                    "alexa::profile:email:read"
                                    ],
                'title':  title,
                'content':  cardContent
            },
            'reprompt': {
                'outputSpeech': {
                    'type': 'SSML',
                    'ssml': '<speak>' + reprompt_text + '</speak>'
                }
            },
            'shouldEndSession': should_end_session
        }
    
    def checkAccountLinking(session):
        try:
            consentToken = session["user"]["permissions"]["consentToken"]
            accountLinked = 1
        except:
            accountLinked = 0
        return accountLinked
    
    def getlinkdata(session,event):
        consentToken = session["user"]["permissions"]["consentToken"]
        apiaccesstoken = event["context"]["System"]["apiAccessToken"]
        apiEndpoint = event["context"]["System"]["apiEndpoint"]
    
        headers = {
            'Authorization': 'Bearer ' + consentToken,
            'Content-Type': 'application/json',
        }
        try:
            
            responsename = requests.get(apiEndpoint +'/v2/accounts/~current/settings/Profile.givenName', headers=headers, verify=False)
            name = json.loads(responsename.text)
        except:
            name = " "
        
        try:
            responseemail = requests.get(apiEndpoint + '/v2/accounts/~current/settings/Profile.email', headers=headers, verify=False)
            email = json.loads(responseemail.text)
        except:
            email = " "
        userdata = [name, email]
    
        return userdata