Typescript Dialogflow&;快速完成

Typescript Dialogflow&;快速完成,typescript,express,google-api,dialogflow-es,dialogflow-es-fulfillment,Typescript,Express,Google Api,Dialogflow Es,Dialogflow Es Fulfillment,当其他直通电话正常工作时,从dialogflow获得响应时,我遇到了一个问题 我知道这是代理的问题,但我不确定这是什么问题,也不知道如何解决,这就是为什么我在这里问 需要注意的要点 此代码正在添加到现有已测试的express应用程序中 一直在使用 可以找到Dialogflow FullFilment模板webhook 控制台成功输出我们有小时则不继续 如果注释行57到62(if部分)和取消注释行56代码将按预期响应 问题应在代理.hours功能中 您也尝试过这个.currentlyOpen()

当其他直通电话正常工作时,从dialogflow获得响应时,我遇到了一个问题

我知道这是代理的问题,但我不确定这是什么问题,也不知道如何解决,这就是为什么我在这里问

需要注意的要点

  • 此代码正在添加到现有已测试的express应用程序中
  • 一直在使用
  • 可以找到Dialogflow FullFilment模板webhook
  • 控制台成功输出<代码>我们有小时则不继续
  • 如果注释行
    57到62(if部分)
    和取消注释行
    56
    代码将按预期响应
  • 问题应在
    代理.hours
    功能中
  • 您也尝试过
    这个.currentlyOpen()==true
非常感谢你

dialogflow.ts

编辑:
更新代码以匹配注释。在出现问题时添加注释

问题在于,
与您认为的(或希望的)不同,这是由于如何调用
hours()
以及如何调用
具有不同的含义,具体取决于调用方式。进入血淋淋的细节,但简而言之(适用于你):

  • 被调用的函数将
    this
    应用于全局对象,而不是
    this
    的词汇绑定版本(即类内
    this
    的值)
  • 要获取此的词汇绑定版本,需要使用
    bind()
    将值绑定到函数,或者使用箭头函数进行调用
在您的情况下,这意味着您应该使用以下内容注册意图处理程序

intentMap.set('Hours', agent => this.hours(agent));

问题在于,
this
不是您认为的(或希望的)它是什么,这是由于如何调用
hours()
,以及如何调用
this
有不同的含义,这取决于它的调用方式

  • 被调用的函数将
    this
    应用于全局对象,而不是
    this
    的词汇绑定版本(即类内
    this
    的值)
  • 要获取此的词汇绑定版本,需要使用
    bind()
    将值绑定到函数,或者使用箭头函数进行调用
在您的情况下,这意味着您应该使用以下内容注册意图处理程序

intentMap.set('Hours', agent => this.hours(agent));

刚刚将
currentlyOpen
移出类以修复部分问题,它现在调用函数。仍然非常不确定如何将
aiassist
数据放入此函数中我们看不到行号,因此有点难以理解您试图说的问题是什么。@希望我的编辑有帮助。很抱歉xjust将
currentlyOpen
移出类以修复部分问题,它现在调用该函数。仍然非常不确定如何将
aiassist
数据放入该函数中我们看不到行号,因此有点难以理解您试图说的问题是什么。@希望我的编辑有帮助。很抱歉x
intentMap.set('Hours', agent => this.hours(agent));