filterByFormula 结果创建新记录
filterByFormula Result to Create New Record
我正在使用 Twilio 函数 (node.js) 将所有传入文本加载到 AirTable。我正在使用 2 tables -
- “接收文本”,列为 "Inbound Text Date"、"Inbound Text Content" 和 "UID"。
- “用户”列 "UID" 和 Phone 数字 ("Your Number")。
收到短信时,我只有 phone 号码。所以我尝试将 FilterByFormula 与 phone 编号一起使用,以从“用户”table.
中检索用户的 UID
这是我的代码 运行 -
exports.handler = function(context, event, callback) {
var Airtable = require('airtable');
var base = new Airtable({apiKey: context.AIRTABLE_API_KEY}).base('app######');
var phone = event.From;
var format_phone = // format to +1 (###) ###-####
base('Users').select({
filterByFormula: `Your Number = "${format_phone}"`,
view: "Grid view"
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
console.log(record.id);
});
fetchNextPage();
}, function done(err) {
if (err) { console.error(err); return; }
});
inputbase = 'Receive Text';
message = {
'UID' : ['rec#######'],
'Inbound Text Date' : Date.now(),
'Inbound Text Content' : event.Body,
};
base(inputbase).create(message, function(err, record) {
if (err) { console.error(err); return; }
console.log(record.getId());
callback(null, message);
});
};
现在进行测试,UID 是硬编码的,并且工作正常。我不确定如何将 UID 从 filterByFormula 获取到变量中或直接获取到消息变量中。
UID 和 Phone Number 都是“Users”中的唯一值,所以我预计不会收到超过 1 条记录。
谢谢。
试试这个,让我知道结果如何。
const Airtable = require('airtable');
exports.handler = function(context, event, callback) {
const base = new Airtable({apiKey: context.AIRTABLE_API_KEY}).base(context.AIRTABLE_DATABASE);
const phone = event.From;
const body = event.Body;
function createRecord(UID) {
const today = new Date();
const date = `${(today.getMonth()+1)}/${today.getDate()}/${today.getFullYear()}`;
const inputbase = 'Receive Text';
const message = {
'UID': UID,
'Inbound Text Date': date,
'Inbound Text Content': body,
};
base(inputbase).create(message, function(err, record) {
if (err) {
console.error(err);
callback("error");
}
console.log(record.getId());
callback(null, message);
});
}
base('Users').select({
filterByFormula: `{Your Number} = "${phone}"`,
view: "Grid view"
}).firstPage().then(records => {
if (!records[0]) {
console.log("**NO MATCH**");
createRecord("**NO MATCH**");
} else {
console.log("**MATCH**");
createRecord(records[0].fields.UID);
}
})
.catch(err => {
console.log(err);
callback("error");
});
};
我正在使用 Twilio 函数 (node.js) 将所有传入文本加载到 AirTable。我正在使用 2 tables -
- “接收文本”,列为 "Inbound Text Date"、"Inbound Text Content" 和 "UID"。
- “用户”列 "UID" 和 Phone 数字 ("Your Number")。
收到短信时,我只有 phone 号码。所以我尝试将 FilterByFormula 与 phone 编号一起使用,以从“用户”table.
中检索用户的 UID这是我的代码 运行 -
exports.handler = function(context, event, callback) {
var Airtable = require('airtable');
var base = new Airtable({apiKey: context.AIRTABLE_API_KEY}).base('app######');
var phone = event.From;
var format_phone = // format to +1 (###) ###-####
base('Users').select({
filterByFormula: `Your Number = "${format_phone}"`,
view: "Grid view"
}).eachPage(function page(records, fetchNextPage) {
records.forEach(function(record) {
console.log(record.id);
});
fetchNextPage();
}, function done(err) {
if (err) { console.error(err); return; }
});
inputbase = 'Receive Text';
message = {
'UID' : ['rec#######'],
'Inbound Text Date' : Date.now(),
'Inbound Text Content' : event.Body,
};
base(inputbase).create(message, function(err, record) {
if (err) { console.error(err); return; }
console.log(record.getId());
callback(null, message);
});
};
现在进行测试,UID 是硬编码的,并且工作正常。我不确定如何将 UID 从 filterByFormula 获取到变量中或直接获取到消息变量中。
UID 和 Phone Number 都是“Users”中的唯一值,所以我预计不会收到超过 1 条记录。
谢谢。
试试这个,让我知道结果如何。
const Airtable = require('airtable');
exports.handler = function(context, event, callback) {
const base = new Airtable({apiKey: context.AIRTABLE_API_KEY}).base(context.AIRTABLE_DATABASE);
const phone = event.From;
const body = event.Body;
function createRecord(UID) {
const today = new Date();
const date = `${(today.getMonth()+1)}/${today.getDate()}/${today.getFullYear()}`;
const inputbase = 'Receive Text';
const message = {
'UID': UID,
'Inbound Text Date': date,
'Inbound Text Content': body,
};
base(inputbase).create(message, function(err, record) {
if (err) {
console.error(err);
callback("error");
}
console.log(record.getId());
callback(null, message);
});
}
base('Users').select({
filterByFormula: `{Your Number} = "${phone}"`,
view: "Grid view"
}).firstPage().then(records => {
if (!records[0]) {
console.log("**NO MATCH**");
createRecord("**NO MATCH**");
} else {
console.log("**MATCH**");
createRecord(records[0].fields.UID);
}
})
.catch(err => {
console.log(err);
callback("error");
});
};