gpt4 book ai didi

javascript - BotFramework Webchat v4 通过 javascript 发回消息

转载 作者:行者123 更新时间:2023-12-04 13:16:24 32 4
gpt4 key购买 nike

我需要帮助使用来自 Microsoft 的 BotFramework 的 webchat v4 通过 Javascript 将消息发送回机器人。

我的机器人代码是用 C# (.NET Framework) 编写的,但在我的场景中的某个时刻,我需要触发一些 javascript 来向用户询问位置。我该怎么办?

  • 我发送了 类型的事件事件
  • 店铺 从机器人中,我捕捉到了上述事件(这是我的代码):

  • const store = window.WebChat.createStore({},
    ({ dispatch }) => next => action => {
    //console.log('action of type ' + action.type);

    if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
    var activityOut = action.payload.activity;

    if (activityOut.type === 'message') {
    // Store message

    return next(action);
    }

    if (activityOut.type === 'event') {
    // Handle based on event type
    if (activityOut.name === 'getLocation') {
    if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
    else
    {
    console.log("Geolocation is not supported by this browser.");
    }
    } else {
    return next(action);
    }
    }
    }
    else if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
    var activityIn = action.payload.activity;

    if (activityIn.type === 'message') {
    // Store message
    }

    return next(action);
    }
    else {
    return next(action);
    }
    });
  • 我将信息发送给机器人(这里是位置):

  • function showPosition(position) {
    console.log("Latitude: " + position.coords.latitude + " Longitude: " + position.coords.longitude);

    var v = position.coords.latitude +';' + position.coords.longitude;
    store.dispatch({
    type: 'WEB_CHAT/SEND_MESSAGE_BACK',
    payload:
    {
    text: v,
    value : v
    }
    });
    }

    我也尝试过使用“WEB_CHAT/SEND_MESSAGE”,但它并没有改变任何东西。

    有关更多信息,这是我连接到机器人的一段代码:

    window.WebChat.renderWebChat(
    {
    directLine: window.WebChat.createDirectLine({
    secret: 'my secret (will change to a token of course)'
    }),
    store,
    userID: chatUser.id,
    username: chatUser.name,
    locale: 'fr-FR',
    styleOptions
    },
    document.getElementById('BotChatGoesHere')
    );

    这是我在执行此操作时遇到的异常:
    Console error
    Activity send

    已经感谢任何可以帮助我的人!

    最佳答案

    我认为您对代码的设计过于轻微。您需要做的就是过滤传入的事件,然后调用您的函数。请参见下面的示例。

    dialog.js(节点机器人示例):将简单事件作为瀑布步骤发送。我将过滤的“名称”属性分配给 channelData .

    async eventStep ( stepContext ) {
    let reply = { type: ActivityTypes.Event };
    reply.channelData = { name: 'getLocation' };

    await stepContext.context.sendActivities( reply );
    return await stepContext.next();
    }

    createStore(): 我过滤 event传入事件的类型。如果 channelData属性(property)包括 name使用正确的值,然后 showPosition函数被调用。

    const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
    if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
    const { activity } = action.payload;

    if ( activity.type === 'event' ) {
    // Handle based on event type
    if ( activity.channelData.name === 'getLocation' ) {
    if ( navigator.geolocation ) {
    await navigator.geolocation.getCurrentPosition( showPosition );
    }
    else {
    console.log( "Geolocation is not supported by this browser." );
    }
    }
    }
    }

    return next(action);
    });

    显示位置():我将功能定位在网络聊天渲染器之后。我还演示了发送 SEND_MESSAGE , SEND_MESSAGE_BACK , SEND_POST_BACK , 和 SEND_EVENT .在每种情况下,数据在事件中的排列方式是不同的。见下文。

      [...]

    document.getElementById('BotChatGoesHere')
    );

    function showPosition( position ) {
    const message = "Latitude: " + position.coords.latitude + " Longitude: " + position.coords.longitude;

    store.dispatch( {
    type: 'WEB_CHAT/SEND_MESSAGE',
    payload:
    {
    text: message,
    channelData: { latitude: position.coords.latitude, longitude: position.coords.longitude }
    }
    } );

    store.dispatch( {
    type: 'WEB_CHAT/SEND_MESSAGE_BACK',
    payload:
    {
    text: message,
    value: { latitude: position.coords.latitude, longitude: position.coords.longitude }
    }
    } );

    store.dispatch( {
    type: 'WEB_CHAT/SEND_POST_BACK',
    payload: { value: { latitude: position.coords.latitude, longitude: position.coords.longitude } }
    } );

    store.dispatch( {
    type: 'WEB_CHAT/SEND_EVENT',
    payload:
    {
    name: 'EVENT_GET_POSITION',
    value: { latitude: position.coords.latitude, longitude: position.coords.longitude }
    }
    } );
    }
    SEND_MESSAGE :作为消息发送;有文本字段;向用户展示; activity.channelData 中的数据

    enter image description here
    SEND_MESSAGE_BACK :作为消息发送;有文本字段;不向用户显示; activity.value 中的数据

    enter image description here
    SEND_POST_BACK :作为消息发送;没有文本字段;不向用户显示; activity.value 中的数据

    enter image description here
    SEND_EVENT :作为事件发送;没有文本字段;不向用户显示; activity.name 中的事件名称和 activity.value 中的数据

    enter image description here

    希望有帮助!

    关于javascript - BotFramework Webchat v4 通过 javascript 发回消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59987684/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com