作为对话框提示选择的结果发送主动消息

我对 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);

}

这段代码不起作用,我不完全确定为什么。(我也很感激任何有关如何解决问题的建议)。我意识到这并没有利用微软提供的示例代码中显示的控制器。老实说,我不明白通知控制器是如何工作的。因此,如果解决方案涉及到这一点,最好能得到一些细节的解释。


慕容森
浏览 125回答 1
1回答

海绵宝宝撒

解决你的问题我的猜测是您收到此错误:System.ArgumentNullException: '值不能为空。参数名称:clientId'这是因为您没有指定appIdin 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,它会循环访问每个保存的对话引用,调用ContinueConversation,并将消息发送给保存的对话引用中的所有用户。
打开App,查看更多内容
随时随地看视频慕课网APP