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

如何从TXT文件或Outlook(M365)日历获取营业时间配置替代脚本设置?

两种营业时间配置方案的可行性分析

一、从TXT文件读取配置:完全可实现

这是成本最低、最适合非技术员工操作的方案,具体思路如下:

  • 把营业时间配置改成结构化格式(推荐JSON,比纯文本好解析,非技术员工只要改内容别碰格式符号就行),存成单独的business-hours.txt文件,比如内容可以是:
    {"onlineWeekdays": ["周一至周五 9:00-18:00", "周六 10:00-16:00"]}
    
  • 原脚本里去掉硬编码的onlineweekdays变量,改用fetch API读取这个TXT文件,解析后赋值给变量:
    // 读取外部配置文件
    fetch('./business-hours.txt')
      .then(res => res.text())
      .then(txtContent => {
        const config = JSON.parse(txtContent);
        window.onlineweekdays = config.onlineWeekdays;
        // 调用原脚本的初始化逻辑
        initBusinessHoursChecker();
      })
      .catch(err => {
        console.error('配置读取失败,用默认值兜底:', err);
        window.onlineweekdays = ["周一至周五 9:00-18:00"];
        initBusinessHoursChecker();
      });
    
  • 非技术员工修改时,只要打开TXT文件,修改引号里的营业时间内容就行,提醒他们别删引号、逗号这些符号即可;如果担心格式出错,也可以做成每行一个营业时间的纯文本格式,解析时按行拆分处理。

二、从Outlook(M365)日历获取数据:可实现但步骤更复杂

这个方案需要用到微软Graph API,适合需要和企业日历同步的场景,具体流程:

  1. 在Azure AD注册应用:获取客户端ID、租户ID、客户端密钥,配置应用权限(需要Calendars.Read权限,允许读取指定日历的事件)。
  2. 调用Graph API拉取数据:
    • 建议用后端调用(避免前端暴露敏感凭证),比如Node.js示例:
      const { Client } = require('@microsoft/microsoft-graph-client');
      const { ClientSecretCredential } = require('@azure/identity');
      
      // 替换成你的Azure应用凭证
      const tenantId = '你的租户ID';
      const clientId = '你的客户端ID';
      const clientSecret = '你的客户端密钥';
      const userId = '日历所属用户ID';
      const calendarId = '目标日历ID';
      
      const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
      const client = Client.initWithMiddleware({
        authProvider: {
          getAccessToken: async () => {
            const token = await credential.getToken('https://graph.microsoft.com/.default');
            return token.token;
          }
        }
      });
      
      // 获取标记为"营业时间"的日历事件
      async function fetchBusinessHoursFromCalendar() {
        try {
          const events = await client.api(`/users/${userId}/calendars/${calendarId}/events`)
            .filter("subject eq '营业时间'")
            .select('start,end')
            .get();
          // 解析事件时间成脚本需要的格式
          return events.value.map(event => {
            const start = new Date(event.start.dateTime);
            const end = new Date(event.end.dateTime);
            return `${start.toLocaleDateString('zh-CN', { weekday: 'long' })} ${start.getHours()}:${start.getMinutes()}-${end.getHours()}:${end.getMinutes()}`;
          });
        } catch (err) {
          console.error('日历数据拉取失败:', err);
          return [];
        }
      }
      
    • 把后端获取到的营业时间数据返回给前端脚本,替换原有的onlineweekdays变量。
  3. 日历事件规范:需要让负责维护的员工在Outlook日历里创建主题为“营业时间”的重复事件,确保事件的起止时间准确,这样API才能正确筛选和解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:05:16