如何在Twilio发起电话时获取号码?基于Node.js实现
解决方案:自定义Twilio语音XML并获取来电号码
咱们直接搞定两个核心需求:替换默认的语音XML URL,以及在Twilio发起呼叫时捕获来电号码。下面是一步步的实现方法和完整代码:
1. 替换自定义Voice XML URL
你只需要把client.api.calls.create里的url参数改成你自己的voice.xml文件地址就行——不管是本地服务地址(比如http://localhost:3000/your-voice.xml)还是线上公开URL都可以,只要Twilio能正常访问到这个地址。
2. 获取来电号码(主叫号码)
当Twilio触发你的语音XML对应的webhook时,会自动把呼叫相关的参数(包括主叫号码From)通过POST请求发送给你的服务器。你需要搭建一个简单的服务来接收这些参数,同时返回自定义的语音响应。
完整实现代码
首先安装必要的依赖:
npm install twilio express
创建服务文件(比如call-handler.js):
// 导入依赖 const express = require('express'); const Twilio = require('twilio'); // Twilio账号信息(替换成你自己的) const accountSid = 'AC36861400a21a3ee42437f446015cd183'; const authToken = 'your_auth_token'; const client = new Twilio(accountSid, authToken); const app = express(); // 解析Twilio发送的表单数据 app.use(express.urlencoded({ extended: true })); // 处理Twilio的呼叫请求:获取来电号码并返回自定义语音XML app.post('/your-voice', (req, res) => { // 从请求体中拿到来电号码 const callerNumber = req.body.From; console.log(`收到来自 ${callerNumber} 的呼叫`); // 用Twilio的Twiml构建器生成语音响应(也可以直接返回静态XML文件) const voiceResponse = new Twilio.twiml.VoiceResponse(); voiceResponse.say(`你好,来自 ${callerNumber} 的呼叫已接通`); // 这里可以添加更多指令:比如转接到其他号码、播放音频文件等 // 返回XML格式的响应给Twilio res.type('text/xml'); res.send(voiceResponse.toString()); }); // 发起呼叫的函数 async function makeOutgoingCall() { try { const call = await client.api.calls.create({ url: 'http://你的公网IP或域名/your-voice', // 替换成你的服务地址 to: '+14155551212', // 目标被叫号码 from: '+你的Twilio电话号码' // 你的Twilio号码 }); console.log(`呼叫已发起,SID: ${call.sid}`); } catch (error) { console.error('呼叫失败:', error); } } // 启动服务器并发起呼叫 app.listen(3000, () => { console.log('服务器运行在 http://localhost:3000'); makeOutgoingCall(); // 触发发起呼叫的逻辑 });
关键注意点
- 公网访问要求:如果你的服务在本地运行,Twilio没法直接访问
localhost,可以用Ngrok这类工具把本地端口映射到公网,或者把服务部署到线上服务器。 - 静态XML替代:如果你不想用Twiml构建器,也可以直接在路由里返回你写好的静态voice.xml文件内容,只要确保响应是
text/xml格式就行。
内容的提问来源于stack exchange,提问作者鄭暐翰
相关产品推荐
相关产品推荐

