Twilio函数运行报错:Cannot use import statement outside a module
解决Twilio函数集成Glide表格的模块导入错误及数据写入问题
一、先解决模块导入错误
Twilio Functions默认采用CommonJS模块规范,以下是具体排查和解决步骤:
确认依赖安装完整性
确保在Twilio Functions项目(本地开发目录或控制台依赖管理页)中正确安装@glideapps/tables,优先选择稳定版本(如v0.3.x)。本地开发后部署的话,需确认package.json已包含该依赖,且部署时同步了依赖包。规范使用CommonJS导入语法
禁止混用import和require,直接使用CommonJS写法:const { Tables } = require('@glideapps/tables');若仍报错(可能依赖本身是ES模块),尝试用动态导入:
exports.handler = async function(context, event, callback) { const { Tables } = await import('@glideapps/tables'); // 后续逻辑代码 };切换ES模块模式(可选)
若依赖仅支持ES模块,可在项目根目录创建package.json并添加:{ "type": "module" }此时所有代码需改用
import语法,且Twilio函数的handler也要调整为:export async function handler(context, event, callback) { // 逻辑代码 }注意:此方式可能影响其他依赖兼容性,测试后再部署。
二、Glide表格写入逻辑调试
基于Glide API模板,以下是关键检查点和正确代码示例:
验证Glide API配置与权限
- 确认拥有目标表格的编辑权限,API密钥、App ID、表格ID/名称完全正确。
- 先用Postman等工具手动调用Glide新增行接口,确认能成功写入,排除API本身问题。
Twilio函数中Glide调用的正确示例
const { Tables } = require('@glideapps/tables'); exports.handler = async function(context, event, callback) { // 初始化Glide客户端(从Twilio环境变量取密钥,禁止硬编码) const tables = new Tables({ apiKey: context.GLIDE_API_KEY, appId: context.GLIDE_APP_ID }); try { // 整理短信数据(需与Glide表格列名完全匹配,大小写敏感) const smsRecord = { 发送方: event.From, 接收方: event.To, 短信内容: event.Body, 接收时间: new Date().toISOString() }; // 写入Glide表格 await tables.getTable('SMS日志').addRow(smsRecord); // 返回Twilio要求的响应 callback(null, new Twilio.twiml.MessagingResponse()); } catch (err) { console.error('写入失败:', err); callback(err); } };核心注意事项
- 用Twilio Functions的环境变量存储Glide API密钥,避免泄露。
- 确保代码中使用的表格列名与Glide后台的列名完全一致,否则会写入失败。
- 查看Twilio函数日志面板,捕获并分析具体错误(如权限不足、表格不存在等)。
三、常见坑点排查
- 动态导入需在handler内部执行,避免
Tables未定义的问题。 - 若Glide API响应慢,可在Twilio函数配置中适当延长超时时间(最大10秒)。
- 确认Glide API密钥具备写入权限,部分密钥仅支持只读操作。
内容的提问来源于stack exchange,提问作者Andrew Learned
相关产品推荐
相关产品推荐

