mirror of https://github.com/langgenius/dify.git
feat: add sandbox api rate limit email template
This commit is contained in:
parent
d3d3868b4a
commit
8fb027d331
|
|
@ -42,6 +42,8 @@ class EmailType(StrEnum):
|
|||
TRIGGER_EVENTS_LIMIT_PROFESSIONAL = auto()
|
||||
TRIGGER_EVENTS_USAGE_WARNING_SANDBOX = auto()
|
||||
TRIGGER_EVENTS_USAGE_WARNING_PROFESSIONAL = auto()
|
||||
API_RATE_LIMIT_LIMIT_SANDBOX = auto()
|
||||
API_RATE_LIMIT_WARNING_SANDBOX = auto()
|
||||
|
||||
|
||||
class EmailLanguage(StrEnum):
|
||||
|
|
@ -497,6 +499,30 @@ def create_default_email_config() -> EmailI18nConfig:
|
|||
branded_template_path="without-brand/trigger_events_usage_warning_template_zh-CN.html",
|
||||
),
|
||||
},
|
||||
EmailType.API_RATE_LIMIT_LIMIT_SANDBOX: {
|
||||
EmailLanguage.EN_US: EmailTemplate(
|
||||
subject="You’ve reached your API Rate Limit",
|
||||
template_path="api_rate_limit_limit_template_en-US.html",
|
||||
branded_template_path="without-brand/api_rate_limit_limit_template_en-US.html",
|
||||
),
|
||||
EmailLanguage.ZH_HANS: EmailTemplate(
|
||||
subject="您的 API 速率额度已用尽",
|
||||
template_path="api_rate_limit_limit_template_zh-CN.html",
|
||||
branded_template_path="without-brand/api_rate_limit_limit_template_zh-CN.html",
|
||||
),
|
||||
},
|
||||
EmailType.API_RATE_LIMIT_WARNING_SANDBOX: {
|
||||
EmailLanguage.EN_US: EmailTemplate(
|
||||
subject="You’re nearing your API Rate Limit",
|
||||
template_path="api_rate_limit_warning_template_en-US.html",
|
||||
branded_template_path="without-brand/api_rate_limit_warning_template_en-US.html",
|
||||
),
|
||||
EmailLanguage.ZH_HANS: EmailTemplate(
|
||||
subject="您的 API 速率额度接近上限",
|
||||
template_path="api_rate_limit_warning_template_zh-CN.html",
|
||||
branded_template_path="without-brand/api_rate_limit_warning_template_zh-CN.html",
|
||||
),
|
||||
},
|
||||
EmailType.EMAIL_REGISTER: {
|
||||
EmailLanguage.EN_US: EmailTemplate(
|
||||
subject="Register Your {application_title} Account",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,133 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 434px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.card-header img {
|
||||
width: 68px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<img src="https://assets.dify.ai/images/logo.png" alt="Dify Logo" />
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">You’ve reached your API Rate Limit</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
Your workspace <strong>{{workspaceName}}</strong> has used all available <strong>Monthly API Rate Limit</strong> for the
|
||||
<strong>{{planName}} Plan (limit: {{planLimit}})</strong>.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
As a result, API access has been temporarily paused.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
To continue using the Dify API and unlock a higher limit, please upgrade to a paid plan.
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>Monthly API Rate Limit</strong> for the <strong>{{planName}} Plan</strong> will reset on <strong>{{resetDate}}</strong>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'PingFang SC', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 434px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.card-header img {
|
||||
width: 68px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<img src="https://assets.dify.ai/images/logo.png" alt="Dify Logo" />
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">您的 API 速率额度已用尽</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
您的工作区 <strong>{{workspaceName}}</strong> 已用完 <strong>Monthly API Rate Limit</strong>,触及
|
||||
<strong>{{planName}} 计划(上限:{{planLimit}})</strong>。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
因此,API 访问已被暂时暂停。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
若要继续使用 Dify API 并解锁更高额度,请升级到付费套餐。
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>{{planName}} 计划的 Monthly API Rate Limit</strong> 将于 <strong>{{resetDate}}</strong> 重置。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 454px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.card-header img {
|
||||
width: 68px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<img src="https://assets.dify.ai/images/logo.png" alt="Dify Logo" />
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">You’re nearing your API Rate Limit</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
Your workspace <strong>{{workspaceName}}</strong> has used <strong>80% of its Monthly API Rate Limit</strong> for the
|
||||
<strong>{{planName}} Plan (limit: {{planLimit}})</strong>.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
Once the limit is reached, API access will be temporarily paused until the next monthly reset.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
To avoid service interruptions and ensure continued access to the Dify API, please consider upgrading your plan for a higher API
|
||||
Rate Limit.
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>Monthly API Rate Limit</strong> for the <strong>{{planName}} Plan</strong> will reset on <strong>{{resetDate}}</strong>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'PingFang SC', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 454px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.card-header img {
|
||||
width: 68px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<img src="https://assets.dify.ai/images/logo.png" alt="Dify Logo" />
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">您的 API 速率额度接近上限</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
您的工作区 <strong>{{workspaceName}}</strong> 已使用 <strong>80% 的 Monthly API Rate Limit</strong>,触及
|
||||
<strong>{{planName}} 计划(上限:{{planLimit}})</strong>。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
一旦达到上限,API 访问将暂停,直至下一个月度重置。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
为避免服务中断并持续访问 Dify API,请考虑升级到额度更高的套餐。
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>{{planName}} 计划的 Monthly API Rate Limit</strong> 将于 <strong>{{resetDate}}</strong> 重置。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 434px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
min-height: 101px;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header"></div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">You’ve reached your API Rate Limit</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
Your workspace <strong>{{workspaceName}}</strong> has used all available <strong>Monthly API Rate Limit</strong> for the
|
||||
<strong>{{planName}} Plan (limit: {{planLimit}})</strong>.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
As a result, API access has been temporarily paused.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
To continue using the Dify API and unlock a higher limit, please upgrade to a paid plan.
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>Monthly API Rate Limit</strong> for the <strong>{{planName}} Plan</strong> will reset on <strong>{{resetDate}}</strong>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'PingFang SC', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 434px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
min-height: 101px;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header"></div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">您的 API 速率额度已用尽</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
您的工作区 <strong>{{workspaceName}}</strong> 已用完 <strong>Monthly API Rate Limit</strong>,触及
|
||||
<strong>{{planName}} 计划(上限:{{planLimit}})</strong>。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
因此,API 访问已被暂时暂停。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
若要继续使用 Dify API 并解锁更高额度,请升级到付费套餐。
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>{{planName}} 计划的 Monthly API Rate Limit</strong> 将于 <strong>{{resetDate}}</strong> 重置。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 454px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
min-height: 101px;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header"></div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">You’re nearing your API Rate Limit</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
Your workspace <strong>{{workspaceName}}</strong> has used <strong>80% of its Monthly API Rate Limit</strong> for the
|
||||
<strong>{{planName}} Plan (limit: {{planLimit}})</strong>.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
Once the limit is reached, API access will be temporarily paused until the next monthly reset.
|
||||
</p>
|
||||
<p class="body-text">
|
||||
To avoid service interruptions and ensure continued access to the Dify API, please consider upgrading your plan for a higher API
|
||||
Rate Limit.
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>Monthly API Rate Limit</strong> for the <strong>{{planName}} Plan</strong> will reset on <strong>{{resetDate}}</strong>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Inter', 'PingFang SC', 'Arial', sans-serif;
|
||||
background-color: #e9ebf0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.card {
|
||||
width: 600px;
|
||||
min-height: 454px;
|
||||
margin: 40px auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fcfcfd;
|
||||
border: 1px solid #ffffff;
|
||||
box-shadow: 0px 3px 10px -2px rgba(9, 9, 11, 0.08), 0px 2px 4px -2px rgba(9, 9, 11, 0.06);
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
padding: 36px 48px 24px;
|
||||
min-height: 101px;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
padding: 8px 48px 48px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
line-height: 120%;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.body-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
.body-text {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
|
||||
.body-text strong {
|
||||
font-weight: 600;
|
||||
color: #101828;
|
||||
}
|
||||
|
||||
.cta {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: 504px;
|
||||
height: 32px;
|
||||
padding: 0 16px;
|
||||
gap: 8px;
|
||||
background: #1677ff;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
color: #ffffff !important;
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
letter-spacing: -0.005em;
|
||||
color: #354052;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="card">
|
||||
<div class="card-header"></div>
|
||||
<div class="card-content">
|
||||
<h1 class="title">您的 API 速率额度接近上限</h1>
|
||||
<div class="body-group">
|
||||
<p class="body-text">
|
||||
您的工作区 <strong>{{workspaceName}}</strong> 已使用 <strong>80% 的 Monthly API Rate Limit</strong>,触及
|
||||
<strong>{{planName}} 计划(上限:{{planLimit}})</strong>。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
一旦达到上限,API 访问将暂停,直至下一个月度重置。
|
||||
</p>
|
||||
<p class="body-text">
|
||||
为避免服务中断并持续访问 Dify API,请考虑升级到额度更高的套餐。
|
||||
</p>
|
||||
</div>
|
||||
<a class="cta" href="{{upgradeUrl}}" target="_blank" rel="noopener noreferrer">{{ctaLabel}}</a>
|
||||
<p class="note">
|
||||
<strong>{{planName}} 计划的 Monthly API Rate Limit</strong> 将于 <strong>{{resetDate}}</strong> 重置。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Loading…
Reference in New Issue