从 Dialogflow v1 迁移到 Dialogflow v2 时 HTTP 请求格式有何变化

what are the changes in HTTP request format while migrating from Dialogflow v1 to Dialogflow v2

下面的 python 代码是我用作查询 dialogflow 的 http 请求的代码-V1.I 想迁移到 v2.But 我在更改参数时遇到问题到 v2 命名。

headers = {
'Authorization': 'Bearer CLIENT_ACCESS_TOKEN'
}

params = (
    ('v', '20150910'),
    ('lang', 'en'),
    ('query', 'query_str'),
    ('sessionId', "10000"), #UNIQUE ID
    ('timezone', 'America/New_York'),
    )

response = requests.get('https://api.dialogflow.com/v1/query', headers=headers, params=params)

帮我把上面的DFv1代码迁移到DFv2格式 下面是我试过的

headers = {
'Authorization': 'Bearer #Client access token'
}

params = (
    ('queryInput.text.languageCode ', 'en'),
    ('detectIntent', 'query_str'),
    ('session', 'projects/your-project-id/agent/sessions/session-id'),  
    ('queryParams.timeZone ', 'America/New_York'),
    )

response = requests.get('https://api.dialogflow.com/v2/query', headers=headers, params=params)

我不确定 DFv2.The 响应中的会话 ID 到底是什么,这里不是任何格式,因为 expected.Below 是响应

