发票邮件
保存邮件模板
新建集成商的邮件模板或整份覆盖已有模板;保存时校验变量与 HTML。
/openapi/v2/emails/templatestoken、timestamp、sign 三个签名头,参见认证与签名。模板属于集成商而不属于某个主体:任何已注册主体都能用任何模板。不传 templateId 即新建;传了就替换整份模板。主题与正文可用 {{变量}},发送时用票的数据填充;变量名清单取决于 tipoDocumento,见页底枚举。模板与发送的关系见发票邮件。
请求体
templateId*覆盖时必填。 | string | 模板标识 |
tipoDocumento* | string | 发票类型 |
idioma* | string | 模板语言 |
nome* | string | 模板名 |
assunto* | string | 主题模板 |
corpoHtml* | string | 正文模板 |
padrao | bool | 是否默认模板 |
ativo | bool | 是否启用 |
* 必填字段
templateId | string | 模板标识 |
tipoDocumento | string | 发票类型 |
idioma | string | 模板语言 |
nome | string | 模板名 |
assunto | string | 主题模板 |
corpoHtml | string | 正文模板 |
padrao | bool | 是否默认模板 |
ativo | bool | 是否启用 |
variaveisDisponiveis | array | 可用变量清单 |
criadoEm | string | 创建时间 |
atualizadoEm | string | 更新时间 |
模板属于集成商,所有主体共用。同一发票类型可以有多份,例如每种语言一份;padrao 为 true 的那份在发送不传 templateId 时使用。保存即校验:变量不在白名单返回 10021003,HTML 超出白名单返回 10021004,消息会点名是哪一处。
最简模板
葡语 NF-e 模板:主题带票号与开票主体,正文有问候、摘要和 PDF 链接。不传 padrao 与 ativo:模板启用但不是默认。
{"tipoDocumento": "NFe","idioma": "pt","nome": "NF-e simples","assunto": "Nota fiscal {{numero}} - {{emitente.nome}}","corpoHtml": "<p>Olá {{cliente.nome}},</p><p>Segue a nota fiscal {{numero}} emitida por {{emitente.nome}} em {{dataEmissao}}, no valor de R$ {{valorTotal}}.</p><p><a href='{{linkPdf}}'>Baixar DANFE (PDF)</a></p>"}
tipoDocumento* | string | 发票类型 |
idioma* | string | 模板语言 |
nome* | string | 模板名 |
assunto* | string | 主题模板 |
corpoHtml* | string | 正文模板 |
* 必填字段
带 logo 与按钮的模板
葡语 NFS-e 模板并标为默认:页眉放 https 图片,表格用到 NFS-e 专属变量,两个按钮分别指向 {{linkPdf}} 与 {{linkXml}}。图片只能引用公网 https 地址,平台不提供上传。
{"tipoDocumento": "NFSe","idioma": "pt","nome": "NFS-e com logotipo","assunto": "Nota Fiscal de Serviço nº {{numero}} - {{emitente.nome}}","corpoHtml": "<div style='background:#f3f4f6;padding:24px 0;font-family:Arial,Helvetica,sans-serif;color:#1f2937'><div style='max-width:640px;margin:0 auto;background:#ffffff;border-radius:12px;overflow:hidden;border:1px solid #e5e7eb'><div style='padding:20px 28px;border-bottom:1px solid #e5e7eb'><img src='https://v2.tffiscal.com/logo.png' alt='TF Fiscal' width='160' style='display:block;height:auto;border:0'></div><div style='padding:24px 28px'><h2 style='margin:0 0 16px;color:#1a56db;font-size:20px'>Nota Fiscal de Serviço nº {{numero}}</h2><p>Olá <strong>{{cliente.nome}}</strong>,</p><p>Segue a nota fiscal de serviço emitida por <strong>{{emitente.nome}}</strong> (CNPJ {{emitente.cnpj}}) em {{dataEmissao}}.</p><table style='border-collapse:collapse;width:100%;font-size:14px'><tbody><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb;width:40%'>Número / Série</td><td style='padding:8px;border:1px solid #e5e7eb'>{{numero}} / {{serie}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Serviço</td><td style='padding:8px;border:1px solid #e5e7eb'>{{descricaoServico}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Valor total</td><td style='padding:8px;border:1px solid #e5e7eb'>R$ {{valorTotal}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>ISS</td><td style='padding:8px;border:1px solid #e5e7eb'>R$ {{valorIss}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Município</td><td style='padding:8px;border:1px solid #e5e7eb'>{{municipio}}</td></tr><tr><td style='padding:8px;border:1px solid #e5e7eb;background:#f9fafb'>Chave de acesso</td><td style='padding:8px;border:1px solid #e5e7eb;font-family:monospace;font-size:12px'>{{chaveAcesso}}</td></tr></tbody></table><p style='margin-top:20px'><a href='{{linkPdf}}' style='display:inline-block;padding:10px 18px;background:#1a56db;color:#ffffff;text-decoration:none;border-radius:6px;font-weight:bold'>Baixar DANFSe (PDF)</a> <a href='{{linkXml}}' style='display:inline-block;padding:10px 18px;border:1px solid #1a56db;color:#1a56db;text-decoration:none;border-radius:6px;font-weight:bold'>Baixar XML</a></p></div><div style='padding:16px 28px;background:#f9fafb;color:#6b7280;font-size:12px;border-top:1px solid #e5e7eb'>E-mail automático enviado pela plataforma TF Fiscal. Em caso de dúvidas, responda a este e-mail.</div></div></div>","padrao": true}
tipoDocumento* | string | 发票类型 |
idioma* | string | 模板语言 |
nome* | string | 模板名 |
assunto* | string | 主题模板 |
corpoHtml* | string | 正文模板 |
padrao | bool | 是否默认模板 |
* 必填字段
按发票类型的专属变量
英文 CT-e 模板,用到 remetente.nome、destinatario.nome 与 valorFrete。这三个名字只在 CTe 存在,放进 NFe 模板会被 10021003 拒绝。idioma 为 en 时金额格式为 1,234.56,日期为 yyyy-MM-dd HH:mm。
{"tipoDocumento": "CTe","idioma": "en","nome": "CT-e english","assunto": "Transport document {{numero}} from {{emitente.nome}}","corpoHtml": "<p>Hello {{cliente.nome}},</p><p>Transport document {{numero}} issued by {{emitente.nome}} on {{dataEmissao}}.</p><ul><li>Sender: {{remetente.nome}}</li><li>Recipient: {{destinatario.nome}}</li><li>Freight: R$ {{valorFrete}}</li></ul><p><a href='{{linkPdf}}'>Download DACTE (PDF)</a> | <a href='{{linkXml}}'>Download XML</a></p>"}
tipoDocumento* | string | 发票类型 |
idioma* | string | 模板语言 |
nome* | string | 模板名 |
assunto* | string | 主题模板 |
corpoHtml* | string | 正文模板 |
* 必填字段
整份覆盖并停用
传 templateId 时请求体替换整份模板:所有字段都要重传。可选字段不传就回到缺省,所以覆盖默认模板时不带 padrao = true 它就不再是默认。这里同时用 ativo = false 停用;停用的模板一定不是默认。
{"templateId": "2103150000000000001","tipoDocumento": "NFe","idioma": "pt","nome": "NF-e simples (antigo)","assunto": "Nota fiscal {{numero}} - {{emitente.nome}}","corpoHtml": "<p>Olá {{cliente.nome}},</p><p>Segue a nota fiscal {{numero}} emitida por {{emitente.nome}} em {{dataEmissao}}, no valor de R$ {{valorTotal}}.</p><p><a href='{{linkPdf}}'>Baixar DANFE (PDF)</a></p>","ativo": false}
templateId* | string | 模板标识 |
tipoDocumento* | string | 发票类型 |
idioma* | string | 模板语言 |
nome* | string | 模板名 |
assunto* | string | 主题模板 |
corpoHtml* | string | 正文模板 |
ativo | bool | 是否启用 |
* 必填字段
在主题或正文里写 {{nome}};名字以字母开头,可含字母、数字、下划线与点,花括号内可有空格。保存时每个名字都按发票类型的清单校验(见页底枚举);未知名字返回 10021003,而不是在客户收件箱里渲染成空文本。发送时金额与日期按模板 idioma 格式化:pt / es 用 1.234,56 与 dd/MM/yyyy HH:mm;en / zh 用 1,234.56 与 yyyy-MM-dd HH:mm;时刻按圣保罗时区。正文里的取值经 HTML 转义,主题里不转义。{{linkPdf}} 与 {{linkXml}} 渲染为平台下载链接,有效期按集成商设置(缺省 7 天)。
正文只拒绝不清洗:任何超出白名单的内容都返回 10021004 并点名位置,保证保存的模板与实际发出的邮件一致。
- 标签:
p、div、span、br、hr、h1到h6、strong、b、em、i、u、s、ul、ol、li、blockquote、table、thead、tbody、tr、th、td、a、img。 - 属性:
style、href、src、alt、width、height、align、colspan、rowspan。不允许任何事件属性(on...)。 style里不能有url(、expression(、position:、behavior:。href只接受https:、mailto:、{{linkPdf}}、{{linkXml}}。- 图片
src只接受https地址;没有图片上传接口,logo 请放在公网地址。 - 大小上限 64 KB(UTF-8)。
tipoDocumento发票类型
| 取值 | 含义 |
|---|---|
| NFe | NF-e 商品发票 |
| NFSe | NFS-e 服务发票 |
| CTe | CT-e 运输发票 |
| DCe | DC-e 内容申报 |
idioma模板语言
语言决定变量里金额与日期的格式;时刻一律按圣保罗时区。
| 取值 | 含义 |
|---|---|
| pt | 葡萄牙语;金额 1.234,56,日期 dd/MM/yyyy HH:mm |
| en | 英语;金额 1,234.56,日期 yyyy-MM-dd HH:mm |
| zh | 中文;金额 1,234.56,日期 yyyy-MM-dd HH:mm |
| es | 西班牙语;金额 1.234,56,日期 dd/MM/yyyy HH:mm |
corpoHtml模板变量:四类单据共有
写法 {{nome}},花括号内可有空格。无值时渲染为空文本。正文里取值经 HTML 转义,主题里不转义。
| 取值 | 含义 |
|---|---|
| numero | 票号 |
| serie | 系列号 |
| chaveAcesso | 访问密钥,44 位或 50 位 |
| dataEmissao | 开票时间,按圣保罗时区与模板语言格式化 |
| valorTotal | 票面总额,按模板语言格式化;NF-e 取票总额,NFS-e 取服务金额,CT-e 取运输服务总额,DC-e 取申报总额 |
| emitente.nome | 开票主体名称 |
| emitente.cnpj | 开票主体 CNPJ |
| cliente.nome | 收件方名称;NF-e 买方、NFS-e 与 CT-e 承担方、DC-e 收货人 |
| cliente.documento | 收件方证件号,CPF 或 CNPJ |
| linkPdf | PDF 凭证下载链接;有效期按集成商设置,缺省 7 天 |
| linkXml | 授权 XML 下载链接;XML 尚未归档时为空 |
corpoHtml模板变量:NFSe 专属
在其他发票类型的模板里使用会在保存时被拒,10021003。
| 取值 | 含义 |
|---|---|
| codigoVerificacao | NFS-e 校验码 |
| municipio | 开票主体所在市镇名称 |
| descricaoServico | 服务描述 |
| valorIss | ISS 税额,按模板语言格式化 |
corpoHtml模板变量:CTe 专属
在其他发票类型的模板里使用会在保存时被拒,10021003。
| 取值 | 含义 |
|---|---|
| remetente.nome | 发货人名称 |
| destinatario.nome | 收货人名称 |
| valorFrete | 运费总额,按模板语言格式化 |
corpoHtml模板变量:DCe 专属
在其他发票类型的模板里使用会在保存时被拒,10021003。
| 取值 | 含义 |
|---|---|
| marketplace.site | 平台站点,取自主体的 DC-e 档案 |
| 错误码 | HTTP | |
|---|---|---|
| 10001001 | 400 | 字段校验失败:必填为空、超长、tipoDocumento 或 idioma 不在可选值内;每个字段一条。 |
| 10021001 | 404 | 邮件模板不存在:templateId 不存在或不属于本集成商。 |
| 10021003 | 400 | 模板引用了白名单之外的变量;消息列出名字。核对 tipoDocumento 与变量枚举。 |
| 10021004 | 400 | 模板 HTML 含禁止的内容:标签、属性、style、href 或 src 超出白名单,或正文超过 64 KB;消息逐处点名。 |
