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

调用Twilio Functions时处理Flex Plugin过期ssoTokenPayload的方案

解决Twilio Flex插件SSO Token过期问题的可行方案

针对你遇到的长时间未操作导致Token过期、AccessManager已弃用的情况,以下是几种实用的解决方案:

1. 实时获取最新Token,避免使用初始化时的缓存值

不要在组件初始化时一次性保存flexState,而是每次调用Twilio Function时,直接从Flex Manager的store中获取最新的session token。Flex会自动在后台刷新有效会话的token,但如果你的代码一直使用初始化时的旧值,就会触发过期错误。

修改后的调用代码示例:

export const getCallDuration = async (callSid, manager) => {
  // 每次请求都实时获取最新的Token
  const latestToken = manager.store.getState().flex.session.ssoTokenPayload.token;
  const response = await axios.post(FUNCTION_URL, {
    WorkspaceSid: WORKSPACE_SID,
    CallSid: callSid,
    Token: latestToken,
  });
  return response.data.callInfo.duration;
};

// 使用时直接传入manager,而非缓存的flexState
const callDuration = await getCallDuration(
  task.attributes.call_sid,
  manager
);

你也可以通过订阅store变化,维护一个全局的最新Token变量,避免重复获取:

let currentValidToken = manager.store.getState().flex.session.ssoTokenPayload.token;

// 订阅store变化,自动更新Token
manager.store.subscribe(() => {
  const newToken = manager.store.getState().flex.session.ssoTokenPayload.token;
  if (newToken !== currentValidToken) {
    currentValidToken = newToken;
  }
});

2. 捕获过期错误,自动刷新并重试请求

在Function调用失败时,判断是否为Token过期错误,调用Flex Manager的refreshToken()方法主动刷新Token,然后重试请求。这种方式可以在用户无感知的情况下恢复操作。

示例代码:

export const getCallDuration = async (callSid, manager) => {
  let token = manager.store.getState().flex.session.ssoTokenPayload.token;
  
  try {
    const response = await axios.post(FUNCTION_URL, {
      WorkspaceSid: WORKSPACE_SID,
      CallSid: callSid,
      Token: token,
    });
    return response.data.callInfo.duration;
  } catch (error) {
    // 匹配Token过期的错误信息
    if (error.response?.data?.error === "Access Token has expired or expiration date is invalid") {
      // 主动刷新Token
      await manager.refreshToken();
      // 获取新Token并重试请求
      const refreshedToken = manager.store.getState().flex.session.ssoTokenPayload.token;
      const retryResponse = await axios.post(FUNCTION_URL, {
        WorkspaceSid: WORKSPACE_SID,
        CallSid: callSid,
        Token: refreshedToken,
      });
      return retryResponse.data.callInfo.duration;
    }
    // 非Token错误直接抛出
    throw error;
  }
};

3. 调整Token有效期并添加过期提醒

  • 调整Token过期时间:在Twilio控制台中,针对SSO集成或Flex用户的Token配置,适当延长有效期(注意平衡安全性和用户体验)。
  • 提前提醒用户:通过监听session的过期时间,在Token即将失效前(比如剩余10分钟)弹出提醒,引导用户主动重新认证,避免操作时突然出错。

示例提醒代码:

const checkTokenExpiry = (manager) => {
  const sessionExpiry = manager.store.getState().flex.session.expiry;
  const remainingTime = sessionExpiry - Date.now();
  const warningThreshold = 10 * 60 * 1000; // 10分钟阈值

  if (remainingTime > 0 && remainingTime < warningThreshold) {
    // 使用Flex内置的通知组件弹出提醒
    manager.notifications.showNotification("token-expiring-warning", {
      message: "您的会话即将过期,请重新认证以避免操作失败",
      type: "warning",
      timeout: 10000
    });
  }
};

// 每分钟检查一次Token有效期
setInterval(() => checkTokenExpiry(manager), 60 * 1000);

内容的提问来源于stack exchange,提问作者raina77ow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:22:44