You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twilio Function结合Airtable实现SMS日期路由的代码问题咨询

问题修复方案

你现有代码存在4个核心错误,逐一修复后即可实现预期逻辑:

  • Airtable查询语法错误:select()方法不能直接传入JS判断表达式,必须传入符合Airtable API规范的配置对象;同时日期不能直接用JS的Date对象做全等匹配,需要格式化后对齐Airtable的日期存储格式
  • TwiML初始化错误:代码中未定义大写的Twilio对象就直接调用其下方法,会触发引用报错
  • 作用域&流程错误:forEach循环外部无法访问循环内的record变量,且循环内提前调用callback会导致函数提前终止、重复返回响应
  • 匹配逻辑不严谨:仅对用户输入做了小写转换,未对Airtable存储的标准答案做相同格式处理,容易因大小写、空格问题匹配失败

修正后完整代码

const airtable = require("airtable");
const twilio = require("twilio");
const MessagingResponse = twilio.twiml.MessagingResponse;

exports.handler = function (context, event, callback) {
  const base = new airtable({
    apiKey: context.AIRTABLE_API_KEY,
  }).base(context.AIRTABLE_BASE_ID);
  const twiml = new MessagingResponse();
  
  // 格式化当日日期为YYYY-MM-DD,按你的时区修改偏移量,东八区为8*60,UTC时区为0
  const tzOffset = 8 * 60;
  const today = new Date(Date.now() + tzOffset * 60 * 1000);
  const formattedToday = today.toISOString().split('T')[0];
  
  // 读取用户回复,统一转小写+去除首尾空格
  const userAnswer = event.Body.trim().toLowerCase();

  base("questions")
    .select({
      // 用Airtable公式过滤当日的题目记录
      filterByFormula: `DATETIME_FORMAT({date}, 'YYYY-MM-DD') = '${formattedToday}'`,
      maxRecords: 1 // 每日仅取1条匹配的题目记录
    })
    .all()
    .then((records) => {
      // 未查询到当日题目时返回默认提示
      if (records.length === 0) {
        twiml.message("今日暂未配置题目,请稍后再试");
        return callback(null, twiml);
      }

      const todayQuestion = records[0];
      const correctAnswer = todayQuestion.get("correct").trim().toLowerCase();
      
      // 匹配答案返回对应内容
      if (userAnswer === correctAnswer) {
        twiml.message(todayQuestion.get("congrats"));
      } else {
        twiml.message(todayQuestion.get("hint"));
      }

      callback(null, twiml);
    })
    .catch((error) => {
      callback(error);
    });
};

注意事项

  • 提前在Twilio Function的环境变量配置页,填入正确的AIRTABLE_API_KEY和AIRTABLE_BASE_ID
  • 代码中的表名questions、字段名date/correct/congrats/hint必须和你Airtable中实际的表、字段名称完全一致,大小写敏感
  • 时区偏移量tzOffset按实际使用场景调整,否则会出现跨天查不到当日记录的问题
  • 如果需要支持更宽松的答案匹配(比如允许用户输入带多余标点、近义词),可以自行修改答案比对部分的逻辑

附:Airtable base截图


内容的提问来源于stack exchange,提问作者D Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:24:37