如何通过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




