尝试将事件发送到网络聊天客户端时出错

问题描述 投票:0回答:1

我有一个使用bot框架v4构建的机器人。我正在使用MS网络聊天访问机器人。

我正在尝试将机器人的事件活动发送到聊天客户端。当我使用SendToConversationAsync进行最后一次调用时,我收到错误。

我使用的代码与我在bot框架v3中成功完成此操作的代码完全相同。

有人能否说明我在这里做错了什么?

这是我用来发送事件的代码

internal async Task SendSpecialEvent(Activity activity)
    {

        Activity clearMessage = activity.CreateReply();
        clearMessage.Type = "event";
        clearMessage.Value = "executeSpecialEvent";

        var connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        await connector.Conversations.SendToConversationAsync(clearMessage);
    }

错误消息是

“值不能为空。\ r \ nParameter name:clientId”

这是异常的堆栈跟踪。该错误与机器人的appid /密码有关,但我不确定为什么会这样。到目前为止,机器人工作正常。

在Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential..ctor(String clientId,String clientSecret)at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials。<> c__DisplayClass6_0。<。ctor> b__0()在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Connector \ Authentication \ MicrosoftAppCredentials.cs:System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy1.ExecutionAndPublication(LazyHelper executionAndPublication,Boolean useDefaultConstructor)中的第71行,位于D:\ a \ 1 \ s \中的System.Lazy1.CreateValue() at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.GetTokenAsync(Boolean forceRefresh) in D:\a\1\s\libraries\Microsoft.Bot.Connector\Authentication\MicrosoftAppCredentials.cs:line 158 at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) in D:\a\1\s\libraries\Microsoft.Bot.Connector\Authentication\MicrosoftAppCredentials.cs:line 143 at Microsoft.Bot.Connector.Conversations.ReplyToActivityWithHttpMessagesAsync(String conversationId, String activityId, Activity activity, Dictionary2 customHeaders,CancellationToken cancellationToken) libraries \ Microsoft.Bot.Connector \ Conversations.cs:D:\ a \ 1 \ s \中的Microsoft.Bot.Connector.ConversationsExtensions.ReplyToActivityAsync(IConversations操作,String conversationId,String activityId,Activity activity,CancellationToken cancellationToken)中的第1176行libraries \ Microsoft.Bot.Connector \ ConversationsExtensions.cs:位于C:\ dev \ Personal \ WestRockServiceDe的WestRockServiceDeskBot.Utility.ExtServices.SendClearChatHistoryEvent(Activity activity,IWRLogger _logger)的第241行skBot \ WestRockServiceDeskBot \ Utility \ ExtServices.cs:位于C:\ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Dialogs \ Main \ MainDialog.cs中的WestRockServiceDeskBot.Dialogs.MainDialog.FinalizeConversation(WaterfallStepContext stepContext,CancellationToken cancellationToken)的第58行:第174行at Microsoft.Bot.Builder中的D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ WaterfallDialog.cs中的Microsoft.Bot.Builder.Dialogs.WaterfallDialog.OnStepAsync(WaterfallStepContext stepContext,CancellationToken cancellationToken):第166行Dialogs.WaterfallDialog.RunStepAsync(DialogContext dc,Int32 index,DialogReason reason,Object result,CancellationToken cancellationToken)在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ WaterfallDialog.cs:Microsoft第188行.Bot.Builder.Dialogs.WaterfallDialog.ResumeDialogAsync(DialogContext dc,DialogReason reason,Object result,CancellationToken cancellationToken)在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ WaterfallDialog.cs:第113行at at话筒在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ DialogContext.cs中的rosoft.Bot.Builder.Dialogs.DialogContext.EndDialogAsync(Object result,CancellationToken cancellationToken):Microsoft.Bot.Builder中的第192行D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ ComponentDialog.cs中的.Dialogs.ComponentDialog.ContinueDialogAsync(DialogContext outerDc,CancellationToken cancellationToken):Microsoft.Bot.Builder.Dialogs.DialogContext中的第90行。 D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ DialogContext.cs中的ContinueDialogAsync(CancellationToken cancellationToken):Microsoft.Bot.Builder.Dialogs.ComponentDialog.ContinueDialogAsync中的第145行(DialogContext outerDc,CancellationToken cancellationToken)在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder.Dialogs \ ComponentDialog.cs:D:\ a \ 1中的Microsoft.Bot.Builder.Dialogs.DialogContext.ContinueDialogAsync(CancellationToken cancellationToken)中的第86行s \ libraries \ Microsoft.Bot.Builder.Dialogs \ DialogContext.cs:WestRockServiceDeskBot.Bot.OnTu的第145行在C:\ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Bot.cs中的rnAsync(ITurnContext turnContext,CancellationToken cancellationToken):Bot.Builder.Community.Middleware.SpellCheck.SpellCheckMiddleware.OnTurnAsync(ITurnContext context,NextDelegate next,CancellationToken cancellationToken)的第54行在Microsoft.Bot.Builder.AutoSaveStateMiddleware.OnTurnAsync(ITurnContext turnContext,NextDelegate next,CancellationToken cancellationToken)D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder \ AutoSaveStateMiddleware.cs:WestRockServiceDeskBot.Middleware.SetLocaleMiddleware第60行.OnTurnAsync(ITurnContext context,NextDelegate next,CancellationToken cancellationToken)位于C:\ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Middleware \ SetLocaleMiddleware.cs:第26行,位于Microsoft.Bot.Builder.ShowTypingMiddleware.OnTurnAsync(ITurnContext turnContext,NextDelegate next,CancellationToken在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder \ ShowTypingMiddleware.cs:第71行中的cancellationToken)在WestRockServiceDeskBot.Middleware.Telemetry的D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder \ TranscriptLoggerMiddleware.cs:第108行的Microsoft.Bot.Builder.TranscriptLoggerMiddleware.OnTurnAsync(ITurnContext turnContext,NextDelegate nextTurn,CancellationToken cancellationToken)中.TelemetryLoggerMiddleware.OnTurnAsync(ITurnContext context,NextDelegate nextTurn,CancellationToken cancellationToken)位于C:\ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Middleware \ Telemetry \ TelemetryLoggerMiddleware.cs:第115行,位于Microsoft.Bot.Builder.MiddlewareSet.ReceiveActivityWithStatusAsync(ITurnContext turnContext, BotCallbackHandler回调,CancellationToken cancellationToken)在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder \ MiddlewareSet.cs:第55行在Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync(ITurnContext turnContext,BotCallbackHandler回调,CancellationToken cancellationToken)在D:\ a \ 1 \ s \ libraries \ Microsoft.Bot.Builder \ BotAdapter.cs:第167行

好的,我发现了一些有用的东西我已经改变代码使用ReplyToActivityAsync()而不是使用ConnectorClient。这个新代码看起来像这样

Activity clearMessage = stepContext.Context.Activity.CreateReply();
clearMessage.Type = "event";
clearMessage.Value = "executeSpecialEvent";               
await stepContext.Context.SendActivityAsync(clearMessage, 
cancellationToken);

我仍然想知道为什么我的原始代码不适用于Botframework v4

botframework direct-line-botframework
1个回答
0
投票

我相信这是由于bot框架SDK的身份验证更改,如果应用程序ID中未设置应用程序ID和密码,则偶尔会发生这种情况。您可以确保在应用程序Web设置中设置这些设置。

enter image description here

如果没有设置并且您需要获取这些值,您可以从this blog中的步骤中找到如何执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.