未接呼叫经运营商转至Twilio时,如何捕获原始TO&FROM号码并触发Webhook
捕获运营商条件转接至Twilio的原始呼叫号码并触发Webhook
1. 配置Twilio号码的触发Webhook
登录Twilio控制台,找到用于接收转接呼叫的号码,在「Voice & Fax」模块下,将「A call comes in」设置为「Webhook」,填入你的服务端接收地址(比如https://your-server.com/twilio-voice-webhook),请求方法选择POST或GET。一旦有转接呼叫进入,Twilio会自动向该地址发起请求,触发你的Webhook逻辑。
2. 提取原始FROM和TO号码
Twilio会在Webhook请求中携带呼叫相关参数,你可以从这些参数中提取原始呼叫信息:
- 原始主叫号码(FROM):直接读取请求参数中的
From字段,运营商转接时会把原始呼叫发起方的号码传递到这里。 - 原始被叫号码(TO):不同运营商的传递方式略有差异,优先检查以下参数:
OriginalTo:如果运营商支持传递Original-ToSIP头,Twilio会自动解析为该参数。Called:部分运营商会将原始被叫号码放在这个字段中。SipHeaders:如果以上参数都没有,可以从这个字段的X-Original-To头中提取(如果运营商有传递)。
代码示例(Node.js/Express)
const express = require('express'); const app = express(); app.use(express.urlencoded({ extended: true })); app.post('/twilio-voice-webhook', (req, res) => { // 提取原始号码 const originalFrom = req.body.From; const originalTo = req.body.OriginalTo || req.body.Called; // 这里写你的业务逻辑:存储号码、触发通知等 console.log(`原始呼叫:从 ${originalFrom} 到 ${originalTo}`); // 返回Twilio要求的TwiML响应,即使不需要处理呼叫也要返回空响应 res.send('<Response></Response>'); }); app.listen(3000, () => console.log('服务启动'));
3. 验证参数正确性
如果不确定哪个参数对应原始被叫号码,可以在Webhook中打印所有请求参数(比如console.log(req.body)),实际触发一次转接呼叫后查看日志,确认目标字段。如果参数缺失,联系运营商确认他们转接时会传递的SIP头或呼叫参数,再针对性提取。
4. 注意事项
- 确保你的Webhook服务能被公网访问,Twilio无法调用内网地址。
- 必须返回有效的TwiML响应,否则Twilio会向运营商返回错误,可能影响后续转接。
内容的提问来源于stack exchange,提问作者BBK
相关产品推荐
相关产品推荐

