Xero 集成指南:使用 SkyPlanner APS 进行生产排程
本指南向 Xero 顾问、咨询顾问及 IT 团队介绍如何将 Xero 接入 SkyPlanner APS。SkyPlanner 通过 Xero Accounting API 和 Projects API 与 Xero 实现双向集成:
- 导入联系人、启用库存跟踪的物料及其现有库存量、已接受的报价单,以及采购订单和到货日期。
- 将计划完工日期以备注形式回写到各报价单的历史记录中。
- 订单完成后,回写销售发票草稿,保留报价单的明细行和参考信息,并将报价单状态改为 Invoiced。
- 将已记录的项目工时回写为 Xero Projects 工时记录。
- Xero 的网络钩子通知联系人和发票的变更,SkyPlanner 的网络钩子则在排程发生变化时即时推送。
Xero 是会计软件,不存储物料清单、工艺路线、机器或生产订单。工作中心、工序、班次和准备时间均在 SkyPlanner 中维护。SkyPlanner 团队会在实施导入阶段为您的 Xero 组织配置集成,并在上线后提供支持。本指南面向希望参与集成的顾问和开发人员,也适用于希望参照 SkyPlanner 的 REST API 文档(API 参考文档)自行开发的读者。
Xero Accounting API
Xero 是一款多租户云产品,所有组织使用同一套 API。Accounting API 是 REST API,地址为 https://api.xero.com/api.xro/2.0/,支持 JSON 或 XML。每次调用都通过 Xero-tenant-id 请求头指定组织。(来源)
排程所需的端点:
- 主数据:
/Contacts(客户和供应商)、/Items(Code、IsTrackedAsInventory、QuantityOnHand)。 - 需求:
/Quotes(Status 为 ACCEPTED,含 LineItems);对于先开票再生产的车间,还需使用 Type 为 ACCREC 的/Invoices。 - 供应:
/PurchaseOrders(DeliveryDate、ExpectedArrivalDate,以及含 ItemCode 的 LineItems)。 - 回写:
/Quotes/{QuoteID}/History、/Invoices、/Quotes,以及 Projects API 的https://api.xero.com/projects.xro/2.0/projects/{projectId}/time。
所有列表端点都支持 If-Modified-Since 请求头,因此每次同步只读取发生变更的数据。创建和更新操作均采用批量方式。Xero 不提供物料清单、工艺路线或生产订单端点。
身份验证、授权范围与调用限制
Xero 使用 OAuth 2.0。Xero 管理员只需登录一次,授权应用并选择组织。应用会请求 offline_access,以便通过刷新令牌保持连接。(来源)
Xero 正在用细粒度授权范围替代宽泛的授权范围,新应用均采用细粒度授权范围。排程集成需要以下权限:
accounting.invoices:用于报价单、发票、采购订单和物料accounting.contacts:用于客户和供应商accounting.settings.read:用于物料设置projects:用于工时记录offline_access
Xero 对每个组织的并发调用数、每分钟和每日调用次数,以及每个应用的调用量设有限制。应用超限时,会收到 HTTP 429 响应及 Retry-After 响应头。每日调用配额和可连接的组织数量取决于应用的合作伙伴等级,两者均列于 Xero 的 API 限制页面。通过网络钩子、带 If-Modified-Since 的读取及批量写入,排程集成的调用量可保持在限额以内,并留有充足余量。
在 SkyPlanner 端,REST API 通过 Authorization-Token 请求头中的 API 令牌进行身份验证(SkyPlanner Settings > API),文档采用 Swagger/OpenAPI 格式。集成教程介绍了如何完成最初的几次调用。
网络钩子
“Webhooks allow you to subscribe to certain events that happen in Xero.”(网络钩子让您订阅 Xero 中发生的特定事件。)(来源)与排程相关的事件包括 Contact 和 Invoice,两者均支持 CREATE 和 UPDATE。
工作方式如下:
- 每个应用只需一个网络钩子,即可覆盖所有已连接的组织。
- 每次推送都包含一个 events 数组,其中带有资源 ID 和事件类型。接收端随后再读取对应资源。
- 每次推送均通过
x-xero-signature请求头携带签名,签名根据应用的网络钩子密钥生成。Xero 在开始推送前会发送 “Intent to receive”(接收意向)检查。 - 推送失败时,Xero 会重试;如果持续失败,则会停用该网络钩子。因此,接收端应先快速响应,再处理实际工作。
报价单、物料和采购订单没有网络钩子事件。SkyPlanner 以较短间隔轮询,通过 If-Modified-Since 读取这些数据。在没有变更的情况下,每类实体只需一次调用。
数据映射
| Xero 对象(端点) | SkyPlanner 对象 | 方向 | 频率 |
|---|---|---|---|
Contact、IsCustomer(/Contacts) | Customer(external_identifier、delivery_priority) | Xero → SkyPlanner | 首次加载,之后由网络钩子触发 |
Item,包括启用和未启用库存跟踪的物料,含 QuantityOnHand(/Items) | 产品、物料及库存 | Xero → SkyPlanner | 首次加载,之后通过 If-Modified-Since 读取 |
Quote,Status 为 ACCEPTED,含 LineItems(/Quotes) | Order(external_order_number、delivery_date),每个明细行对应生产任务 | Xero → SkyPlanner | 通过 If-Modified-Since 轮询 |
Invoice,Type 为 ACCREC(适用于先开票再生产的车间)(/Invoices) | Order 和生产任务 | Xero → SkyPlanner | 通过网络钩子实时同步 |
PurchaseOrder,含 ExpectedArrivalDate 或 DeliveryDate(/PurchaseOrders) | 待到货物料(estimated_delivery_date) | Xero → SkyPlanner | 通过 If-Modified-Since 轮询 |
报价单历史备注(PUT /Quotes/{QuoteID}/History) | 计划完工日期 | SkyPlanner → Xero | 排程变更时 |
Invoice,Type 为 ACCREC,Status 为 DRAFT,Reference = 报价单号(POST /Invoices) | 已完成的订单 | SkyPlanner → Xero | 订单完成时 |
Quote 的 Status 设为 INVOICED(POST /Quotes) | 已完成的订单 | SkyPlanner → Xero | 发票创建时 |
Projects 工时记录(POST /projects/{projectId}/time) | Mobile Confirmations、工时日志 | SkyPlanner → Xero | 工作记录提交时 |
| Xero 中无对应数据 | 工作中心、工序、班次、缺勤、准备时间矩阵、工具、操作人员数量、替代工作中心 | 在 SkyPlanner 中维护 | 在实施导入阶段配置 |
集成方式
1. 首次加载主数据。先分页读取联系人和物料,再读取未结采购订单及已接受的报价单。在 SkyPlanner 中创建客户,以 Xero ContactID 作为 external_identifier;创建产品和物料时,以物料编码作为键。然后建立 Xero 中没有的数据:工作中心、各产品的工序、班次、休假及准备时间。导入工序最快的方式是使用 CSV 或 Excel。
2. 订单同步。通过 If-Modified-Since 轮询报价单。报价单状态变为 ACCEPTED 时,SkyPlanner 会创建订单,并将报价单号用作 external_order_number。delivery_date 取自车间用于记录承诺交期的字段,该映射在实施导入阶段配置。每个明细行会按产品工序生成生产任务。采购订单明细行则按预计到货日期形成待到货物料,生产任务因此会等待物料到货。每晚完整读取未结报价单和采购订单,以补齐遗漏的数据。
3. 回写排程和完工结果。通过三次调用将结果写入 Xero:
- PUT
/Quotes/{QuoteID}/History添加一条含计划完工日期的备注。已接受的报价单只允许修改联系人和备注,因此日期存放在历史备注中。(来源) - 订单完成时,POST
/Invoices创建销售发票,将 Type 设为 ACCREC、Status 设为 DRAFT,沿用报价单的联系人和明细行,并将报价单号用作 Reference。记账人员随后在 Xero 中审核并发送发票。 - 通过 POST
/Quotes提交 QuoteID 及 Status INVOICED,关闭报价单。Accounting API 允许将状态从 Accepted 更改为 Invoiced。
4. 车间报工与项目工时。操作人员使用 SkyPlanner Mobile Confirmations、Production Timer 或 Quick Log Mode 记录工作。进度会立即更新到排程中,Autopilot 随即重新安排剩余工作。对于项目工作,SkyPlanner 会将工时作为工时记录提交到对应项目任务,记录中包含 Xero 用户、日期和时长。(来源)
5. 数据归属与冲突处理规则。上线前应将规则明确记录下来:
| 数据 | 归属系统 |
|---|---|
| 联系人、物料、价格、报价单、采购订单、发票、会计数据 | Xero |
| 工作中心、工序、班次、缺勤、准备时间矩阵、工具、替代资源 | SkyPlanner |
| 生产任务顺序、开始和结束时间、各生产任务使用的工作中心 | SkyPlanner |
| 报价单上记录计划完工日期的备注 | 归 SkyPlanner 管理,写入 Xero |
| 已完工订单的发票草稿、项目工时 | 由 SkyPlanner 创建,审批后由 Xero 管理 |
典型项目步骤
实施通常在上线准备开始后的几周内完成。在此之前,您可以从 Xero 导出包含联系人、产品和未结报价单的 CSV 文件,用自己的数据进行 30 天免费试用。
项目本身包括以下步骤:
- 连接。由 Xero 管理员授权 SkyPlanner,并选择组织。
- 需求对象。商定是以已接受的报价单还是销售发票触发生产。
- 映射。确定映射表、物料编码、发票会计科目、默认税务设置,以及数据归属规则。
- 初始导入。导入联系人、物料、未结采购订单和已接受的报价单。
- 生产模型。在 SkyPlanner 中设置工作中心、各产品的工序、班次、准备时间矩阵、工具和操作人员数量。
- 同步。联系人和发票通过 Webhooks 同步;报价单、物料和采购订单通过
If-Modified-Since轮询同步,并在每晚进行数据核对。 - 回写。先回写报价单备注,再回写发票草稿和报价单状态,最后在有需要时回写项目工时。
- 并行测试与上线。将 SkyPlanner 中的日期与当前计划进行比较,请记账人员检查首批发票草稿,然后启用回写。
Xero 集成中需要提前规划的事项
- Xero 中没有生产对象。各产品的工序应保存在 SkyPlanner 中,并以 Xero 物料编码关联。物料编码应保持稳定。
- 报价单不支持 webhook。使用
If-Modified-Since进行短周期轮询,同时遵守每分钟和每日的调用限额。 - 报价单接受后会锁定。接受后只能更改联系人信息和备注,因此承诺日期仅在接受时读取一次,计划日期则以历史备注的形式写入。
- 库存随销售发票和采购账单变动。对于跟踪库存的物料,Xero 通过销售发票、采购账单和贷项通知单调整现有库存数量。请与记账人员商定成品和已耗用物料的核算方式。
- 项目工时需要关联 Xero 用户。每条工时记录都归属于一个 Xero 用户。请确定哪些操作人员需要向 Xero Projects 提交工时,其余人员的工时则保留在 SkyPlanner 中。
- 细粒度权限范围。应从一开始就申请细粒度权限范围,因为宽泛的权限范围正在逐步停用。
- 应用等级。合作伙伴等级决定了应用可连接的组织数量和每日调用次数。请根据工厂数量规划所需等级。
Xero 集成:由谁配置和提供支持
集成工作涵盖物料、报价单、采购订单,以及完工后如何进入开票流程。同时还需补充 Xero 中没有的数据:工作中心、工序、班次、准备时间矩阵、工具、操作人员数量和替代资源。
- SkyPlanner 团队在上线准备期间完成配置,并在上线后提供支持。每家工厂在 Xero 中设置物料、报价单和库存的方式各不相同,配置时需要用到这些实际经验。
- 您的 Xero 顾问或集成合作伙伴也可以构建集成。SkyPlanner 提供 REST API、Swagger/OpenAPI 文档和 webhooks。
- 您自己的开发人员也可以基于这些接口开发,使用 API 令牌即可。只需一个 API 令牌便可开始,SkyPlanner 团队会在需要时提供协助。采购订单以及产品与物料 API 等产品文档,均可在 SkyPlanner 文档中查阅。
SkyPlanner 每月 199 € 起,包含 5 个工作中心,按月计费。我们会根据您的流程和需求,将集成费用与订阅方案一并提前报价,让您在开始前了解全部费用。请查看价格和功能,或阅读Xero 是否具备生产排程功能?,了解 Xero 本身的功能范围。集成概览见 Xero 页面,其他系统则列于全部集成页面。
制造企业对 SkyPlanner 的评价
2 小时每周节省的时间
“SkyPlanner 让我们的生产计划从 Excel 电子表格迈向了实时生产优化。”
Kalle Kalliomäki,供应链专员
UTU · 配电板与开关设备
生产计划工作每周节省 2 小时,新的任务队列只需几秒即可下达到产线。
+90%生产效率提升
“生产效率提高了 90%。”
Abdul Rucyinga,IT 负责人
Laboratory & Allied · 制药
生产效率提高了 90%,为所有工作中心制定覆盖三个月的优化计划,用时不到 30 分钟。
减少因缺料造成的停工
“SkyPlanner 为我们带来的价值,在于它是一款日常工作中真正好用的工具,尤其适合确定交货日期。”
Tommi Männistö,生产计划经理
Eskomatic · 机械加工服务
自动负荷排程让交货日期更加准确,因缺料造成的生产停工也大幅减少。
1,000s张工单自动完成排程
“我们对生产的掌控方式变了,对产能的了解也达到了全新的水平。”
Hannu Ryynänen,首席执行官
Mamec · 工业搅拌机、泵及高科技代工制造
数千张工单自动完成排程,整个组织都能实时查看生产情况。
常见问题
Xero 是否提供生产数据 API?
Xero 提供 Accounting API 和 Projects API,两者均为采用 OAuth 2.0 的 REST 接口,涵盖联系人、物料、报价单、发票、采购订单和工时记录。工作中心和工序等生产数据则保存在 SkyPlanner 中。
SkyPlanner 能否向 Xero 回写数据?
可以。SkyPlanner 会将计划完工日期添加到每张报价单的历史记录中,在订单完工时根据报价单明细创建销售发票草稿,将报价单状态改为 Invoiced,并提交项目工时记录。
Xero 会实时推送变更吗?
Xero 的 webhooks 支持联系人和发票。SkyPlanner 通过 If-Modified-Since 读取自上次同步以来发生变更的报价单、物料和采购订单,并在每晚进行数据核对,因此刚获客户接受的报价单能很快进入排程。
Xero 中没有物料清单、工艺路线和机器数据,这些数据从哪里来?
这些数据由 SkyPlanner 提供。您只需设置一次工作中心、各产品的工序、班次和准备时间,可手动设置,也可通过 CSV 或 Excel 导入。每个产品都关联 Xero 物料编码,因此刚获客户接受的报价单会自动排程。