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

时间:2016-08-05 13:12:41

标签: javascript api webhooks typeform

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

2 个答案:

答案 0 :(得分: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的响应并创建答案表。 我跳它会对你有所帮助。

答案 1 :(得分: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中包含答案)。< / p>

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;