Botframework 从Alexa频道提取用户配置文件数据-地址、电子邮件、电话号码、姓名
我已经查看了步骤Context.Context.Activity.ChannelData,但没有看到这些字段可用。这是查找这些字段的正确位置吗 此外,是否可以使用这些库中的任何一个来提取字段,尽管我不是使用基于适配器的方法,而是通过Bot Channel=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);
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中添加代码片段。我想这并不难理解
您还可以添加其他权限。跟着这个。我希望这对你有帮助。如果您有任何疑问,请随时询问。谢谢@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