我是Microsoft Bot Framework的新手。我有一个机器人,可以接收来自一个用户的消息,并且可以被另一个用户查看。我想添加一个功能,使查看者可以随后回复发件人。我认为最好的方法是向原始发件人发送主动消息。但是,我很难理解Microsoft提供的文档,而其他来源的文档都过时了。
现在这就是我所拥有的。
MessageDetails.RelatesTo包含ConversationReference:
private async Task<DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var messageDetails = (MessageDetails)stepContext.Options;
var replyText = (string)stepContext.Result;
var messageactivity = messageDetails.RelatesTo.GetContinuationActivity();
await stepContext.Context.SendActivityAsync($"{messageDetails.RelatesTo}");
var client = new ConnectorClient(new Uri(messageactivity.ServiceUrl));
if (messageDetails.IsTrustedServiceUrl)
{
MicrosoftAppCredentials.TrustServiceUrl(messageactivity.ServiceUrl);
}
var triggerReply = messageactivity.CreateReply();
triggerReply.Text = $"NoReply from {stepContext.Context.Activity.Name}: {replyText}";
await client.Conversations.ReplyToActivityAsync(triggerReply);
await stepContext.Context.SendActivityAsync($"Your reply has been sent to {messageDetails.RelatesTo.User.Name}.");
return await stepContext.EndDialogAsync(messageDetails, cancellationToken);
}
此代码不起作用,我不确定为什么。 (对于任何有关如何解决问题的建议,我也将不胜感激)。我意识到这没有利用Microsoft提供的示例代码中显示的控制器。老实说,我不知道通知控制器是如何工作的。因此,如果解决方案涉及这一点,那么对一些细节进行解释将是很棒的。
答案 0 :(得分:0)
我的猜测是您收到此错误:
System.ArgumentNullException:'值不能为null。参数名称:clientId'
这是因为您没有在appId
中指定new ConnectorClient
。您可以忽略它,因为最好做一些类似的事情:
await stepContext.Context.Adapter.ContinueConversationAsync("<yourAppId>", messageDetails.RelatesTo, async (ITurnContext turnContext, CancellationToken cancel) =>
{
await turnContext.SendActivityAsync(triggerReply);
}, cancellationToken);
关键是要确保您有一个ConversationReference
用户,您需要将主动消息发送给该用户。如果您没有,则应该可以CreateConversation
建立一个
请注意,您还有:
if (messageDetails.IsTrustedServiceUrl)
{
MicrosoftAppCredentials.TrustServiceUrl(messageactivity.ServiceUrl);
}
这基本上是在说:“如果我们已经信任serviceUrl,请再次信任它”。相反,您需要:if (!messageDetails.IsTrustedServiceUrl)
这里是对主动样本的工作方式的简要说明。我建议下载并尝试使用它以获得更好的理解。
api/messages
(所有漫游器都这样做)和api/notify
(仅该漫游器这样做)上建立侦听器。api/messages
和ActivityHandler
。<theBotUrl>/api/notify
时,loops through each saved conversation reference,calls ContinueConversation和sends the message会访问已保存的会话引用中的所有用户