You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过DialogFlow JavaScript SDK从Angular应用传递额外参数

在Angular中通过DialogFlow JavaScript SDK传递额外参数

看起来你已经找对了方向——client.textRequest确实支持通过第二个参数传递自定义配置,但参数结构需要调整一下才能让DialogFlow正确识别这些额外参数。我来帮你修正代码并说明细节:

修正后的完整代码示例

// 定义包含额外参数的options
$scope.options = {
  originalRequest: {
    data: { 
      userid: "testid", 
      client: "testclient" 
    }
  }
};

// 初始化ApiAiClient
var client = new ApiAi.ApiAiClient({accessToken: 'myapikey'});

// 发送消息的方法
$scope.sendMessage = function() {
  return client.textRequest($scope.messageText, $scope.options)
    .then((response) => {
      // 处理DialogFlow的响应
      $scope.messages.push({
        text: response.result.fulfillment.speech,
        isBot: true
      });
      // 清空输入框
      $scope.messageText = '';
    })
    .catch((error) => {
      // 处理错误
      console.error('DialogFlow请求出错:', error);
    });
};

关键细节说明

  • 参数结构: 自定义的元数据需要嵌套在originalRequest.data下,这是DialogFlow API约定的接收自定义客户端数据的位置,直接写data字段是不被识别的。
  • 在DialogFlow中获取参数: 你可以在意图的响应或条件判断中,通过#originalRequest.data.userid#originalRequest.data.client这样的格式引用这些参数。
  • 错误处理: 建议加上catch块处理请求失败的情况,方便调试。

如果你需要传递上下文参数(比如让DialogFlow记住用户的某些状态),还可以在options里添加contexts数组,比如:

$scope.options = {
  originalRequest: {
    data: { userid: "testid", client: "testclient" }
  },
  contexts: [
    {
      name: "user_session",
      parameters: { userid: "testid" },
      lifespan: 5 // 上下文保留的轮次
    }
  ]
};

这样就能在后续的意图中直接通过#user_session.userid引用这个参数啦。

内容的提问来源于stack exchange,提问作者M Fick

火山引擎 最新活动