0

首先,在 WebChat 的上下文中已经有很多关于这个主题的文章,并且有一些修复程序可以显示实现。这是一个非常好的链接:

此问题不是 WebChat 问题,而是 Direct Line 问题,它使用名为 LivePerson 的第 3 方来托管位于 Azure 中并通过 Direct Line 连接的机器人。因此,我不控制客户端代码(就像我使用 html/JavaScript 编写/托管机器人一样)。然而,这里的要点是“不要使用对话更新”,我在我的机器人中使用它,但请继续阅读......

我正在使用 Direct Line 在 LivePerson 中托管我的 Microsoft v4 Bot。该机器人使用自适应对话框来欢迎用户并在用户使用 OnConversationUpdateActivity() 发送任何输入之前向他们提问:

public RootDialog(IConfiguration configuration, IMiddlewareApiFacade middlewareApi, IBotTelemetryClient telemetryClient) : base(nameof(RootDialog))
{
    var rootDialog = new AdaptiveDialog(nameof(RootDialog))
    {
        ...
        Triggers = new List<OnCondition>()
            new OnConversationUpdateActivity()
            {
                Actions = WelcomeUserSteps("${Greeting()}")
            }
            ...
    }
    
    private static List<Dialog> WelcomeUserSteps(string message)
        {
            return new List<Dialog>()
            {
                // Iterate through membersAdded list and greet user added to the conversation.
                new Foreach()
                {
                    ItemsProperty = "turn.activity.membersAdded",
                    Actions = new List<Dialog>()
                    {
                        // Note: Some channels send two conversation update events - one for the Bot added to the conversation and another for user.
                        // Filter cases where the bot itself is the recipient of the message. 
                        new IfCondition()
                        {
                            Condition = "$foreach.value.name != turn.activity.recipient.name",
                            Actions = new List<Dialog>()
                            {
                                new SendActivity(message),
                                new BeginDialog(nameof(WelcomeDialog))
                            }
                        }
                    }
                }
            };
        }
    }
}

当使用模拟器在本地运行机器人或从 Azure 中的测试网络聊天运行机器人时,这可以正常工作,但在 LivePerson 中不起作用。

我已经成功连接并测试了 LivePerson 通过 Direct Line 与机器人的连接: 在此处输入图像描述

但是,当机器人启动并通过 LivePerson 的聊天访问它时,不会触发欢迎消息(应该有一条欢迎消息,然后是来自机器人的问题,红色方块在哪里): 在此处输入图像描述

查看 LivePerson 的文档,他们有一个“欢迎活动”部分,该部分讨论了机器人向用户问候配置为“聊天”的机器人(这是该机器人在 LivePerson 中的配置方式)

仔细观察聊天对话机器人是如何开始聊天的,文档指出:

当聊天被路由到代理时,聊天对话被视为开始。最佳做法是让代理提供第一个响应。在这种情况下,没有来自消费者的文本需要解析,因此默认的“WELCOME”事件被用作机器人提示用户提供输入和进行对话的起点。确保您的机器人中有一个“入口点”来响应新聊天客户发送的默认“欢迎”操作。

然后这段代码:

{
  // ...
  "type": "message",
  "text": "",
  "channelData": {
    "action": {
      "name": "WELCOME"
    }
  }
}

仅供参考:LivePerson 上下文中的“代理”可以指真实的人或机器人。两者都被视为“代理”,当您向 LivePerson 添加新代理时,可用的类型之一是“机器人”。所以在这个例子中,代理人并不意味着人。

我不太确定我的机器人(使用机器人框架 v4 和自适应对话框)需要如何配置/实现以具有响应此 WELCOME 消息的入口点。

我确实知道我不能使用conversationUpdate(或在自适应对话框中使用OnConversationUpdateActivity()),但我不太确定我需要使用哪个自适应对话框(或其他)以某种方式拦截要发送到我的机器人的json WELCOME消息LivePerson... OnEventActivity()?消息活动()?还有什么?

谢谢!

4

1 回答 1

0

答案总结在我想通后写的博文中: https ://www.michaelgmccarthy.com/2021/03/13/sending-a-welcome-message-in-the-v4-bot-framework -通过直接线路和现场人员/

于 2021-03-13T17:32:05.503 回答