gpt4 book ai didi

javascript - 如何在 botpress 自定义组件中获取 json 对象?

转载 作者:搜寻专家 更新时间:2023-10-31 23:44:14 25 4
gpt4 key购买 nike

我从 botpress 调用一个 api,它返回我需要在我的自定义组件中显示的对象列表,但我总是将它作为字符串 InfaLinkPreview.jsx: "[object Object]"如果我使用 console.log(JSON.parse(this.contentArray)) 我得到下面的异常

Uncaught SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
at eval (eval at render (VM449 lite.bundle.js:10992), <anonymous>:1:18)
at InfaLinkPreview.render (VM449 lite.bundle.js:10992)
at finishClassComponent (react-dom.development.js:14741)
at updateClassComponent (react-dom.development.js:14696)
at beginWork (react-dom.development.js:15644)
at performUnitOfWork (react-dom.development.js:19312)
at workLoop (react-dom.development.js:19352)
at renderRoot (react-dom.development.js:19435)
at performWorkOnRoot (react-dom.development.js:20342)
at performWork (react-dom.development.js:20254)
at performSyncWork (react-dom.development.js:20228)
at requestWork (react-dom.development.js:20097)
at scheduleWork (react-dom.development.js:19911)
at Object.enqueueSetState (react-dom.development.js:11169)
at Web.push../node_modules/react/cjs/react.development.js.Component.setState (react.development.js:335)

看来我在自定义组件中遗漏了一些东西。

显示 session.response 的服务器调用 api Node 和 Infa 链接预览 Node 屏幕截图 enter image description here

botpress 模拟器屏幕截图显示了 session.response 的值 enter image description heremodules\custom-component\src\content-types\infa-link-preview.js

const base = require('./_base');

function render(data) {
const events = [];
return [{
type: 'custom',
module: 'custom-component',
component: 'InfaLinkPreview',
text: data.text
}]
}

function renderElement(data, channel) {
if (channel === 'web' || channel === 'api') {
return render(data);
}
return []; // TODO
}

module.exports = {
id: 'custom_linkpreview',
group: 'Custom Component',
title: 'Infa Link Preview',
jsonSchema: {
description: 'Displays content of an array of KB/Docs/Video links',
type: 'object',
required: ['text'],
properties: {
text: {
type: 'string',
title: 'Message'
},
variations: {
type: 'array',
title: 'Alternates (optional)',
items: {
type: 'string',
default: ''
}
},
...base.typingIndicators
}
},
uiSchema: {
text: {
'ui:field': 'i18n_field',
$subtype: 'textarea'
},
variations: {
'ui:options': {
orderable: false
}
}
},
computePreviewText: formData => 'Infa Link Preview: ' + formData.text,
renderElement: renderElement
}

modules\custom-component\src\views\lite\components\InfaLinkPreview.jsx

export class InfaLinkPreview extends React.Component {
noAnswer = "Sorry no answer found."
contentArray = this.props.text

getTimestamp = () => {
let date = new Date();
let options = {
month: "short",
day: "numeric", hour: "2-digit", minute: "2-digit"
};
return date.toLocaleTimeString("en-us", options);
}
render() {
console.log("InfaLinkPreview.jsx: " + JSON.stringify(this.contentArray));
if (this.contentArray[0].query_status == "answer_available") {
return (
<div className="linkPreviewMain">
<p className="linkPreviewTitle"><b>{this.contentArray[0].answer[1].title}</b></p>
<p className="linkPreviewDesc">{this.contentArray[0].answer[1].content}</p>
<small className="linkPreviewTimestamp">{this.getTimestamp()}</small>
</div>
)
} else {
return (
<div className="infaTextMain">
<p className="infaTextMessage">{this.noAnswer}</p>
<small className="infaTextTimestamp">{this.getTimestamp()}</small>
</div>
)
}
}
}

注意:使用botpress v11.9.5

更新 网络响应.. 在这个 JSON 中 session.response 是正确的,但是 responses.text 作为 [object Object ]。因此,在向 InfaLinkPreview 组件提供 session.response 时,不知何故,这是错误的。

请帮我弄清楚 infa-link-preview.jsInfaLinkPreview.jsx 文件出了什么问题。

