网站支持台
SupDesk Team
用一个脚本标签为你的网站添加支持
SupDesk 通过一个脚本标签就能无缝集成到你的网站中。嵌入反馈看板、在线客服和帮助中心——全部可定制,与你的品牌形象匹配。
快速开始:JavaScript 小组件
把这个脚本添加到你的网站:
<script
src="https://cdn.supdesk.app/widget.js"
data-portal="https://feedback.yourapp.com"
defer
></script>该小组件会自动加载到你页面的右下角。
各框架的示例
React:
import { useEffect } from "react";
function SupportWidget() {
useEffect(() => {
const script = document.createElement("script");
script.src = "https://cdn.supdesk.app/widget.js";
script.dataset.portal = "https://feedback.yourapp.com";
script.async = true;
document.body.appendChild(script);
return () => document.body.removeChild(script);
}, []);
return null;
}Vue 3:
<script setup>
import { onMounted, onUnmounted } from "vue";
onMounted(() => {
const script = document.createElement("script");
script.src = "https://cdn.supdesk.app/widget.js";
script.dataset.portal = "https://feedback.yourapp.com";
document.body.appendChild(script);
});
onUnmounted(() => {
const script = document.querySelector('script[src*="supdesk.app"]');
if (script) script.remove();
});
</script>WordPress:
// Add to your theme's functions.php
function add_supdesk_widget() {
}
add_action('wp_footer', 'add_supdesk_widget');或者使用 WordPress 插件仓库中的插件。
Next.js(App Router):
export default function Layout({ children }) {
useEffect(() => {
const script = document.createElement("script");
script.src = "https://cdn.supdesk.app/widget.js";
script.dataset.portal = "https://feedback.yourapp.com";
document.body.appendChild(script);
return () => document.body.removeChild(script);
}, []);
return <>{children}</>;
}网站门户的功能
带投票功能的反馈看板 用户发布想法、为建议投票,并关注接下来要推出的功能。非常适合产品路线图。
在线客服集成 显示在你页面中的小组件。用户通过它对话时,内容会作为一条消息进入你的收件箱,与邮件和门户消息并列。
帮助中心小组件 可搜索的知识库文章,嵌入在你的支持页面或整个站点各处。
自定义域名
从 support.yourapp.com 提供你的门户,自动附带 SSL 和品牌定制。
小组件自定义
配置小组件的外观:
window.SupDesk = {
portal: "https://feedback.yourapp.com",
theme: "light", // or 'dark'
position: "bottom-right", // or 'bottom-left'
color: "#3B82F6", // match your brand
};准备好为你的网站添加支持了吗?
免费开始。无需信用卡。在 supdesk.app 注册
用于后端集成的服务端SDK
从每个SDK的GitHub存储库动态加载的实时代码示例。
import { SupDesk } from "supdesk";
const supdesk = new SupDesk({ apiKey: process.env.SUPDESK_API_KEY! });
// Auto-pages: iterating walks every page for you.
for await (const submission of await supdesk.submissions.list({
status: "open",
})) {
console.log(submission.title);
}
await supdesk.submissions.create({
type: "bug",
title: "Export button does nothing",
email: "user@example.com",
body: "Clicking Export on the reports page has no effect.",
});from supdesk import SupDesk
supdesk = SupDesk() # api_key=... or $SUPDESK_API_KEY
# Auto-pages: iterating walks every page for you.
for submission in supdesk.submissions.list(status="open"):
print(submission.title)
supdesk.submissions.create(
type="bug",
title="Export button does nothing",
email="user@example.com",
body="Clicking Export on the reports page has no effect.",
)import "github.com/rabinapps/supdesk-go/supdesk"
client, err := supdesk.New(os.Getenv("SUPDESK_API_KEY"))
if err != nil {
log.Fatal(err)
}
page, err := client.Submissions.List(ctx, supdesk.SubmissionsListParams{
Status: ptr("open"),
})
if err != nil {
return err
}
// Auto-pages: All walks every page for you.
for sub, err := range page.All(ctx) {
if err != nil {
return err
}
fmt.Println(sub.Title)
}
_, err = client.Submissions.Create(ctx, supdesk.SubmissionsCreateParams{
Type: supdesk.SubmissionTypeBug,
Title: "Export button does nothing",
Email: "user@example.com",
Body: "Clicking Export on the reports page has no effect.",
})import 'dart:io';
import 'package:supdesk/supdesk.dart';
final supdesk = SupDesk(apiKey: Platform.environment['SUPDESK_API_KEY']!);
// Auto-pages: the stream walks every page for you.
final page = await supdesk.submissions.list(status: PostStatus.open);
await for (final submission in page.autoPaging()) {
print(submission.title);
}
await supdesk.submissions.create(
type: SubmissionType.bug,
title: 'Export button does nothing',
email: 'user@example.com',
body: 'Clicking Export on the reports page has no effect.',
);