当前位置: 首页 > 知识库问答 >
问题:

将查询字符串传递到Microsoft bot web频道

莘欣怿
2023-03-14

我们已经使用ms bot框架创建了一个bot,并希望向bot传递一些用户不会输入的数据。就像我在想,我们是否可以将查询字符串传递到下面的web频道。

https://webchat.botframework.com/embed/myformbot?s=XXXXXX

从bot api代码中,我可以以某种方式读取这个querystring参数。。。理想情况下,我知道我们不能控制上面的webchat链接,我们只允许访问bot api。但这是可能的,还是通过其他方式将用户未输入的数据传递给bot?

我们计划在iframe中显示指向不同站点的web频道url,并希望通过当前浏览的url来识别用户从何处开始对话。

谢谢西德哈特

共有1个答案

阎智
2023-03-14

这很容易使用BotFrame-Webchat库完成。只有几个步骤可以让你自己安装。

首先,包含一个div,其中包含一个id,供bot的webchat实例锚定。在本例中,id为“webchat”。

<!DOCTYPE html>

<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>Bot Chat</title>
    <style>
      #webchat,
      #webchat>* {
        border: 1px solid #333;
        float: left;
        min-height: 600px;
        height: 600px;
        position: relative;
        width: 460px;
      }
    </style>
  </head>

  <body>
    <div class="example">
      <h2>Back Channel Bot</h2>
      <div id="webchat"></div>

接下来,您将希望在html页面中包含以下脚本。请记住,您不应该将您的秘密存储在浏览器或客户端应用程序中。为了简单起见,这里包括了它。

事情是这样的。使用直通线路秘密(来自Azure机器人中的通道设置)生成令牌。令牌用于实例化bot网络聊天控件。在该示例中,用户的位置被保存在商店的有效载荷中作为活动对象。这将在任何POST_ACTIVITY事件(即用户与机器人交互)上发送到机器人。

    <script src='https://code.jquery.com/jquery-3.3.1.min.js'></script>
    <script src='https://cdn.botframework.com/botframework-webchat/master/webchat.js'></script>
    <script src='https://unpkg.com/simple-update-in/dist/simple-update-in.production.min.js'></script>
    <script>
      (async function () {
        // To talk to your bot, you should use the token exchanged using your Direct Line secret.
        // You should never put the Direct Line secret in the browser or client app.
        const res = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer ' + secret
          },
          json: true
        });
        const { token } = await res.json();

let location = window.location.href;

        let store = window.WebChat.createStore(
          {},
          ({ dispatch }) => next => action => {
            if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
              // simple-update-in is used to update the "action"
              action = window.simpleUpdateIn(action, ['payload', 'activity', 'channelData', 'location'], () => location);
            }
            return next(action);
          }
        );

        window.WebChat.renderWebChat({
          directLine: window.WebChat.createDirectLine({ token }),
          store,
          styleOptions: {
            botAvatarInitials: 'BF',
            userAvatarInitials: 'WC'
          }
        }, document.getElementById('webchat'));

        document.querySelector('#webchat > *').focus();
      })().catch(err => console.error(err));;
    </script>
  </body>
</html>

在bot端,bot正在侦听传入消息。“活动”对象将包含您发送的数据,其外观如下:

channelData: { clientActivityID: '15469824216440.emdrovn0f5h', location: 'http://localhost:3000/' }

希望得到帮助!

 类似资料:
  • 问题内容: 我正在查询页面上,用户在其中选择一个代表不同类型的值,每个值由一个ID标识。问题是使用WHERE IN方法从数据库中选择这些ID。 这是我的SQL语句 它将适用于一个单一值,例如。46,但如果值放在方括号中则不是,例如。(46)或(‘46’),即IN的方式。 我使用的是Visual Studio,它会自动生成访问表适配器以获取值的方法,所以我认为我必须通过SQL来做到这一点。 我正在传

  • 问题内容: 如何在sql查询中传递java字符串变量。我已经完成了所有JDBC连接。 我的SQL数据库查询是 它不起作用。但是,如果我执行以下代码,其工作原理 现在告诉我如何将变量名传递给sql查询以执行此操作。Jst告诉我如何将变量locationnames传递给comp.name。 我完整的Java函数如下所示:locationCombo表示在组合框中选择的项目。CropCombo也表示相同的

  • 问题内容: 是否存在通过查询字符串传递数组的标准方法? 需要明确的是,我有一个带有多个值的查询字符串,其中一个是数组值。我希望将该查询字符串值视为一个数组-我不希望该数组爆炸,以使其与其他查询字符串变量没有区别。 编辑: 根据@Alex的答案,没有标准的方法可以执行此操作,因此我的后续工作是什么才是 识别 我正在读取的参数同时是 PHP 和 Javascript 数组的简单方法? 用相同的名称命名

  • 我试图在php脚本和c程序之间传递参数。我的php脚本如下所示 然后我想我的c程序返回给我一个字符串(但我真的不知道怎么做),你能帮忙吗?

  • 问题内容: 我正在使用AngularJS路由,并试图查看如何使用查询字符串(例如 )。Angular无法理解包含相同名称的键值对的路由: 问题答案: 我认为路由不适用于查询字符串。可以使用 如下方式而不是使用更RESTful的URL,然后按以下方式定义路由: 或许

  • 问题内容: 我正在尝试通过使用JSON格式的字符串初始化Javascript变量来加载数据表。如果我声明: 那么我的表将正确加载该行。 我尝试在脚本之前初始化Java字符串,然后将该对象传递给Javascript变量,如下所示: 我的表无法识别这一点,并且在尝试以这种方式传递行时无法加载该行。如何正确地将Java字符串传递给Javascript,以便我的表能够加载数据? 问题答案: 尝试使用引号。