如何用Python将JSON信息接入Twilio Studio呼叫转发流程?
解决Twilio Studio呼叫转发动态号码问题的方案
核心说明
你用Python创建的只是Twilio Function的空实例,Function的执行逻辑需要用JavaScript编写(Twilio Function运行在Node.js环境),但代码逻辑很简单。结合你已经有API维护JSON信息的情况,推荐让Function直接调用你的API获取最新号码,步骤如下:
1. 编写Twilio Function的JS代码
这段代码负责接收Studio的触发请求,调用你的JSON API拿到联系人信息,再返回给Studio使用:
exports.handler = async function(context, event, callback) { // 调用你维护的JSON数据API const apiResponse = await fetch('你的JSON API地址'); const contactData = await apiResponse.json(); // 返回给Studio的数据,字段和你的JSON结构对应 callback(null, { phy_name: contactData.phy_name, phy_number: contactData.phy_number }); };
如果你的API需要认证,把密钥存在Twilio Function的环境变量里(控制台→Function服务→环境变量),再修改代码:
exports.handler = async function(context, event, callback) { const apiKey = context.API_AUTH_KEY; // 环境变量中设置的密钥名称 const apiResponse = await fetch('你的JSON API地址', { headers: { 'Authorization': `Bearer ${apiKey}` } }); const contactData = await apiResponse.json(); callback(null, { phy_name: contactData.phy_name, phy_number: contactData.phy_number }); };
2. 用Python把JS代码部署到Twilio Function
如果你不想手动在控制台粘贴代码,用Twilio Python SDK更新你之前创建的Function:
from twilio.rest import Client account_sid = 'ACXXXXX' auth_token = 'acXXXXX' client = Client(account_sid, auth_token) # 替换成你写好的JS代码内容 function_js_code = """ exports.handler = async function(context, event, callback) { const apiResponse = await fetch('你的JSON API地址'); const contactData = await apiResponse.json(); callback(null, { phy_name: contactData.phy_name, phy_number: contactData.phy_number }); }; """ # 替换成你之前创建的Function的SID和服务SID function = client.serverless \ .v1 \ .services('ZSXXXXXX') \ .functions('你的Function SID') \ .update( friendly_name='GetContactInfo', content=function_js_code ) print("Function代码部署完成")
3. 配置Studio流程的Function组件
- 在Studio流程中,选中Function组件,选择你创建的
GetContactInfo函数 - 后续的播报组件里,使用变量
{{widgets.你的Function组件名称.parsed.phy_name}}(比如组件名叫get_contact,就写{{widgets.get_contact.parsed.phy_name}}) - 呼叫组件的目标号码填
{{widgets.你的Function组件名称.parsed.phy_number}}
备选方案:用Twilio Sync存储动态号码(无API场景)
如果你不想维护API,可以用Python把JSON数据同步到Twilio Sync(云端键值存储),再让Function从Sync读取:
Python同步数据到Sync
from twilio.rest import Client account_sid = 'ACXXXXX' auth_token = 'acXXXXX' client = Client(account_sid, auth_token) # 替换成你的Sync服务SID(控制台→Sync→服务) sync_service_sid = '你的Sync服务SID' # 创建或更新Sync文档 sync_doc = client.sync \ .v1 \ .services(sync_service_sid) \ .documents \ .create( unique_name='ContactInfo', data={ "phy_name": "Bob Ross", "phy_number": "+1111111111111" } ) # 后续更新数据用update方法 # sync_doc.update(data={"phy_name": "New Name", "phy_number": "+1222222222222"})
对应的Twilio Function JS代码
exports.handler = async function(context, event, callback) { const syncClient = context.getTwilioClient().sync.v1.services(context.SYNC_SERVICE_SID); const contactDoc = await syncClient.documents('ContactInfo').fetch(); callback(null, { phy_name: contactDoc.data.phy_name, phy_number: contactDoc.data.phy_number }); };
记得在Function的环境变量里添加SYNC_SERVICE_SID。
内容的提问来源于stack exchange,提问作者user24959239
相关产品推荐
相关产品推荐

