You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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组件

  1. 在Studio流程中,选中Function组件,选择你创建的GetContactInfo函数
  2. 后续的播报组件里,使用变量{{widgets.你的Function组件名称.parsed.phy_name}}(比如组件名叫get_contact,就写{{widgets.get_contact.parsed.phy_name}})
  3. 呼叫组件的目标号码填{{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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:52:04