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

时间:2019-12-17 08:56:03

标签: botframework microsoft-teams

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

2 个答案:

答案 0 :(得分:0)

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

 https://graph.microsoft.com/beta/teams/{group-id-for-teams}/channels/{channel-id}/messages

方法: POST

身体

"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"
                        }
      }
    }
  ]
}

但是,有一个错误,机器人在收到消息时没有响应: Bot is not responding to @Mention when sending message using Graph API

答案 1 :(得分:0)

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

您还需要为您的机器人准备Microsoft App ID和App密码(如果没有,则在Azure门户中)。

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

var Connector = new ConnectorClient(serviceUrl, microsoftAppId: credentialProvider.AppId, microsoftAppPassword: credentialProvider.Password);

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

MicrosoftAppCredentials.TrustServiceUrl(serviceURL);

然后,您创建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();

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

希望有帮助