0

此问题仅存在于 Converse API 中,使用 Webchat 时它可以正常工作。

检查数据库时,“createdOn”中的时间戳对于按顺序发送的消息完全相同,这就是顺序混淆的原因,例如:

  • 要求用户输入
  • 渲染用户输入后应显示的消息
  • 并且仅在之后呈现用户输入

奇怪的是,在查看数据库时,列中的createdOn属性与event列中的时间戳不同createdOn,实际上是用于对事件进行排序:

活动专栏

//Dropdown Component that asks user for input
{""type"":""custom"",""channel"":""api"",""direction"":""outgoing"",""createdOn"":""2021-04-13T12:45:54.924Z""}
//Answer that is supposed to be displayed after user input
{""type"":""text"",""channel"":""api"",""direction"":""outgoing"",""createdOn"":""2021-04-13T12:46:02.645Z““}
//User Input
{""type"":""text"",""channel"":""api"",""direction"":""incoming"",""createdOn"":""2021-04-13T12:46:02.420Z""}

CreatedOn 列

//Dropdown Component
2021-04-13 12:45:55.243118+00 
//Message that should be displayed after User Input
2021-04-13 12:46:03.253342+00
//User Input
2021-04-13 12:46:03.253342+00

有什么办法可以防止这种情况发生吗?

4

1 回答 1

0

我认为在 Botpress 中无法阻止这种情况。从事件表模式。已CreatedOn创建但 Knex。但该event列是 JSON 值。我没有找到该event列在数据库中插入或对应于该event.createdOn值的引用。

我很好奇,我尝试使用 Channel-web 模块。时间戳差异也附加在 channel-web 模块中。

前端发布请求

初始有效载荷

curl 'http://localhost:3001/api/v1/bots/weather/mod/channel-web/messages?__ts=1625757442879' 
-H 'Accept: application/json, text/plain, */*' 
-H 'Authorization: Bearer {{BEARER_TOKEN}}' 
--data-raw '{"webSessionId":"/guest#S9UoXB2NuDfySWqgAAAK","conversationId":7,"payload":{"type":"text","text":"hello"}}'

数据库表事件

sqlite> sqlite> select event,createdOn from events where botId = 'weather';

我使用 JQ将事件列转换为可读格式

jq .createdOn,.payload
"2021-07-08T15:17:22.888Z"
{
  "type": "text",
  "text": "hello"
}

createdOn(不在事件列中)

2021-07-08T15:17:23.456Z

插入时触发

您可以在插入的值上创建触发器。这篇文章解释了如何使用 JSON 列值(如事件列)来做到这一点。

于 2021-07-08T15:43:56.043 回答