创建团队频道对话失败,对话未找到错误代码



我有一个机器人框架 V3 机器人代码库,它可以在六个左右不同的客户团队租户中工作,也可以在我们的内部团队租户上运行,没有问题。

在一个特定的客户租户中,当我调用 ConnectorClient.Conversations.CreateConversationAsync(( 时,尝试创建到 Teams 频道的主动消息失败,并出现 ConversationNotFound 404 错误。

我用于创建对话并在频道中发布活动的代码如下所示:

var teamsChannelId = "19:deadbeef1234@thread.skype"; // insert the real channel ID obtained from lookups against Graph API...
var botCredentials = new MicrosoftAppCredentials(/* Bot ID & password */);
MicrosoftAppCredentials.TrustServiceUrl("https://smba.trafficmanager.net/amer/", DateTime.MaxValue);
using (var connectorClient = new ConnectorClient(new Uri("https://smba.trafficmanager.net/amer/"), botCredentials)) {
var botId = new ChannelAccount("28:" + botCredentials.MicrosoftAppId);
var msg = Activity.CreateMessageActivity();
msg.From = botId;
var card = MakeCard(); // builds an AdaptiveCard...
msg.Attachments.Add(new Attachment(AdaptiveCard.ContentType, content: card));
var parameters = new ConversationParameters() {
Bot = botId,
ChannelData = new TeamsChannelData() {
Channel = new ChannelInfo(teamsChannelId)
},
Activity = (Activity)msg
};
// This throws an Microsoft.Bot.Connector.ErrorResponseException with the code "ConversationNotFound"
ConversationResourceResponse convoResponse = await connectorClient .Conversations.CreateConversationAsync(parameters);
}

正如我最初提到的,此代码可能并不完美,但它适用于许多不同的团队和 Azure 环境,但在此特定环境中失败。 来自机器人框架的 HTTP 响应如下所示:

"Response": {
"StatusCode": 404,
"ReasonPhrase": "Not Found",
"Content": "{"error":{"code":"ConversationNotFound","message":"Conversation not found."}}",
"Headers": {
"Date": [
"Wed, 04 Sep 2019 14:43:24 GMT"
],
"Server": [
"Microsoft-HTTPAPI/2.0"
],
"Content-Length": [
"77"
],
"Content-Type": [
"application/json; charset=utf-8"
]
}

堆栈跟踪:

Microsoft.Bot.Connector.ErrorResponseException: Operation returned an invalid status code 'NotFound'
at Microsoft.Bot.Connector.Conversations.<CreateConversationWithHttpMessagesAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Bot.Connector.ConversationsExtensions.<CreateConversationAsync>d__3.MoveNext()
  • 该机器人能够通过网络聊天、直线和 Teams 连接器处理传入的 1-1 聊天对话,因此我认为机器人凭据或机器人注册配置没有任何问题。
  • 机器人已添加为Microsoft团队的应用,上传到租户,并添加到相应的团队。
  • 我已经探讨了 Azure 中的机器人框架注册区域可能导致问题的可能性,但我在我们的终端上重现了客户端的配置,并且无法重现该问题。

任何建议将非常受欢迎。

我有一种感觉,你的parameters缺少Tenant.这可以解释为什么它在某些租户上失败,而不是在其他租户上失败。尝试这样的事情:

var parameters = new ConversationParameters
{
Members = new[] { new ChannelAccount(userId) },
ChannelData = new TeamsChannelData
{
Tenant = new TenantInfo(activity.Conversation.TenantId),
},
};

@Trinetra-MSFT也是正确的。不应对服务 URL 进行硬编码;您的某些用户可能在/amer之外

。尽管在某种程度上是可能的,但不应将"主动消息传递"视为"向未与机器人交谈的用户发送消息",而应将"向用户发送与先前对话无关的内容的消息"。一般来说,需要通过保存机器人过去与之进行过对话的用户的对话引用来完成主动消息传递。这就是机器人框架具体定义主动消息传递的方式。

对于团队,根据机器人的主动消息传递:

只要机器人具有通过以前在个人、群聊或团队范围内添加的用户信息获取的用户信息,机器人就可以与单个 Microsoft Teams 用户创建新对话。此信息使机器人能够主动通知他们。例如,如果机器人已添加到团队,它可以查询团队名单并在个人聊天中向用户发送个人消息,或者用户可以@mention其他用户来触发机器人向该用户发送直接消息。

有关其他帮助,请参阅此 SO 答案。注意:它是为 V4 机器人编写的,因此您可能需要进行一些调整。

如果您遇到问题,请告诉我,我会相应地调整我的答案。

相关内容

  • 没有找到相关文章