Xero-node SDK发票邮件问题:requestEmpty结构与指定邮件模板
Xero-node SDK 发票邮件发送问题解答
我正在使用Xero-node SDK自动创建客户发票,功能运行正常,流程末尾希望自动向客户发送发票邮件。官方提供的示例代码如下:
const xeroTenantId = 'YOUR_XERO_TENANT_ID'; const invoiceID = '00000000-0000-0000-0000-000000000000'; const requestEmpty: RequestEmpty = { }; try { const response = await xero.accountingApi.emailInvoice(xeroTenantId, invoiceID, requestEmpty); console.log(response.body || response.response.statusCode) } catch (err) { const error = JSON.stringify(err.response.body, null, 2) console.log(`Status Code: ${err.response.statusCode} => ${error}`); }
问题1:示例中的requestEmpty在JavaScript中无法正常工作,使用requestEmpty = { }会触发错误(但邮件仍能发送),正确结构是什么?
示例代码是TypeScript语法,其中RequestEmpty是TS的类型注解,纯JavaScript不支持这种语法,这就是报错的核心原因。
正确处理方式分两种场景:
- 不需要自定义邮件内容:直接省略第三个参数(该参数为可选),或者传递
undefined,避免空对象可能引发的SDK校验错误:try { // 省略第三个参数,直接调用接口 const response = await xero.accountingApi.emailInvoice(xeroTenantId, invoiceID); console.log(response.body || response.response.statusCode) } catch (err) { const error = JSON.stringify(err.response.body, null, 2) console.log(`Status Code: ${err.response.statusCode} => ${error}`); } - 需要自定义邮件内容:使用符合Xero
EmailInvoice结构的对象,可配置字段包括To、Subject、Body等:const customEmailBody = { To: 'customer@example.com', Subject: '您的最新发票', Body: '请查收附件中的发票,如有疑问请联系我们' }; try { const response = await xero.accountingApi.emailInvoice(xeroTenantId, invoiceID, customEmailBody); console.log(response.body || response.response.statusCode) } catch (err) { const error = JSON.stringify(err.response.body, null, 2) console.log(`Status Code: ${err.response.statusCode} => ${error}`); }
问题2:网页端已配置特定邮件模板,能否通过SDK指定发票邮件使用该模板?
目前Xero-node SDK的emailInvoice方法不支持直接指定自定义邮件模板,Xero官方API也未开放该接口能力。发送发票时默认会使用你在Xero网页端设置的「默认发票模板」,而非自定义的特定模板。
替代方案:
- 在Xero网页端将目标自定义模板设置为默认模板,SDK发送时会自动套用该模板;
- 若需保留默认模板,可通过SDK获取发票详情,自行基于自定义模板内容构建邮件,使用第三方邮件服务发送,同时在Xero中标记发票为已发送状态。
内容的提问来源于stack exchange,提问作者Fraser
相关产品推荐
相关产品推荐

