我有一个基于BotFramework 3.5构建的机器人,并托管在Azure上作为WebApp。我在实现机器人需要响应用户输入的情况时没有遇到任何问题。然而,现在需要通过一些时间表来教机器人开始对话。 为了达成这个目标,我创建了一个WebJob,它基本上是一个简单的控制台应用程序。下面是用于从机器人向用户发起消息的代码:
var botAccount = new ChannelAccount(id: from);
var userAccount = new ChannelAccount(id: to);
var conversation = new ConversationAccount(false, conversationId);
var connector = new ConnectorClient(serviceUrl);
IMessageActivity message = Activity.CreateMessageActivity();
message.From = botAccount;
message.Recipient = userAccount;
message.Conversation = conversation;
message.Text = text;
message.Locale = locale;
await connector.Conversations.SendToConversationAsync((Activity)message);
from, to, serviceUrl, conversationId
- 从之前的对话中获取,所以我期望它们是有效的。然而在 SendToConversationAsync
方法中抛出了异常:
System.UnauthorizedAccessException: Authorization for Microsoft App ID 3a26a4d4-f75a-4feb-b3e0-37a7fa24e5fc failed with status code Unauthorized and reason phrase 'Unauthorized' ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized)
app.config文件包含与原始机器人API相同的值,包括AppId和AppSecret。我看到了一些关于同一主题的问题,但没有找到答案。
我是否遗漏了什么?从控制台应用程序代表机器人发送消息是有效的方法吗?