Typeform回答服务器数据库中的集成

问题描述 投票:0回答:2

我正在使用typeform的webhook来获得答案。现在我想直接将答案存储在我的数据库中。例如,如果用户输入他/她的名字,则答案应直接存储在用户模型中。为了使它工作,我需要一些来自问题的信息,它是用户的名字。有没有办法添加隐藏的标签(名称,年龄,性别)来识别问题。我不能硬编码问题ID,因为我有很多形式有不同类型的问题。

javascript api webhooks typeform
2个回答
0
投票

如果要在数据库表中存储响应,则必须在进行响应时对其进行硬编码或创建表。即从响应中读取问题数组并相应地创建表,并在新创建的表中存储响应。下次检查是否有表创建,如果是,则存储值,否则创建新表。

这是我动态读取响应的示例代码:

function renderData(data) {
var header = '', rows = '';
var questions = data.questions;
var responses = data.responses;
for (var j = 0; j < questions.length; j++) {
    header += '<th>' + questions[j].question + '</th>';
}
for (var i = 0; i < responses.length; i++) {
    rows += "<tr>"
    for (var j = 0; j < questions.length; j++) {
        if (responses[i].answers[questions[j].id] == undefined) {
            rows += '<td> - </td>'
        } else {
            rows += '<td>' + responses[i].answers[questions[j].id] + '</td>';
        }
    }
    rows += "</tr>"
}
$('table').append(
        '<table>' + '<thead>' + header + '</thead>' + '<tbody>' + rows
                + '</tbody>' + '</table>');
};

以上函数将data作为typeform API的响应并创建答案表。我跳它会对你有所帮助。


0
投票

我建议将字段标题与正则表达式匹配。由于字段标题是句子,因此按特定顺序匹配它们很有用,并且将已经匹配的字段从运行中取出。应首先匹配更具体的字段。这类似于使用普通英语的黄瓜测试工具。

这里有一些我尚未尝试过的代码,以便了解我的目标:

class TypeformReader() {
    constructor(data) {
        this.fields = data.form_response.definition.fields;
        this.answers = data.form_response.answers;
        this.read = [];
    }

    getAnswer(pattern, markRead = false, ignoreRead = true) {
        for (let field of this.fields) {
            if (ignoreRead && this.read.includes(field.id)) {
                continue;
            }
            if (pattern.test(field.title)) {
                for (let answer of this.answers) {
                    if (answer.field.id == field.id)
                        if (markRead) {
                            this.read.push(field.id);
                        }
                        return answer;
                    }
                }
            }
        }
    }
}

这是一个如何使用这个类的例子。如果你有一个狗瑜伽课的字形,上面写着“你叫什么名字?”和“你的狗叫什么名字?”你想先匹配较长的一个(还包括“你的电子邮件是什么?”这是一个电子邮件字段,答案是email,而不是text)。

const reader = new TypeformReader(req.data);
const dogName = reader.getAnswer(/\bname\b.*\bdog\b/).text;
const name = reader.getAnswer(/\bname\b/).text;
const email = reader.getAnswer(/\bemail\b').email;
© www.soinside.com 2019 - 2024. All rights reserved.