-1

我正在尝试整合反向渠道并获取价值。 https://github.com/Microsoft/BotFramework-WebChat/tree/master/samples/15.d.backchannel-send-welcome-event

我也试过这个。从 Microsoft Bot Framework 获取 URL Referer 和 Origin 标头

我还尝试反序列化仍然无法获取数据的值。我怎样才能获得语言值?

这是我的示例代码:

        var userinfo = {
            id: 'user-id',
            name: 'user name',
            locale: 'es'
        };
        var botConnection = new BotChat.DirectLine({
            token: 'mytoken',
            user: userinfo,
            locale: 'es'
        });
        BotChat.App({
            botConnection : botConnection,
            user: userinfo,
            bot: { id: 'bot-id', name: 'bot name' },

        }, document.getElementById('botDiv'));
        botConnection
            .postActivity({
                from: userinfo,
                name: 'ConversationUpdate',
                type: 'event',
                value: '',
            })
            .subscribe(function (id) {
                console.log('"trigger ConversationUpdate" sent');
            });

这样做的目的是我想将语言环境从我的网站传递给我的机器人。就像在模拟器中一样。 在此处输入图像描述 谢谢!

4

1 回答 1

1

我建议将语言环境添加到后台通道事件的通道数据中。这样,在机器人端,您可以简单地访问传入活动中的语言环境,而无需在收到事件时反序列化任何 JSON 对象。请注意,您也可以使用文本或值来代替 channelData。请参阅下面的代码片段。

BotChat 返回频道事件

// Send back channel event
botConnection.postActivity({
    from: userinfo,
    name: 'setLocale',
    type: 'event',
    channelData: "es"
}).subscribe(id => console.log(id));

机器人 - C#

public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{

    if (turnContext.Activity.Type == ActivityTypes.Message)
    {
        ...
    } else if (turnContext.Activity.Type == "event") {
        // Check for `setLocale` events
        if (turnContext.Activity.Name == "setLocale") {
            await turnContext.SendActivityAsync($"Your locale is set to {turnContext.Activity.ChannelData}");
        }
    }
    else
    {
        await turnContext.SendActivityAsync($"{turnContext.Activity.Type} event detected");
    }
}

希望这可以帮助!

于 2019-04-02T21:34:40.400 回答