首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您能否在botkit中指定关键字的“作用域”,以便关键字可以在特定线程之后显示不同的内容?

您能否在botkit中指定关键字的“作用域”,以便关键字可以在特定线程之后显示不同的内容?
EN

Stack Overflow用户
提问于 2022-02-01 12:41:48
回答 1查看 22关注 0票数 0

我正在尝试构建的机器人具有这样的问题结构:

你想了解一下新闻还是天气?

-The天气

您想要检查哪个城市?

-New york

目标是为指定的关键字纽约,机器人回答特定的天气网址。如果你回答“新闻”,然后“纽约”,它会回答网址是关于纽约的新闻。bot中有许多可供选择的选项,因此很难找到将同名关键字分离的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2022-02-01 13:00:00

我给你举了一个你可以用的简单例子。

首先,我们定义了一种结构来保存每一个答案树和它的叶子。这是您可能使用的上下文的一种有意义的格式:

代码语言:javascript
复制
{
  q: "question",
  a: {
    "answer1": {
      q: "question2",
      a: {
        "answer1": {
          ...
        },
        "answer2": {
          ...
        }
      }
    },
    "answer2": {
      q: "question2",
      a: ...
    }
  }
}

这里有一些代码可以使简单的bot逻辑的主要逻辑更加清晰:

代码语言:javascript
复制
const ctx = {q:"Would you like to know about weather or news?",a:{weather:{q:"For which city do you want ot know the current weather? (london or berlin)",a:{london:{q:"Blablbla weather... London!"},berlin:{q:"Blablabla weather... Berlin!"}}},news:{q:"For which city do you want ot know the current news? (london or berlin)",a:{london:{q:"Blablbla news... London!"},berlin:{q:"Blablabla news... Berlin!"}}}}};

// create button with text and callback arguments
const createButton = (txt, cb) => {
  const b = document.createElement("button");
  b.innerText = txt;
  b.onclick = () => {
    [...document.body.querySelectorAll("button")].forEach(e => e.remove());
    cb(txt.toLowerCase())
  }
  document.body.appendChild(b);
}


// your main loop
const bot = (ctx) => {
  alert(ctx.q); // display / alert question
  const cb = (a) => (ctx = ctx.a[a], bot(ctx)); // callback goes to next inner context
  ctx.a && Object.keys(ctx.a).forEach(e => createButton(e, cb)); // create buttons
}

// startup call
bot(ctx);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70940765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档