Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在向bot触发消息之前,问候消息不会显示_Javascript_Botframework_Chatbot_Web Chat - Fatal编程技术网

Javascript 在向bot触发消息之前,问候消息不会显示

Javascript 在向bot触发消息之前,问候消息不会显示,javascript,botframework,chatbot,web-chat,Javascript,Botframework,Chatbot,Web Chat,我正在尝试发送问候信息并询问用户的姓名。机器人试图向用户询问一些问题,然后通过重定向链接帮助他。它在emulator或Microsoft online测试工具中工作得非常完美,但一旦将bot集成到ASP.NET应用程序中,问候语就不会显示 $.ajax({ url: 'https://directline.botframework.com/v3/directline/tokens/generate', method: "POST"

我正在尝试发送问候信息并询问用户的姓名。机器人试图向用户询问一些问题,然后通过重定向链接帮助他。它在emulator或Microsoft online测试工具中工作得非常完美,但一旦将bot集成到ASP.NET应用程序中,问候语就不会显示

$.ajax({
            url: 'https://directline.botframework.com/v3/directline/tokens/generate',
            method: "POST",
            headers: {
                "Authorization": "Bearer SECRET GOES HERE"
            },
        }).then(function (response) {
            const { token } = JSON.parse(JSON.stringify(response));
            const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
                if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
                    dispatch({
                        type: 'WEB_CHAT/SEND_EVENT',
                        payload: {
                            name: 'webchat/join',
                            value: { language: window.navigator.language }
                        }
                    });
                }

                return next(action);
            });

            window.WebChat.renderWebChat(
                {
                    directLine: window.WebChat.createDirectLine({ token }),
                    store
                },
                document.getElementById('chatBotFrame')
            );

            document.querySelector('#chatBotFrame > *').focus();
        }).catch(function (err) {
            console.error(err);
        });
我已经搜索并找到了一些有用的链接,但我仍然无法解决这个问题

我尝试了两种不同的方法,
iframes
window.WebChat.renderWebChat
,但在这两种情况下都会出现问题,在我向bot发送消息之前,问候消息不会显示

正如在其他帖子中所讨论的,所有的解决方案都到此为止,因此聊天机器人的集成必须在javascript或Node中实现;并且,需要向聊天机器人发送一个自定义事件(作为触发器)。但是,虽然我的bot已部署在个人windows服务器上,但我不知道如何配置它并设置
directLine
参数

正如已经发布的,可能的解决方案如下代码所示,但我无法配置和设置获取令牌所需的参数

消息传递端点:


网络聊天:发送欢迎活动
html,
身体{
身高:100%;
}
身体{
保证金:0;
}
#网络帽{
身高:100%;
宽度:100%;
}
(异步函数(){
//我不知道这行代码必须如何设置才能实现令牌
//------------------------------------------------------
const res=等待取数('https://xxx.yyy.com/directline/token“,{方法:'POST'});
const{token}=await res.json();
//------------------------------------------------------
const store=window.WebChat.createStore({},({dispatch})=>next=>action=>{
如果(action.type==='DIRECT\u LINE/CONNECT\u completed'){
派遣({
键入:“网络聊天/发送事件”,
有效载荷:{
名称:'webchat/join',
值:{language:window.navigator.language}
}
});
}
返回下一步(操作);
});
window.WebChat.renderWebChat(
{
directLine:window.WebChat.createDirectLine({token}),
商店
},
document.getElementById('webchat')
);
document.querySelector(“#webchat>*”).focus();
})().catch(err=>console.error(err));
最后,我必须强调,Bot在在线测试工具和模拟器上运行良好,但错误发生在asp.net应用程序的集成中

$.ajax({
            url: 'https://directline.botframework.com/v3/directline/tokens/generate',
            method: "POST",
            headers: {
                "Authorization": "Bearer SECRET GOES HERE"
            },
        }).then(function (response) {
            const { token } = JSON.parse(JSON.stringify(response));
            const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
                if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
                    dispatch({
                        type: 'WEB_CHAT/SEND_EVENT',
                        payload: {
                            name: 'webchat/join',
                            value: { language: window.navigator.language }
                        }
                    });
                }

                return next(action);
            });

            window.WebChat.renderWebChat(
                {
                    directLine: window.WebChat.createDirectLine({ token }),
                    store
                },
                document.getElementById('chatBotFrame')
            );

            document.querySelector('#chatBotFrame > *').focus();
        }).catch(function (err) {
            console.error(err);
        });
截图: 左边的照片来自网站应用程序,右边的照片来自测试环境:


编辑(1):标题已更新,添加了屏幕截图。

下面的代码修复了令牌生成和发送事件以触发web应用程序内的聊天机器人的问题

$.ajax({
            url: 'https://directline.botframework.com/v3/directline/tokens/generate',
            method: "POST",
            headers: {
                "Authorization": "Bearer SECRET GOES HERE"
            },
        }).then(function (response) {
            const { token } = JSON.parse(JSON.stringify(response));
            const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
                if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
                    dispatch({
                        type: 'WEB_CHAT/SEND_EVENT',
                        payload: {
                            name: 'webchat/join',
                            value: { language: window.navigator.language }
                        }
                    });
                }

                return next(action);
            });

            window.WebChat.renderWebChat(
                {
                    directLine: window.WebChat.createDirectLine({ token }),
                    store
                },
                document.getElementById('chatBotFrame')
            );

            document.querySelector('#chatBotFrame > *').focus();
        }).catch(function (err) {
            console.error(err);
        });

不清楚你说的是什么,实际行为是什么。你的标题说有一个延迟,但在底部你说有一个错误。你可以发布你正在经历的截图吗?谢谢你的评论@KyleDelaney。我添加了所需的屏幕截图,并更新了描述以使其清晰。据我所知,模拟器中聊天机器人的行为是不同的,问候语不会显示,因为它需要触发自定义事件,我想我已经在上面发布的链接中找到了解决方案,我不知道如何使用javascript集成bot,也不完全确定参数。请看一下,了解令牌生成如何影响会话更新的时间。听起来好像在生成令牌的调用中没有包含用户属性。示例代码中包含了xxx.yyy.com。这是您托管的实际站点的占位符吗?端点调用是否生成令牌?我可以在屏幕截图中看到,您能够成功连接到Direct Line,因此您必须以某种方式获得令牌。xxx.yyy.com是机器人托管位置的占位符。我已经阅读了你在之前评论中提到的帖子。我当前的问题是:“”没有生成令牌。假设端点是,应该使用哪个url来检索令牌?为什么要尝试通过调用bot端点来生成直连令牌?您还没有回答我关于端点调用是否生成令牌的问题。如果它没有生成令牌,那么您如何连接到对话?您可以在这里阅读有关如何生成令牌的所有内容:我也有同样的问题。这对我有用。谢谢你Mahyar