{
"responses": [{
"type": "custom",
"module": "custom-component",
"component": "InfaLinkPreview",
"text": "[object Object]"
}
],
"nlu": {
"entities": [],
"language": "en",
"slots": {},
"intent": {
"name": "none",
"confidence": 1,
"context": "global"
},
"intents": [{
"name": "none",
"confidence": 1,
"context": "global"
}
],
"errored": false,
"includedContexts": ["global"],
"ms": 738
},
"suggestions": [],
"state": {
"user": {},
"context": {},
"session": {
"lastMessages": [{
"eventId": "156183685440297440",
"incomingPreview": "hii",
"replyConfidence": 1,
"replySource": "dialogManager",
"replyDate": "2019-06-29T19:34:17.244Z",
"replyPreview": "#!custom_infatext--mgyiK"
}, {
"eventId": "156183685440297440",
"incomingPreview": "hii",
"replyConfidence": 1,
"replySource": "dialogManager",
"replyDate": "2019-06-29T19:34:17.260Z",
"replyPreview": "#!builtin_single-choice-FxG4EN"
}, {
"eventId": "156183686163322750",
"incomingPreview": "No",
"replyConfidence": 1,
"replySource": "dialogManager",
"replyDate": "2019-06-29T19:34:24.103Z",
"replyPreview": "#!custom_infatext-ZSUgWA"
}, {
"eventId": "156183686163322750",
"incomingPreview": "No",
"replyConfidence": 1,
"replySource": "dialogManager",
"replyDate": "2019-06-29T19:34:24.106Z",
"replyPreview": "#!custom_infatext-bO33uu"
}, {
"eventId": "156183688271887300",
"incomingPreview": "How to install secure agent on linux?",
"replyConfidence": 1,
"replySource": "dialogManager",
"replyDate": "2019-06-29T19:34:47.378Z",
"replyPreview": "#!custom_linkpreview-Zple6W"
}
],
"extractedSlots": {},
"response": [{
"answer": {
"1": {
"content": "this article provides details on how the nnn secure\nagent can be installed on linux the steps are as follows 1 log on to your\nnnn org and download the linux secure agent installer agent64_install bin 2 log on to linux server as non root user and create a directory the secure agent will be\ninstalled in this directory for example in our environment we logged on\nto linux machine as a non root user admin\nand created a directory mylinuxagent 3 copy the downloaded agent installer file to the linux server\nand run agent64_install bin as shown in the following screenshots 4 once the installation is complete navigate to mylinuxagent apps agentcore directory and start the secure agent using the command infaagent\nstartup 5 now run the command consoleagentmanager sh\n getstatus to get information on the status of the secure agent 6 the above screenshot indicates that the secure agent needs to be registered with your\nnnn org run consoleagentmanager sh configure and enter your nnn org username and password admin aaaa agentcore consoleagentmanager sh configure test nnn com test123\njava_home data admin mylinuxagent apps agentcore jre\nlogin succeeds admin aaaa agentcore consoleagentmanager sh isconfigured\njava_home data admin mylinuxagent apps agentcore jre\ntrue 7 using the commands shown in step 6 above the secure agent should get registered with your nnn org check the status of the secure agent a couple of times\nusing consoleagentmanager sh getstatus after some time the status should get changed to ready which indicates that\nthe secure agent has been installed successfully and is fully up and running 8 login to your nnn org configure runtime environments and click on the linux secure agent the process server\nand the data integration server should be up and running one thing to note is that in the above screenshot the\nprocess server component of the secure agent will be available only if your nnn org is licensed for\nnnn cloud realtime icrt",
"source": "KB",
"title": "Install nnn Secure Agent on Linux",
"url": "https://kb.nnn.com/howto/6/Pages/20/513826.aspx"
},
"2": {
"content": "silent install to specified target location can be done by using the following command agent64_install bin i silent duser_install_dir target directory ",
"source": "KB",
"title": "Install a Linux secure agent in a specified location using Silent install",
"url": "https://ncom/howto/6/Pages/19/5094.aspx"
},
"3": {
"actual_title": "Install and register the Secure Agent on Linux",
"content": "",
"name": {
"NERAction": ["install", "register"],
"NERComponent": ["secure_agent"],
"NEROS": ["linux"]
},
"source": "DOC",
"title": "Install and register the Secure Agent on Linux",
"url": "https://n/install-and-register-the-secure-agent-on-linux.html"
}
},
"query_status": "answer_available"
}
]
},
"temp": {}
},
"decision": {
"decision": {
"reason": "no suggestion matched",
"status": "elected"
},
"confidence": 1,
"payloads": [],
"source": "decisionEngine",
"sourceDetails": "execute default flow"
}
}

最佳答案

尝试以下 2 个更改,它应该可以工作

{
type: 'custom',
module: 'custom-component',
component: 'InfaLinkPreview',
text: data.text,
response: {
data
}
}

contentArray = JSON.parse(this.props.response.data.session.response)

关于javascript - 如何在 botpress 自定义组件中获取 json 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com