filterByFormula Результат для создания новой записи - PullRequest
0 голосов
/ 17 апреля 2020

Я использую функции Twilio (node.js) для загрузки в AirTable всех входящих текстов. Я использую 2 таблицы -

  • «Получить текст» со столбцами «Дата входящего текста», «Содержимое входящего текста» и «UID».
  • «Пользователи» со столбцами » UID "и номер телефона (" Ваш номер ").

Когда приходит текст, у меня остается только номер телефона. поэтому я пытаюсь использовать FilterByFormula с номером телефона для получения 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, и номер телефона являются уникальными значениями в «Пользователи», поэтому я не ожидаю получить более 1 записи назад.

Спасибо.

1 Ответ

0 голосов
/ 18 апреля 2020

попробуйте это, дайте мне знать, как оно идет.

    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");
    });
};
...