我正在使用Microsoft机器人框架来创建机器人并将其集成到团队中。 机器人的部分要求包括每天主动向用户发送一次消息。据我了解,我只能在机器人之后向已添加到团队/群聊的用户发送消息,或者直接向机器人发送消息的用户发送消息。 我的问题是 - 我可以以某种方式绕过此限制吗? 我的一个朋友向我推荐了graphAPI的一个新功能,作为新的测试版的一部分 - https://learn.microsoft.com/en-us/graph/api/user-add-teamsappinstallation?view=graph-rest-beta&tabs=http。
对我来说,它似乎与解决方案无关,因为我没有在响应中获取任何数据,因此如果我没有 conversationReference 对象,我仍然无法向用户发送消息。
目前,我的解决方案是在添加消息时简单地在频道中广播消息,要求用户通过消息传递来"注册"。有人有其他建议吗?
最简单的方法是:
- 为团队安装机器人
- 查询团队名单 -- 步骤 3 中的链接具有在底部执行此操作的替代方法
- 创建与用户的对话并发送主动消息
这些链接中有很多代码,最好只是访问它们而不是将其复制/粘贴到此处。
步骤 3 的结尾还提到了trustServiceUrl
,如果您在尝试发送主动消息时遇到权限/身份验证问题,您可能会发现它很方便。
为节点编辑:
安装必要的软件包
npm i -S npm install botbuilder-teams@4.0.0-beta1 botframework-connector
注意:@<version>
很重要!
准备适配器
在index.js
const teams = require('botbuilder-teams');
adapter.use(new teams.TeamsMiddleware());
获取花名册
// Get Team Roster
const credentials = new MicrosoftAppCredentials(process.env.MicrosoftAppId, process.env.MicrosoftAppPassword);
const connector = new ConnectorClient(credentials, { baseUri: context.activity.serviceUrl });
const roster = await connector.conversations.getConversationMembers(context.activity.conversation.id);
发送主动消息
const { TeamsContext } = require('botbuilder-teams');
// Send Proactive Message
const teamsCtx = TeamsContext.from(context);
const parameters = {
members: [
roster[0] // Replace with appropriate user
],
channelData: {
tenant: {
id: teamsCtx.tenant.id
}
}
};
const conversationResource = await connector.conversations.createConversation(parameters);
const message = MessageFactory.text('This is a proactive message');
await connector.conversations.sendToConversation(conversationResource.id, message);
必要时信任服务网址
阅读有关它的信息。您希望在发送消息之前执行此操作。
MicrosoftAppCredentials.trustServiceUrl(context.activity.serviceUrl);
编辑:仅当您希望主动向不在安装了机器人的频道/群聊中的用户发送消息时,才需要您引用的图形 API。如果您需要主动向仅已安装机器人的上下文中的人员发送消息,则 mdrichardson 的答案是最简单的方法。
我们发现了你引用的图形 API beta 终结点的几个问题,这些问题应在短期内修复。同时,解决方法如下:
叫:
POST https://graph.microsoft.com/beta/me/teamwork/installedApps/
{"teamsapp@odata.bind":"https://graph.microsoft.com/beta/appcatalogs/teamsapps/APP-GUID"}
- 将在用户的个人范围内安装应用。
已知问题:目前,如果应用包含机器人,则安装不会导致在机器人和用户之间创建线程。但是,为了确保创建任何缺少的聊天线程,请调用:
GET https://graph.microsoft.com/beta/me/chats?$filter=installedApps/any(x:x/teamsApp/id eq 'APP-GUID'(
叫:
GET https://graph.microsoft.com/beta/me/chats?$filter=installedApps/any(x:x/teamsApp/id eq 'APP-GUID')
- 获取用户与包含机器人的应用之间的聊天。
- 已知问题:调用此 API 将导致向机器人发送聊天更新事件,即使聊天没有更新也是如此。机器人实际上将获得两个安装事件,你需要确保不会发送两次欢迎消息。
我们还将为使用这些图形 API 的主动消息传递流添加更详细的文档