Botframework-solutions: 具有连接技能的 VA 在 WebChat 中无法正常工作

创建于 2019-06-12  ·  20评论  ·  资料来源: microsoft/botframework-solutions

我的设置是一个与技能模板连接的虚拟助手模板。 如果我尝试在 Bot Emulator 中运行我的 VA,并且在 localhost 和 Azure Endpoint 中正常工作,一切都很好,但是当我尝试在 Azure WebChat 中的 VA 中启动技能对话时,我没有任何响应,我的 VA 只是停下来回答我的问题。

emulator2
emulator1

最有用的评论

谢谢 - 我已经设法在网络聊天中重现。 奇怪 - 调查。

所有20条评论

我有完全相同的问题,我有我的主要机器人和以 azure 发布的技能,当我在模拟器内测试机器人时,它工作得非常好,对话被移交给技能机器人。 然而,一旦它在网络聊天中或在我的例子中使用直线的 React 应用程序中使用,机器人就会停止响应。 对我而言,这两种配置之间的唯一区别是我们在模拟器中使用 AppId 和 AppPassword,也许存在身份验证问题,导致部署到 Azure 时两个机器人无法相互通信?

appinsights 中唯一的信息是一个例外:POST 到机器人端点失败,HTTP 状态为 500,没有更多详细信息。

谢谢你 - 你能确认你可以浏览到你部署的技能的技能清单端点吗? 例如http://YOURSKILLNAME.azurewebsites.net/api/skill/manifest。 这将证明该技能工作正常。

谢谢你 - 你能确认你可以浏览到你部署的技能的技能清单端点吗? 例如http://YOURSKILLNAME.azurewebsites.net/api/skill/manifest。 这将证明该技能工作正常。

是的,我的清单是在线的,看起来还可以。 另外,如果我想在我的技能资源组中使用网络聊天,它也可以工作(当然,只有技能对话,没有 VA)。 这是我的清单: https :

一切都在 Bot Emulator 内工作,使用我的 VA 和 Skill Azure 端点,当尝试重定向技能时,问题就在 VA WebChat 内部。

只是仔细检查技能的应用程序服务是使用部署脚本创建的吗? 无论哪种方式,您都可以检查技能的应用服务上是否启用了 Web 套接字? 这被设置为技能部署的一部分。

image

只是仔细检查技能的应用程序服务是使用部署脚本创建的吗? 无论哪种方式,您都可以检查技能的应用服务上是否启用了 Web 套接字? 这被设置为技能部署的一部分。

是的,我在两个应用程序中都启用了 websocket,在我的 VA 和我的技能应用程序中。
我按照文档执行所有流程,使用部署脚本。

谢谢 - 帮助我们重现的最后一件事,你能分享你用来“托管” VA 机器人的网络聊天 html/js 代码 - 当然减去你的秘密! 请不要使用 Azure 页面中的网络聊天控件 - 而是连接网络聊天频道并通过该方法进行测试。

如果它对您有帮助,就我而言,我还激活了网络套接字并且可以访问清单,我使用的反应代码是:

import React, {Component} from 'react';
import {connect} from 'react-redux';
import { DirectLine } from 'botframework-directlinejs';
import ReactWebChat from 'botframework-webchat';


class HomePage extends Component {
  constructor(props) {
    super(props);

    this.directLine = new DirectLine({ token: '' });
  }
  render() {
    return (
      <div style={{height:'500px'}}>
        <ReactWebChat directLine={ this.directLine } 
                      styleOptions={{}} 
                      locale='fr-FR' 
                      />
      </div>
    );
  }
}

const mapStateToProps = state => ({
  userInfo: state.auth.userInfo,
});

export default connect(mapStateToProps)(HomePage);


我的清单: https://dave-skill-jooxter.azurewebsites.net/api/skill/manifest ,我没有使用 oauth 连接。

谢谢 - 帮助我们重现的最后一件事,你能分享你用来“托管” VA 机器人的网络聊天 html/js 代码 - 当然减去你的秘密! 请不要使用 Azure 页面中的网络聊天控件 - 而是连接网络聊天频道并通过该方法进行测试。

抱歉,我没有要共享的 html/js,因为我只是在门户中尝试使用 Azure 网络聊天。 那么,不能在这个网络聊天中运行吗? 我只想知道是我做错了什么还是正常的。

从我的角度来看,我已经对我的机器人进行了更多测试,似乎来自主机器人的消息已传递给技能机器人,但是由于某种原因,主机器人没有收到技能机器人的响应,这响应不会发送到聊天客户端。

谢谢 - 我已经设法在网络聊天中重现。 奇怪 - 调查。

谢谢大家,我昨天看了一下, @lzc850612能够奇怪地发现一个问题,只有在网络聊天中出现,在发送回网络聊天之前,来自技能的活动响应没有被正确“重写”,然后被拒绝。

我刚刚验证了 #1540 解决了我的 Bot 的问题。 虽然我们准备新.Skills NuGet包,你可以通过采取最新版本前进myget ,并在同一时间,它可能是明智采取从解决方案myget为他们建立起来了。

有一个关于如何安装的命令行示例,但您也可以在 Visual Studio 中添加一个包源到: https :

获得这些版本后,将 Bot 重新部署到 Azure 并重试。

感谢您帮助诊断此问题。

@darrenj对我来说它现在似乎正在工作,干得好!

太好了,谢谢你让我们知道。 我们将在本周末之前向 nuget 发布新的 .solutions 和 .skills 版本。

@darrenj对我来说,当我尝试构建我的技能项目时,我
“SkillEvents”不包含“SkillBeginEventName”的定义,MainDialog.cs,第 128 行。

删除此处理程序 - 最新的 Skills 包已移至使用 SemanticObject(通过 SkillMiddleware)而不是使用单独的事件,因此您无需继续处理此问题。

                case SkillEvents.SkillBeginEventName:
                    {
                        var state = await _stateAccessor.GetAsync(dc.Context, () => new SkillState());

                        if (dc.Context.Activity.Value is Dictionary<string, object> userData)
                        {
                            // Capture user data from event if needed
                        }

                        break;
                    }

删除此处理程序 - 最新的 Skills 包已移至使用 SemanticObject(通过 SkillMiddleware)而不是使用单独的事件,因此您无需继续处理此问题。

                case SkillEvents.SkillBeginEventName:
                    {
                        var state = await _stateAccessor.GetAsync(dc.Context, () => new SkillState());

                        if (dc.Context.Activity.Value is Dictionary<string, object> userData)
                        {
                            // Capture user data from event if needed
                        }

                        break;
                    }

谢谢,现在我又部署了,新的事情发生了。 助手没有等待我的回应,而是向我发送了多回合对话的所有回合(也在机器人模拟器中)。

emulator3

我认为它作为更新的一部分进行了另一个更改/修复。 @lzc850612 一觉醒来看看;-)

我们刚刚向 nuget 发布了新的 nuget 包,您可以更新和删除每日构建版本。 我们只是一些需要在您的助手中更改 MainDialog.cs 的逻辑,我认为这是您在上面看到的问题的根源。

RouteAsync删除此行

  // Pass the activity we have
  var result = await dc.ContinueDialogAsync();

WebChat 使用新的更改“开箱即用”。

确保您的所有 nuget 软件包都已更新……并且技能适用于网络聊天!

此页面是否有帮助?
0 / 5 - 0 等级