首页 > 解决方案 > 机器人获取频道数据

问题描述

团队,我使用机器人框架 SDK4 开发了一个机器人。我正在使用 Directline 频道与我的机器人进行通信。我的要求基于“requestWelcomeDialog”消息上的通道数据,我必须显示欢迎消息。

来自我的机器人客户端的代码:

BotChat.App({
    botConnection: botConnection,
    user: userOption,
    bot: { id: model.botId, name: model.botName },
    resize: 'window',
    speechOptions: speechOptions,
    locale: 'en',
    sendTypingIndicator: true,
}, document.getElementById('BotChatElement'));
PostBotConfiguration();
botConnection
    .postActivity({
        from: user,
        name: 'requestWelcomeDialog',
        type: 'event',
        value: { 'BotType': 'abcd' }
    })
    .subscribe(function (id) {
        setWCScreenChatPosition();
        model.botRender = true;
        console.log('"trigger requestWelcomeDialog" sent');
    });

在上面的代码中,我将 BotType 作为“abcd”发送。我正在尝试从我的机​​器人中读取此值。

我在机器人中的代码。

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    Utility util = new Utility();
    try
    {
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                BotChannelData cdata = new BotChannelData();
                turnContext.Activity.TryGetChannelData(out cdata);
            }
        }
    }
    catch
    {
    }
}

在这我总是得到空引用异常。

我可以知道我在这方面缺少什么吗?

标签: javascriptc#botframeworkbotsdirect-line-botframework

解决方案


第一个问题是您正在使用 Bot Chat。Bot Chat 是 Web Chat v3,它已被弃用。您应该根据repo中的说明使用 Web Chat v4 。

第二个问题是您试图使用OnMembersAddedAsync仅由对话更新活动触发的自定义事件来响应。您可以按照本期本示例中的说明了解如何发送和响应欢迎事件。C# 等效项如下所示:

if (turnContext.Activity.Name == "webchat/join")
{
    await turnContext.SendActivityAsync("Back Channel Welcome Message!");
}

推荐阅读