dialogflow-es - dialogflow api 中缺少 401 个未经授权的身份验证参数
问题描述
我使用 Dialogflow api v1 开发了聊天机器人。代码没有变化。但是,现在来自服务器的响应是“code”:401,“errorType”:“unauthorized”,“errorDetails”:“缺少身份验证参数。我使用以下网址检查了 Postman。https: //api.dialogflow.com /v1/query?v=519794&lang=en&query=hi&sessionId=519794&Content-Type=application/json并在不记名令牌中提供了我的客户端访问令牌。当我尝试使用 post 方法时出现错误。但是,当我使用 GET 方法时它起作用了邮递员。所以,我在我的 javascript 代码中尝试了相同的代码并得到 401 未经授权的错误。这里有什么问题?
解决方案
我已经使用以下代码解决了这个问题。
在 Ajax 调用中使用 GET 方法而不是 POST 并在 data 参数中删除 JSON.stringify。
var text = "你好"; var iRandom = Math.floor((Math.random() * 10000000) + 1);
$.ajax({
type: "GET",
url: "https://api.api.ai/v1/query?v=324233",
contentType: "application/json; charset=utf-8",
dataType: "json",
headers: {
"Authorization": "Bearer "+accessToken
},
data: { query: text, lang: "en", sessionId: iRandom},
success: function(data) {
//desired action
},
error: function() {
console.log("Internal Server Error");
}
});
另一种替代解决方案:
我保留了早期版本。
var iRandom = Math.floor((Math.random() * 10000000) + 1);
类型:POST,数据:JSON.stringify({ query: text, lang: "en", sessionId: iRandom}),
我没有将 iRandom 作为数字传递,而是将其作为字符串传递,并且能够从对话流中获得响应。
推荐阅读
- java - 收集器根据对象的属性创建列表列表
- sql - 从 SQL 中输入的日期获取去年的日期
- android - 系统声音无法正常工作
- activitynotfoundexception - 抛出 ActivityNotFoundException
- c# - 非 C# 插件规则/配置文件如何工作(在 CI - Jenkins 中)
- javascript - 如何使用 jasmine 在登录单元测试中接收登录状态?
- python - python是字符串的运算符行为
- amazon-web-services - 在 aws lambda 中有没有一种方法可以在调用处理程序之前触发一个钩子
- php - 无法在 codeigniter 的 MY_Form_validation 中调用自定义验证
- android - 样式化 android 复合自定义视图