我正在尝试存储用户和我们的机器人之间聊天的会话引用,并使用该聊天引用稍后发送其他消息。我正在我们的数据库中保存以下实体:
string UserAadObjectId { get; set; }
string UserId { get; set; }
string UserName { get; set; }
string ConversationId { get; set; }
string ConversationType { get; set; }
string ConversationTenantId { get; set; }
string ChannelId { get; set; }
string ActivityId { get; set; }
string BotId { get; set; }
string BotName { get; set; }
string ConversationReference { get; set; }
string ServiceUrl { get; set; }
在为特定用户获取这些实体后,我将创建一个会话引用,如下所示:(其中chatReference是上面实体的sql数据库(
var user = new ChannelAccount(chatReference.UserId, chatReference.UserName, null, chatReference.UserAadObjectId);
var bot = new ChannelAccount(chatReference.BotId, chatReference.BotName);
var conversationAccount = new ConversationAccount(conversationType: chatReference.ConversationType, id: chatReference.ConversationId, tenantId: chatReference.ConversationTenantId);
var convReference = new ConversationReference(activityId: chatReference.ActivityId, user: user, bot: bot, conversation: conversationAccount, channelId: chatReference.ChannelId, serviceUrl: chatReference.ServiceUrl);
运行时:
await turnContext.SendActivityAsync(messageActivity);
我从Bot连接器得到以下错误,我认为:
操作返回无效状态代码"未授权">
{"消息":"此请求的授权已被拒绝。"}
为什么会发生这种情况?知道CCD_ 1和CCD_ 2是正确的。
要避免出现错误,需要执行一系列步骤。
1.禁用安全性并在localhost上测试
检查配置文件中的应用程序ID和密码,并删除用于测试的ID和密码
"MicrosoftAppId": "",
"MicrosoftAppPassword": ""
当您使用核心.Net框架时。添加或编辑appsettings.json中的设置
2.检查机器人的应用程序ID和密码
现在需要检查应用程序ID和密码是否匹配。
这些说明和程序包括CURL使用
要验证您的机器人程序的应用程序ID和密码是否有效,请使用cURL发出以下请求,将app_ID和app_password[/em>替换为您的机器人的应用程序ID。
curl -k -X POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token -d "grant_type=client_credentials&client_id=APP_ID&client_secret=APP_PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default"
此请求尝试将您的机器人的应用程序ID和密码交换为访问令牌。如果请求成功,您将收到一个JSON负载,其中包含access_token属性等。
{"token_type":"Bearer","expires_in":3599,"ext_expires_in":0,"access_token":"eyJ0eXAJKV1Q..."}
3.在localhost上启用安全和测试
<appSettings>
<add key="MicrosoftAppId" value="APP_ID" />
<add key="MicrosoftAppPassword" value="PASSWORD" />
</appSettings>
如果您使用的是.NET的bot框架SDK,请使用上面的代码块
用于程序的完整参考。检查