Twilio Studio开发IVR:如何在新函数中使用生成的API Token
问题解决:Twilio Studio函数无法读取前序Widget生成的Token
问题现象
开发IVR流程时,先通过Authorization_API1 Widget生成认证Token,后续validaDebito函数Widget尝试读取该Token时触发500错误,核心报错为:Cannot read properties of undefined (reading 'Authorization_API1')。
流程逻辑
- 运行
Authorization_API1函数Widget:调用认证接口生成Token - 通过拆分Widget验证Token生成结果为
success - 运行
validaDebito函数Widget:使用Token发起第三方API请求
错误原因
函数代码中尝试通过event.widgets.Authorization_API1.parsed.token获取Token,但event.widgets未被传入函数——Twilio Studio默认不会自动将所有流程数据传递给函数Widget,需手动配置数据传递规则。
解决方案
方案1:开启全流程数据传递
在Twilio Studio的validaDebito函数Widget配置页,找到**"Pass Flow Data to Function"**选项并勾选。开启后函数即可通过event.widgets访问所有前序Widget的输出数据,无需修改现有代码。
方案2:手动传递指定参数
若无需传递全部流程数据,可在validaDebito函数Widget的**"Function Parameters"**中添加自定义参数:
- 参数名:
auth_token - 参数值:
{{widgets.Authorization_API1.parsed.token}}
同时修改函数代码,直接读取该参数:
const axios = require('axios'); exports.handler = function(context, event, callback) { const cpfCnpj = event.CPF_CNPJ; if (!cpfCnpj) { return callback("CPF/CNPJ未提供。"); } // 读取手动传递的token参数 const token = event.auth_token; if (!token) { return callback("认证Token未提供。"); } const baseUrl = 'https://app.omnilink.com.br/apigateway/getcliente'; const endpointUrl = `${baseUrl}?CPF_CNPJ=${cpfCnpj}`; axios.get(endpointUrl, { headers: { Authorization: `Bearer ${token}` } }) .then(response => { if (response.status === 200) { const cliente = response.data.Cliente; callback(null, { success: true, inadimplente: !(cliente.ComunicacaoChip && cliente.ComunicacaoSatelital) }); } else { callback(`请求错误: ${response.statusText}`); } }) .catch(error => { callback(`获取客户数据失败: ${error}`); }); };
验证步骤
修改配置或代码后重新测试IVR流程:
- 确认
validaDebito函数能正确获取Token - 第三方API请求返回预期结果
内容的提问来源于stack exchange,提问作者Leonardo Rubio
相关产品推荐
相关产品推荐

