以编程方式向 Microsoft Teams 中的机器人发送消息

Muh*_*der 2 botframework microsoft-teams

我创建了一个主动机器人,当用户开始与机器人对话时,它基本上会向用户提出某些问题。该机器人部署在 Microsoft Teams 环境中。有什么方法可以向频道中的机器人发送自动消息?我知道可以通过使用特定团队公开的 webhook url 或使用 MS Flow 使用 powershell 发送消息。但是我想在消息中提及机器人(例如@mybothandle),以便机器人开始自行提问,而不是要求用户开始对话(通过手动提及机器人)但找不到提及的方式。欢迎您提出建议。

Hil*_*now 6

基本上,您希望在特定时间点(例如 24 小时后)直接向用户发送消息。我正在几个不同的机器人中这样做,所以这绝对是可能的。Wajeed 在评论中针对您的问题发送的链接正是您所需要的 - 当用户与您的机器人交互时,您需要保存重要信息,例如对话 ID、对话类型、服务 URL 以及收件人和发件人信息。例如,您可以将其存储在数据库中,然后您实际上可以让一个完全独立的应用程序进行调用,就好像它是您的机器人一样。例如,在我的机器人中,我将机器人托管在一个普通主机(例如 Azure 网站)中,然后有一个 Azure 函数来发送消息,例如,24 小时后。它只是在用户看来就像是来自机器人的消息,就像正常一样。

你还需要你的机器人的 Microsoft 应用 ID 和应用密码,你应该已经有了(如果没有,它在 Azure 门户中)。

在您的“发送”应用程序中,您将需要创建一个 Microsoft 实例。Bot.Connector.ConnectorClient,如下所示:

var Connector = new ConnectorClient(serviceUrl, microsoftAppId: credentialProvider.AppId, microsoftAppPassword: credentialProvider.Password);
Run Code Online (Sandbox Code Playgroud)

您还需要“信任”您正在调用的服务 url,如下所示:

MicrosoftAppCredentials.TrustServiceUrl(serviceURL);
Run Code Online (Sandbox Code Playgroud)

然后你创建一个 Microsoft.Bot.Schema.Activity 的实例,设置所需的属性,并通过你创建的连接器发送它:

 var activity = Activity.CreateMessageActivity();

 activity.From = new ChannelAccount([FromId], [FromName];
 activity.Recipient = new ChannelAccount([ToId], [ToName]);
 activity.Conversation = new ConversationAccount(false, [ConversationType], [ConversationId]);
 activity.Conversation.Id = [ConversationId];

 activity.Text = "whatever you want to send from the bot...";

 Connector.Conversations.SendToConversationAsync((activity as Activity)).Wait();
Run Code Online (Sandbox Code Playgroud)

方括号中的所有项目都是您从用户与机器人进行的初始对话中获得的内容,除了 From 和 To 被切换(当用户向您的机器人发送消息时,用户是 FROM 而您的机器人是TO,当机器人发送时,您可以切换它们。

希望有帮助

  • 啊,好吧。我上面发布的内容是在 24 小时内发送消息本身,但您需要第一个对话 id(直接消息的对话类型为“个人”),因为您的机器人从未与用户聊天。机器人不能只是开始与其他用户聊天,它需要许可。我以前没有这样做过,但是您需要在频道中获取用户信息,例如[this](https://doumer.me/get-user-info-with-your-chat-bot-in-microsoft -teams/),然后以编程方式为用户实际“安装”机器人,如 [C# 示例](https://docs.microsoft.com/en-us/graph/teams-proactive-messaging#c-sample) (2认同)

Muh*_*der 3

对于所有未来的访问者,Microsoft Graph API(测试版)现在提供了一种使用以下端点发送消息并提及机器人/用户的方法:

 https://graph.microsoft.com/beta/teams/{group-id-for-teams}/channels/{channel-id}/messages
Run Code Online (Sandbox Code Playgroud)

方法:邮寄

身体

"body": {
    "contentType": "html",
    "content": "Hello World <at id=\"0\">standupbot</at>"
  },
  "mentions": [
    {
      "id": 0,
      "mentionText": "StandupBot",
      "mentioned": {
        "application": {
                            "id": "[my-bot-id]",
                            "displayName": "StandupBot",
                            "applicationIdentityType": "bot"
                        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是,存在一个错误,即机器人收到消息时没有响应: 使用 Graph API 发送消息时,机器人没有响应 @Mention