Node.js环境下Twilio短信接收接口如何记录入站消息内容
Twilio入站短信提取、存储与定制回复实现
核心可获取字段
Twilio将用户发送的短信转发到你的/sms回调接口时,会以表单格式在请求体中携带标准化参数,所有需要的数据均可从req.body中读取:
From:发送方的完整国际格式手机号Body:用户发送的短信原文,是消息存储、规则匹配的核心依据MessageSid:单条短信的唯一标识,可用于日志去重、链路追踪To:你侧接收短信的Twilio号码
必要配置
想要正常读取请求体参数,必须在路由注册前添加Express内置的URL编码解析中间件,否则会出现req.body为空的问题:
app.use(express.urlencoded({ extended: false }))
接口改造实现
按照「提取入站字段→存储消息日志→匹配回复规则→构造合法Twiml响应」的流程调整现有代码,完整实现逻辑如下:
app.post('/sms', async (req, res) => { // 读取入站消息核心字段 const sender = req.body.From const userMessage = req.body.Body.trim() const messageUniqueId = req.body.MessageSid const receiveNumber = req.body.To // 替换为你实际的数据库写入逻辑 await messageLog.save({ unique_id: messageUniqueId, sender: sender, receiver: receiveNumber, content: userMessage, receive_time: new Date() }) // 替换为你实际的匹配规则查询逻辑 const defaultReply = 'The Robots are coming! Head for the hills!' const matchedRule = await replyRule.find({ keyword: userMessage.toLowerCase() }) const finalReply = matchedRule ? matchedRule.reply_content : defaultReply // 构造Twilio要求的XML格式响应 const twiml = new MessagingResponse() twiml.message(finalReply) res.writeHead(200, {'Content-Type': 'text/xml'}) res.end(twiml.toString()) })
落地注意事项
- Twilio传递的请求字段大小写严格敏感,不要将
From、Body写为全小写格式,否则会读取到空值 - 改造完成后,需将公网可访问的
/sms接口地址绑定到Twilio控制台对应号码的入站短信回调配置中,否则无法收到任何转发的用户消息 - 做关键词匹配时可对用户输入做标准化处理(统一转小写、去除首尾特殊字符、全半角转换),提升规则命中的容错率
内容的提问来源于stack exchange,提问作者Gianluca
相关产品推荐
相关产品推荐

