1

我已经设置了一个在 asp.net 核心中运行的 Microsoft Bot Framework 实例。我已经使用 Microsoft 的 Bot Channels Registration 连接到 Slack。

在我的机器人代码中,我有类似的东西:

protected override async Task OnMessageActivityAsync(
            ITurnContext<IMessageActivity> turnContext,
            CancellationToken cancellationToken)
{
  var message = $"From: {turnContext.Activity.From.Name})";
  await turnContext.SendActivityAsync(message, cancellationToken: cancellationToken);
}

这总是返回“发件人:BotName”。我预计这From.Name将是发送机器人正在响应的消息的人的姓名。

有没有办法获取发件人的用户名?我可以在 中看到正确的 slack 用户 ID turnContext.Activity.ChannelData,但我认为我可以通过普通的 bot 框架 API 来获取它。

4

3 回答 3

0

事实证明我的代码是正确的,但是我的 Slack 权限配置不正确。已经有一段时间了,但我相信必要的权限是users.profile:readuser:read(可能只需要其中一个,但我的机器人同时使用两者)。

如果您没有在 Slack 中向机器人授予这些权限,则 Bot Framework 似乎无法获取发件人的姓名,而只是将机器人名称用于turnContext.Activity.From.Name.

这种行为确实令人困惑。我宁愿它是一个空字符串或说“(未知)”。

于 2021-05-14T04:57:49.520 回答
0

turnContext.Activity.From.Name您用来获取发件人姓名的方式是正确的。我认为这是获取发件人姓名的最佳方式。

根据ITurnContext<IMessageActivity> turnContext,我们可以查看这个 IMessageActivity 对象的属性,最终只turnContext.Activity.From.Name满足我们的要求。

在此处输入图像描述

而且你还想从api获取名称可用。从下面的图片,你可以看到成员的信息。从官方文档的api中,我们可以通过GET /v3/conversations/{conversationId}/activities/{activityId}/members.

在此处输入图像描述

于 2020-05-12T09:29:27.343 回答
0

在此处查看此问题/答案。本质上,一种选择是使用 channeldata 附带的 slack API 令牌来对 slack 进行额外的调用以检索您需要的内容。OP 还发现他们可以在节点中使用会话对象,但我无法完成该路线。

于 2020-05-13T18:06:59.053 回答