Ошибка при попытке отправить событие клиенту веб-чата

#botframework #direct-line-botframework

#botframework #прямая линия-botframework

Вопрос:

У меня есть бот, который я создал с использованием платформы bot Framework версии 4. Я обращаюсь к боту с помощью MS webchat.

Я пытаюсь отправить действие события от бота клиенту чата. Я получаю сообщение об ошибке при выполнении последнего вызова для отправки с использованием 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);
    }
  

Сообщение об ошибке является

«Значение не может быть нулевым.rnPпараметр name: ClientID»

Это трассировка стека из исключения. Ошибка как-то связана с appid / паролем для бота, но я не уверен, почему это так. Бот работает отлично до этого момента.

в Microsoft.IdentityModel.Клиенты.ActiveDirectory.ClientCredential..ctor(String ClientID, String clientSecret) в Microsoft.Bot.Connector.Аутентификация.MicrosoftAppCredentials.<> c__DisplayClass6_0.<.ctor>b__0() в D:a1slibrariesMicrosoft.Bot.ConnectorAuthenticationMicrosoftAppCredentials.cs:line 71 в System.Lazy 1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy
1.Выполнение и публикация (LazyHelper ExecutionAndPublication, логический используемый defaultconstructor) в System.Lazy 1.CreateValue()
at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.GetTokenAsync(Boolean forceRefresh) in D:a1slibrariesMicrosoft.Bot.ConnectorAuthenticationMicrosoftAppCredentials.cs:line 158
at Microsoft.Bot.Connector.Authentication.MicrosoftAppCredentials.ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) in D:a1slibrariesMicrosoft.Bot.ConnectorAuthenticationMicrosoftAppCredentials.cs:line 143
at Microsoft.Bot.Connector.Conversations.ReplyToActivityWithHttpMessagesAsync(String conversationId, String activityId, Activity activity, Dictionary
2 пользовательских заголовка, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft .Бот.Соединитель Conversations.cs: строка 1176 в Microsoft.Bot.Connector.Расширенные диалоги.ReplyToActivityAsync (IConversations operations, String conversationId, String ActivityId, Activity activity, CancellationToken Отмена токена) в D:a1slibrariesMicrosoft.Bot.ConnectorConversationsExtensions.cs:line 241 в WestRockServiceDeskBot.Утилита.Дополнительные сервисы.Отправьте clearchathistoryevent (Activity activity, IWRLogger _logger) в C:devPersonalWestRockServiceDeskBotWestRockServiceDeskBotUtilityExtServices.cs:line 58 у WestRockServiceDeskBot.Диалоги.Основной каталог.Завершите преобразование (WaterfallStepContext StepContext, CancellationToken CancellationToken) в C:devPersonalWestRockServiceDeskBotWestRockServiceDeskBotDialogsMainMainDialog.cs:line 174 в Microsoft.Bot.Builder.Диалоги.WaterfallDialog.OnStepAsync (WaterfallStepContext StepContext, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .DialogsWaterfallDialog.cs: строка 166 в Microsoft.Бот.Конструктор.Диалоги.WaterfallDialog.RunStepAsync (DialogContext dc, индекс Int32, причина диалогового окна, результат объекта, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .Диалоги WaterfallDialog.cs: строка 188 в Microsoft.Bot.Builder.Диалоги.WaterfallDialog.Возобновленная диалоговая синхронизация (DialogContext dc, причина диалогового окна, результат объекта, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .Диалоги WaterfallDialog.cs: строка 113 в Microsoft.Bot.Builder.Диалоги.DialogContext.EndDialogAsync (результат объекта, CancellationToken CancellationToken отмены) в D:a1slibrariesMicrosoft.Bot.Builder .Диалоги DialogContext.cs: строка 192 в Microsoft.Bot.Builder.Диалоги.ComponentDialog.ContinueDialogAsync (DialogContext outerDc, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .Диалоги ComponentDialog.cs: строка 90 в Microsoft.Bot.Builder.Диалоги.DialogContext.ContinueDialogAsync(CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .ДиалогиDialogContext.cs: строка 145 в Microsoft.Бот.Конструктор.Диалоги.ComponentDialog.ContinueDialogAsync (DialogContext outerDc, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .Диалоги ComponentDialog.cs: строка 86 в Microsoft.Bot.Builder.Диалоги.DialogContext.ContinueDialogAsync(CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.Builder .Диалоги DialogContext.cs: строка 145 в WestRockServiceDeskBot.Bot.OnTurnAsync (ITurnContext turnContext, CancellationToken Отмена токена) в C:devPersonalWestRockServiceDeskBotWestRockServiceDeskBotBot.cs:line 54 у бота.Конструктор.Сообщество.Промежуточное программное обеспечение.Проверка орфографии.Программное обеспечение для проверки орфографии.OnTurnAsync (контекст ITurnContext, NextDelegate next, CancellationToken CancellationToken) в Microsoft.Bot.Builder.AutoSaveStateMiddleware.OnTurnAsync (ITurnContext turnContext, NextDelegate next, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.BuilderAutoSaveStateMiddleware.cs:line 60 у WestRockServiceDeskBot.Промежуточное программное обеспечение.SetLocaleMiddleware.OnTurnAsync (контекст ITurnContext, NextDelegate next, CancellationToken CancellationToken) в C:devPersonalWestRockServiceDeskBotWestRockServiceDeskBotMiddlewareSetLocaleMiddleware.cs:line 26 в Microsoft.Bot.Builder.ShowTypingMiddleware.OnTurnAsync (ITurnContext turnContext, NextDelegate next, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.BuilderShowTypingMiddleware.cs:line 71 в Microsoft.Bot.Builder.TranscriptLoggerMiddleware.OnTurnAsync (ITurnContext turnContext, NextDelegate nextTurn, CancellationToken Отмена токена) в D:a1slibrariesMicrosoft.Bot.BuilderTranscriptLoggerMiddleware.cs:line 108 в WestRockServiceDeskBot.Промежуточное программное обеспечение.Телеметрия.TelemetryLoggerMiddleware.OnTurnAsync (контекст ITurnContext, NextDelegate nextTurn, CancellationToken CancellationToken) в C:devPersonalWestRockServiceDeskBotWestRockServiceDeskBotMiddlewareTelemetryTelemetryLoggerMiddleware.cs:line 115 в Microsoft.Бот.Конструктор.Промежуточный набор.ReceiveActivityWithStatusAsync (ITurnContext turnContext, обратный вызов BotCallbackHandler, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.BuilderMiddlewareSet.cs:line 55 в Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync (ITurnContext turnContext, обратный вызов BotCallbackHandler, CancellationToken CancellationToken) в D:a1slibrariesMicrosoft.Bot.BuilderBotAdapter.cs:line 167

Хорошо, я нашел кое-что, что работает, я изменил код, чтобы использовать ReplyToActivityAsync() вместо использования ConnectorClient. Этот новый код выглядит следующим образом

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

Я все еще хотел бы узнать, почему мой исходный код не работает с Botframework v4

Ответ №1:

Я полагаю, что это связано с изменениями аутентификации в SDK bot Framework, в котором это может иногда происходить, если идентификатор приложения и пароль не настроены в app web. Вы можете убедиться, что они настроены в веб-настройках вашего приложения.

введите описание изображения здесь

Если оно не настроено и вам нужно получить эти значения, вы можете узнать, как это сделать, из инструкций в этом блоге.