【问题标题】:MS Teams bot - create conversation in newly created Group returns 405 BadArgumentMS Teams 机器人 - 在新创建的组中创建对话返回 405 BadArgument
【发布时间】:2020-11-05 01:57:14
【问题描述】:

我正在尝试使用 Nodejs + botframework v4.9.2 为刚刚创建的频道创建新的对话。

我已经

我在本地运行机器人并通过 ngrok 进行代理。 我也可以访问 GET /v3/conversations。

更新代码

获取团队成员GET ${graphUrl}/groups/${teamId}/members

创建新频道

const createChannelRequest: IGraphCreateChannelBody = {
    "@odata.type": "#Microsoft.Teams.Core.channel",
    displayName: channelName,
    description: `This channel is for incident id : ${incidentId}`,
    members: membersIds.map(memberId => (
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "user@odata.bind": `https://graph.microsoft.com/beta/users('${memberId}')`,
            roles: ["owner"]
        }
    ))
};

return await graphClient.createChannel(teamId, createChannelRequest);

createChannel 基本上是POST ${graphUrl}/teams/${teamId}/channels

创建新标签POST ${graphUrl}/teams/${req.teamId}/channels/${req.channelId}/tabs 其中channelId 是createChannelResponse.id

创建新对话

const client = new BotConnector.ConnectorClient(credentials, {baseUri: serviceUrl});
const {bot} = TurnContext.getConversationReference(activity);
const createConversationResponse = await client.conversations.createConversation({
    bot,
    activity: incidentActivity,
    members: teamMembers.value.map(member => ({
        id: member.id,
        name: member.displayName
    })),
    channelData: {
        channel: {
            id: newIncidentChannelId
        },
        tenant: {
            id: tenantId
        }
    },
    isGroup: true
});

createConversation 失败并返回 405

【问题讨论】:

  • 你的机器人真的安装到频道了吗?如果没有,它将无法发起对话
  • 是的。我可以与之交流。
  • 啊,在这种情况下,您不需要“createConversation”,您需要“SendToConversation”,因为对话已经存在。
  • @HiltonGiesenow 抱歉,我可能解释得不清楚。我已经为团队安装了机器人。我正在尝试创建新组并向那里发送一些消息。据我了解,我应该为新创建的小组创建新的对话。我无法使用 sendToConversation,因为我没有现有的。
  • @user1469253 - 我们可以看到您正在使用 Direct Line 端点。这意味着您的 Conversations 对象的连接器客户端必须具有 Direct Line 基本 URI。你能给我们一个实际的代码示例来展示你是如何构造这些对象的吗? (由于这个帖子里还有很多人,如果你想让我看到你的回复,你需要@提及我。)

标签: botframework microsoft-teams


【解决方案1】:

[发布完整的答案,基于上面的 cmets]

团队的上下文中,没有必要(也不会起作用)使用createConversation,因为对话是在团队创建的那一刻创建的/Channel/Group chat 本身已创建(createConversation 存在于其他 Bot Framework 方案中,不适用于 Teams)。因此,SendToConversation 是正确的操作。

至于如何使用SendToConversation,有一些重要的变量你需要已经在你身边,最常见的时间是当你的机器人被添加到频道时/首先聊天/无论如何。您可以阅读更多关于 here 的信息,但更一般地说,这在 Teams 中被认为是一种称为“主动”消息传递的东西,值得更多地阅读该主题。请参阅 herehere 作为良好的起点。

【讨论】:

  • 感谢您的回复。但我仍然不明白如何将消息发布到新频道。当我的机器人安装到团队中时,我可以获得参考,但不确定如何使用它们。我已经阅读了文档和其他 SO 答案,但仍然不知道。我再次通过 Graph API 创建新频道,并希望我的机器人在那里发布消息。
  • @user1469253 - 你只是想学习如何发送主动消息吗?希尔顿链接的文件解释了如何做到这一点。如果您有不明白的地方,您需要告诉我们您具体需要什么帮助。你问怎么做,他解释了怎么做,你只是说你仍然不知道怎么做,这对我们没有任何帮助。帮助我们帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
相关资源
最近更新 更多