У меня есть бот, который я создал с использованием платформы фреймворка v4.Я обращаюсь к боту с помощью веб-чата MS.
Я пытаюсь отправить событие с ботом в чат-клиент.Я получаю сообщение об ошибке, когда я выполняю последний вызов для отправки с помощью SendToConversationAsync.
Код, который я использую, идентичен тому, как я успешно сделал это в Bot Framework 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 \ nИмя параметра: clientId"
Это трассировка стека из исключения.Ошибка имеет отношение к appid / паролю для бота, но я не уверен, почему это так.До этого момента бот работал отлично.
в Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential..ctor (String clientId, String clientSecret) в Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.. <> c__DisplayClass6_0. <. ctor> b__0 () в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Connector \ Authentication \ MicrosoftAppCredentials.cs: строка 71 в System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy
1.ExecutionAndPublication (LazyHelperexecuteAndPublication, логическое значение useDefaultConstructor) в System.Lazy 1.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, Dictionary
2 customHeaders, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Connector \ Conversations.cs: строка 1176 в Microsoft.Bot.Connector.ConversationsExtensions.ReplyToActivityAsync (операции IConversations, String dialogId, String activityId, Activity Activity, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Connector \ ConversationsExtensions.cs: строка 241 в WestRockServiceDeskBot.Utility.ExtistEar.Sevent.EventService.Event.Service.EventServices.EventService.EventService.vent(Деятельность активность, IWRLogger _logger) в C: \ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Utility \ ExtServices.cs: строка 58 в WestRockServiceDeskBot.Dialogs.MainDialog.FinalizeConversation (персональный_каталог_обмена \ WaterfrontStekState_Connect_Connect_TeckTokateSk0)WestRockServiceDeskBot \ Dialogs \ Main \ MainDialog.cs: строка 174 в Microsoft.Bot.Builder.Dialogs.WaterfallDialog.OnStepAsync (WaterfallStepContext) stepContext, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ библиотеки \ Microsoft.Bu.\ WaterfallDialog.cs: строка 166 в Microsoft.Bot.Builder.Dialogs.WaterfallDialog.RunStepAsync (DialogContext dc, индекс Int32, причина DialogReason, результат объекта, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder.Dialogs \ WaterfallDialog.cs: строка 188 в Microsoft.Bot.Builder.Dialogs.WaterfallDialog.ResumeDialogAsync (DialogContext dc, причина DialogReason, результат объекта, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library\ Microsoft.Bot.Builder.Dialogs \ WaterfallDialog.cs: строка 113 в Microsoft.Bot.Builder.Dialogs.DialogContext.EndDialogAsync (Результат объекта, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder.Dialogs \ DialogContext.cs: строка 192 в Microsoft.Bot.Builder.Dialogs.ComponentDialog.ContinueDialogAsync (DialogContext outerDc, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder.Dialogs \ ComponentDialogs.cs: строка 90 в Microsoft.Bot.Builder.Dialogs.DialogContext.ContinueDialogAsync (CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder.Dialogs \ DialogContext.cs: строка 145 в Microsoft.Bot.Builder.Dialogs.ComponentDialog.ContinueDialogAsync (DialogContext outerDc, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder.Dialogs \ ComponentDialog.cs: строка 86 в файле Microsoft.Bot.Builder.Dialogs.DialogContext.ContinueDialogAsync (CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder.Dialogs \ DialogContext.cs: строка 145в WestRockServiceDeskBot.Bot.OnTurnAsync (ITurnContext turnContext, CancellationToken cancellationToken) в C: \ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Bot.cs: строка 54
в Bot.Builder.Community.Middleware.SpellCheck.SpellCheckMiddleware.OnTurnAsync (контекст ITurnContext, NextDelegate next, CancellationToken cancellationToken)
в Microsoft.Bot.Builder.AutoSaveStateMiddleware.OnTurnAsync (ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder \ AutoSaveStateMiddleware.cs: строка 60
в WestRockServiceDeskBot.Middleware.SetLocaleMiddleware.OnTurnAsync (контекст ITurnContext, NextDelegate next, CancellationToken cancellationToken) в C: \ dev \ Personal \ WestRockServiceDeskBot \ WestRockServiceDeskBot \ Middleware 26
в Microsoft.Bot.Builder.ShowTypingMiddleware.OnTurnAsync (ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder \ ShowTypingMiddleware.cs: строка 71
в Microsoft.Bot.Builder.TranscriptLoggerMiddleware.OnTurnAsync (ITurnContext turnContext, NextDelegate nextTurn, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder \ TranscriptLoggerMiddleware.cs: строка 108
в WestRockServiceDeskBot.Middleware.Telemetry.TelemetryLoggerMiddleware.OnTurnAsync (контекст ITurnContext, NextDelegate nextTurn, CancellationTokenTokenToken) в C: \ dev \ Personal \ WestRockServiceDeskBot \ WestmetryLerware 115MBM
в Microsoft.Bot.Builder.MiddlewareSet.ReceiveActivityWithStatusAsync (обратный вызов ITurnContext turnContext, обратный вызов BotCallbackHandler, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ Microsoft.Bot.Builder \ MiddlewareSet.cs: строка 55
в Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync (ITurnContext turnContext, обратный вызов BotCallbackHandler, CancellationToken cancellationToken) в D: \ a \ 1 \ s \ library \ 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