b'Dialogflow@-moz-keyframes 闪烁 {0%{opacity:1;} 50%{opacity:0;} 100%{opacity:1;}}@-webkit-keyframes 闪烁 {0%{opacity:1;} 50%{opacity:0;} 100%{opacity:1;}}@-ms-keyframes 闪烁 {0%{opacity:1;} 50%{opacity:0;} 100%{opacity:1;}}@关键帧闪烁 {0%{opacity:1;} 50%{opacity:0;} 100%{opacity:1;}}@-moz-keyframes fadein {from{opacity:0;} to {opacity:1;}} @-webkit-keyframes fadein{from{opacity:0;} to {opacity:1;}}@-ms-keyframes fadein {from{opacity:0;} to {opacity:1;}}@keyframes fadein {from{不透明度:0;}到{不透明度:1;}}#loading-screen{背景:#fff;位置:固定;顶部:0;左:0;高度:100%;宽度:100%; z 指数:999999;不透明度:1;过滤器:alpha(不透明度=100); -webkit-transition:不透明度 500ms 缓和;过渡:不透明度 500 毫秒;}#loading-screen #logo {显示:块;宽度:109px;高度:39px;背景重复:不重复;背景图片:url(\'https://www.gstatic.com/dialogflow-console/common/assets/img/logo@2x-black.png\');背景大小:包含;位置:绝对;顶部:50%;左:50%;边距:-20px 0 0 -55px; -moz-transition:all 1s 缓入缓出; -webkit-transition:all 1s 缓入缓出; -o-transition:all 1s 缓入缓出; -ms-transition:all 1s 缓入缓出; transition:all 1秒缓入缓出; -moz-animation:blink 正常 2s 无限缓入缓出; -webkit-animation:blink 正常 2s 无限缓入缓出; -ms-animation:blink 正常 2s 无限缓入缓出; animation:blink 正常 2 秒无限缓入缓出;}#loading-screen #assistant-preview {width: 400px;高度:200px;位置:绝对;顶部:50%;左:50%;边距:-120px 0 0 -200px;文本对齐:居中;背景:白色; -webkit 动画:淡入 500 毫秒; -moz 动画:淡入 500 毫秒; -ms 动画:淡入 500 毫秒;动画:淡入 500 毫秒;}#loading-screen #assistant-preview .logo {width: 46px;高度:46px;背景重复:不重复;背景图像:url(\'https://www.gstatic.com/dialogflow-console/common/assets/img/logo_icon_48dp.png\');背景大小:包含;位置:绝对; left:45%;}#loading-screen #assistant-preview .title {margin-top: 100px;字体大小:23px;}#loading-screen #assistant-preview .progress-container {margin: 25px 50px;}#loading-screen #assistant-preview .progress-container md-progress-linear, #loading-screen #assistant -preview .progress-container md-progress-linear .md-container,#loading-screen #assistant-preview .progress-container md-progress-linear .md-bar,#loading-screen #assistant-preview .progress-container md-progress-linear .md-dashed {height: 2px;}window.INTERNALIZED = true; window.DF_FLAGS = {email: "", 后端: "https:\/\/api.dialogflow.com", opBackend: "https:\/\/dialogflow.clients6.google.com", apiKey: "AIzaSyD1dO8oRagJkmtkSJ9oLI289jIT8M4Zk5s",}; window.saveAs = 未定义; window.i18n = 未定义; window.d3 = 未定义; window.addStyleString = function(str){var node = document.createElement(\'style\'); node.innerHTML =海峡; document.head.appendChild(节点);};window.dataLayer = window.dataLayer || [];函数 gtag(){dataLayer.push(参数);}gtag(\'js\', new Date()); gtag(\'config\', \'UA-98266305-2\'); gtag(\'config\', \'UA-98266305-8\');更新 Google 上的操作...var loadDeferredStyles = function() {var addStylesNode = document.getElementById("deferred-styles") ; var 替换 = document.createElement("div"); replacement.innerHTML = addStylesNode.textContent; document.body.appendChild(替换); addStylesNode.parentElement.removeChild(addStylesNode);}; var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; if (raf) {raf(function() { window.setTimeout(loadDeferredStyles, 0); });} else {window.addEventListener(\'load\', loadDeferredStyles);}if (window.location.hash.endsWith(\'assistant_preview\')) {setTimeout(function () {document.getElementById(\'assistant-preview\').style.display = \'block\';}, 200); } else {document.getElementById(\'logo\').style.display = \'block\';}window.WIZ_global_data = {"nQyAE":{"EtBwpb" :"false","He6Wuc":"false","xJW1Ve":"true","tm22M":"false","aVzR2d":"false","ox9Ggd":"false","Dk1LPb":"false","CXZ8Fd":"false","c9LSR":"true","tvMknd":"true","eiw7Vc":"false","tLPClf":"false","lAsnAb":"false" ,"buULxf":"false","adjIR":"false"}};var AF_initDataKeys = []\n; var AF_dataServiceRequests = {}; var AF_initDataChunkQueue = [];变量AF_initDataCallback;变量AF_initDataInitializeCallback;如果 (AF_initDataInitializeCallback) {AF_initDataInitializeCallback(AF_initDataKeys, AF_initDataChunkQueue, AF_dataServiceRequests);}如果 (!AF_initDataCallback) {AF_initDataCallback =函数(块){AF_initDataChunkQueue.push(块);};}'

请帮我解决这个问题。 谢谢

从 v1 到 v2 的转变并不是那么简单。您需要解决许多问题。 "query" API 调用已更改为 detectIntent API 调用。这会产生很多后果。

首先是URL路径发生了巨大的变化。请参阅上面链接的参考页面,但它需要更像

https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent

它还需要是 HTTPS POST 请求 - 您不能再使用 GET。

移动到POST也意味着请求正文更加复杂。 v1 在 JSON 结构的顶层具有大部分参数,而 v2 在嵌套的 JSON 对象中具有这些参数。因此,虽然 migration guide 说 "timezone" 被替换为 "queryParams.timeZone",但这实际上意味着您的 JSON 响应需要具有包含

的结构
{
  ...
  "queryParams": {
    ...
      "timeZone": "America/NewYork"
    ...
  }
  ...
}

正如您在评论中指出的那样,最大的变化是您需要做的事情 auth。您需要获得一个 Google 云服务帐户,并使用来自该帐户的秘密生成一个访问令牌,而不是像您对 v1 所做的那样使用单个共享密钥,该令牌通常具有有限的生存时间。好消息是 Google 云库或 SDK 将为您生成(有时管理)访问令牌。