如何在Twilio Run Function组件中动态获取主叫号码并作为JSON键传递
问题解决方法
1. 配置Studio Run Function Widget参数
Twilio Studio的Run Function组件默认不会自动传递通话上下文变量到Function的event对象,你需要手动在组件配置的Function Parameters区域添加参数:
- 键填
From - 值选流动态变量
{{From}},或者对应前置节点输出的Caller ID变量即可
2. 补充参数存在性校验
你当前代码没有做event.From的空值判断,一旦变量不存在调用substring会直接抛出异常,导致Function运行失败,修改后代码如下:
exports.handler = function(context, event, callback) { let twiml = new Twilio.twiml.VoiceResponse(); // 先判断手机号是否存在 if (!event.From) { twiml.say("无法获取您的手机号,支付失败"); return callback(null, twiml); } var Client = require("@paymentsds/mpesa").Client; var phoneNumber = event.From; // 避免硬编码截断长度适配不同号码格式,按你原有逻辑可调整为前缀判断 var phoneNumberNorm = phoneNumber.startsWith("+258") ? phoneNumber.substring(4) : phoneNumber.replace(/^\+\d+/, ''); var client = new Client({ apiKey: 'xxxxxxxxxxxxxxxxxx', publicKey: 'xxxxxxxxxxxxxxxxxx', serviceProviderCode: '171717' }); var paymentData = { from: phoneNumberNorm, reference: '11114', transaction: 'T12344CC', amount: '10' }; client.receive(paymentData).then(function(r) { twiml.say("您的支付已成功"); callback(null, twiml); }).catch(function(e) { twiml.say("您的支付失败"); callback(null, twiml); }); };
3. 检查Function运行配置
确认你的Function运行时权限已开启,依赖包@paymentsds/mpesa已在Function配置的Dependencies区域添加正确的版本号,避免依赖加载失败导致逻辑中断。
内容的提问来源于stack exchange,提问作者Ernesto
相关产品推荐
相关产品推荐

