首页 > 解决方案 > 聊天机器人在模拟器和 Azure 门户中工作,但在网络聊天中无法正常启动

问题描述

我使用 SDK v4 在 Visual Studio 2019 中创建了我的 C# 核心聊天机器人。聊天机器人会显示一张英雄卡以开始聊天。它在 Bot 模拟器和 azure 门户中运行良好,但是当使用 iframe 将其实现到网络聊天中时,它不会显示英雄卡。在传递一条消息后,它会显示英雄卡两次,或者如果我们传递英雄卡按钮值然后它会去随波逐流。我不知道为什么会发生这种情况,我是这个领域的初学者,这是我的第一个聊天机器人。谁能帮我找出问题所在。提前致谢

DialogAndWelcome Bot.cs 中的代码

namespace Welcome.Bots

public class DialogAndWelcomeBot<T> : DialogBot<T>
    where T : Dialog
{
    public DialogAndWelcomeBot(ConversationState conversationState, UserState userState, T dialog, ILogger<DialogBot<T>> logger)
        : base(conversationState, userState, dialog, logger)
    {
    }

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        foreach (var member in membersAdded)
        {
            // Greet anyone that was not the target (recipient) of this message.
            // To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards for more details.
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                var response = MessageFactory.Text("Hi , I’m Alexa. How could I help you");
                await turnContext.SendActivityAsync(response, cancellationToken);
                await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken);
            }
            await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken);
        }
    }
}

DialogBot.cs 中的代码

public DialogBot(ConversationState conversationState, UserState userState, T dialog, ILogger<DialogBot<T>> logger)
        {
            ConversationState = conversationState;
            UserState = userState;
            Dialog = dialog;
            Logger = logger;
        }

    public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
    {
        await base.OnTurnAsync(turnContext, cancellationToken);

        // Save any state changes that might have occured during the turn.
        await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
        await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
    }

标签: botframeworkchatbot

解决方案


@Basil:我从您的查询中了解到您正在为您的 BOT 使用 Webchannel 并且您正在使用 IFrame。换句话说,如果我没记错的话,您有一个 html 文件,您在其中复制粘贴了 BOT 应用程序内 azure 门户中提供的嵌入代码,并用您的 BOT 密钥替换了嵌入代码中的占位符。即如下所示:https://webchat.botframework.com/embed/TestBotForOauthPrompt?s=<>' style='min-width: 400px; 宽度:100%;最小高度:500px;'>

假设我的理解是正确的,我认为 Iframe 是一种错误的方法,仅仅是因为它不是 Microsoft 推荐的用于网络频道的方法,而是您必须使用 StackOverflow POSTS 下面提供的答案:

  1. [BotFramework]:在 C# 中使用 SDK V4 开发的 BOT 中,有没有办法在英雄卡或自适应卡中显示 Oauth 提示?

我知道帖子中的查询没有谈论欢迎消息,但答案中有一句话 --- 修复:删除 iframe 并仅使用 WebChat 代码。这在任何地方都没有真正记录,但 iFrame 使用 botchat,它是 WebChat 的旧版本。

由于您使用的是 SDK V4 IFrame,因此不应使用上述帖子答案中提供的 HTML。

关于您的欢迎信息,我想您必须使用反向渠道支持才能在上述帖子中提供的网络渠道上工作。

最后,如果您希望您的网络频道 Bot 在所有浏览器中工作,那么您必须查看下面的 POST 答案相同:

  1. 如何解决使用 SDK V4 模板在 C# 中开发的 Web Chat Bot 的 HTML 页面未在 IE 11 浏览器中打开的问题?

希望这会有所帮助,并且我上面给出的理解是正确的。

所有这些答案都由 Microsoft 的支持工程师验证和工作并提供

问候 -ChaitanyaNG


推荐阅读