296 lines
7.3 KiB
TypeScript
296 lines
7.3 KiB
TypeScript
|
|
interface ApiHeader {
|
|||
|
|
name: string
|
|||
|
|
value: string
|
|||
|
|
description: string
|
|||
|
|
required: boolean
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface ApiParameter {
|
|||
|
|
name: string
|
|||
|
|
type: string
|
|||
|
|
description: string
|
|||
|
|
required: boolean
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface ApiEndpoint {
|
|||
|
|
method: string
|
|||
|
|
url: string
|
|||
|
|
description: string
|
|||
|
|
headers: ApiHeader[]
|
|||
|
|
parameters: ApiParameter[]
|
|||
|
|
response: any
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface CodeExample {
|
|||
|
|
language: string
|
|||
|
|
title: string
|
|||
|
|
code: string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface ApiGuide {
|
|||
|
|
title: string
|
|||
|
|
description: string
|
|||
|
|
endpoints: ApiEndpoint[]
|
|||
|
|
examples: CodeExample[]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export function getApiGuideForScenario(scenarioId: string, channel: string): ApiGuide {
|
|||
|
|
const baseUrl = typeof window !== "undefined" ? window.location.origin : ""
|
|||
|
|
const webhookUrl = `${baseUrl}/api/scenarios/${channel}/${scenarioId}/webhook`
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
title: `${getChannelName(channel)}获客计划接口文档`,
|
|||
|
|
description: `通过此接口,您可以将外部系统收集的客户信息直接导入到存客宝的${getChannelName(channel)}获客计划中。`,
|
|||
|
|
endpoints: [
|
|||
|
|
{
|
|||
|
|
method: "POST",
|
|||
|
|
url: webhookUrl,
|
|||
|
|
description: "添加新客户到获客计划",
|
|||
|
|
headers: [
|
|||
|
|
{
|
|||
|
|
name: "X-API-KEY",
|
|||
|
|
value: "您的API密钥",
|
|||
|
|
description: "用于身份验证的API密钥",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "Content-Type",
|
|||
|
|
value: "application/json",
|
|||
|
|
description: "请求体格式",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
parameters: [
|
|||
|
|
{
|
|||
|
|
name: "name",
|
|||
|
|
type: "string",
|
|||
|
|
description: "客户姓名",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "phone",
|
|||
|
|
type: "string",
|
|||
|
|
description: "客户手机号码",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "source",
|
|||
|
|
type: "string",
|
|||
|
|
description: "客户来源",
|
|||
|
|
required: false,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "remark",
|
|||
|
|
type: "string",
|
|||
|
|
description: "备注信息",
|
|||
|
|
required: false,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "tags",
|
|||
|
|
type: "array<string>",
|
|||
|
|
description: "客户标签",
|
|||
|
|
required: false,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
response: {
|
|||
|
|
success: true,
|
|||
|
|
data: {
|
|||
|
|
id: "12345",
|
|||
|
|
name: "张三",
|
|||
|
|
phone: "13800138000",
|
|||
|
|
createdAt: "2023-05-15T08:30:00Z",
|
|||
|
|
},
|
|||
|
|
message: "客户添加成功",
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
method: "GET",
|
|||
|
|
url: `${webhookUrl}?name=张三&phone=13800138000`,
|
|||
|
|
description: "通过GET请求添加新客户(适用于简单集成场景)",
|
|||
|
|
headers: [
|
|||
|
|
{
|
|||
|
|
name: "X-API-KEY",
|
|||
|
|
value: "您的API密钥",
|
|||
|
|
description: "用于身份验证的API密钥",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
parameters: [
|
|||
|
|
{
|
|||
|
|
name: "name",
|
|||
|
|
type: "string",
|
|||
|
|
description: "客户姓名",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "phone",
|
|||
|
|
type: "string",
|
|||
|
|
description: "客户手机号码",
|
|||
|
|
required: true,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "source",
|
|||
|
|
type: "string",
|
|||
|
|
description: "客户来源",
|
|||
|
|
required: false,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: "remark",
|
|||
|
|
type: "string",
|
|||
|
|
description: "备注信息",
|
|||
|
|
required: false,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
response: {
|
|||
|
|
success: true,
|
|||
|
|
data: {
|
|||
|
|
id: "12345",
|
|||
|
|
name: "张三",
|
|||
|
|
phone: "13800138000",
|
|||
|
|
createdAt: "2023-05-15T08:30:00Z",
|
|||
|
|
},
|
|||
|
|
message: "客户添加成功",
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
examples: [
|
|||
|
|
{
|
|||
|
|
language: "curl",
|
|||
|
|
title: "CURL",
|
|||
|
|
code: `curl -X POST "${webhookUrl}" \\
|
|||
|
|
-H "X-API-KEY: your_api_key" \\
|
|||
|
|
-H "Content-Type: application/json" \\
|
|||
|
|
-d '{
|
|||
|
|
"name": "张三",
|
|||
|
|
"phone": "13800138000",
|
|||
|
|
"source": "官网表单",
|
|||
|
|
"remark": "对产品很感兴趣"
|
|||
|
|
}'`,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
language: "python",
|
|||
|
|
title: "Python",
|
|||
|
|
code: `import requests
|
|||
|
|
|
|||
|
|
url = "${webhookUrl}"
|
|||
|
|
headers = {
|
|||
|
|
"X-API-KEY": "your_api_key",
|
|||
|
|
"Content-Type": "application/json"
|
|||
|
|
}
|
|||
|
|
data = {
|
|||
|
|
"name": "张三",
|
|||
|
|
"phone": "13800138000",
|
|||
|
|
"source": "官网表单",
|
|||
|
|
"remark": "对产品很感兴趣"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response = requests.post(url, headers=headers, json=data)
|
|||
|
|
print(response.json())`,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
language: "javascript",
|
|||
|
|
title: "JavaScript",
|
|||
|
|
code: `// 使用fetch API
|
|||
|
|
fetch("${webhookUrl}", {
|
|||
|
|
method: "POST",
|
|||
|
|
headers: {
|
|||
|
|
"X-API-KEY": "your_api_key",
|
|||
|
|
"Content-Type": "application/json"
|
|||
|
|
},
|
|||
|
|
body: JSON.stringify({
|
|||
|
|
name: "张三",
|
|||
|
|
phone: "13800138000",
|
|||
|
|
source: "官网表单",
|
|||
|
|
remark: "对产品很感兴趣"
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
.then(response => response.json())
|
|||
|
|
.then(data => console.log(data))
|
|||
|
|
.catch(error => console.error("Error:", error));`,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
language: "java",
|
|||
|
|
title: "Java",
|
|||
|
|
code: `import java.net.URI;
|
|||
|
|
import java.net.http.HttpClient;
|
|||
|
|
import java.net.http.HttpRequest;
|
|||
|
|
import java.net.http.HttpResponse;
|
|||
|
|
|
|||
|
|
public class ApiExample {
|
|||
|
|
public static void main(String[] args) {
|
|||
|
|
try {
|
|||
|
|
String url = "${webhookUrl}";
|
|||
|
|
String requestBody = "{" +
|
|||
|
|
"\\\"name\\\": \\\"张三\\\"," +
|
|||
|
|
"\\\"phone\\\": \\\"13800138000\\\"," +
|
|||
|
|
"\\\"source\\\": \\\"官网表单\\\"," +
|
|||
|
|
"\\\"remark\\\": \\\"对产品很感兴趣\\\"" +
|
|||
|
|
"}";
|
|||
|
|
|
|||
|
|
HttpClient client = HttpClient.newHttpClient();
|
|||
|
|
HttpRequest request = HttpRequest.newBuilder()
|
|||
|
|
.uri(URI.create(url))
|
|||
|
|
.header("X-API-KEY", "your_api_key")
|
|||
|
|
.header("Content-Type", "application/json")
|
|||
|
|
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
|
|||
|
|
.build();
|
|||
|
|
|
|||
|
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
|||
|
|
System.out.println(response.body());
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
e.printStackTrace();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}`,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
language: "php",
|
|||
|
|
title: "PHP",
|
|||
|
|
code: `<?php
|
|||
|
|
$url = "${webhookUrl}";
|
|||
|
|
$data = array(
|
|||
|
|
'name' => '张三',
|
|||
|
|
'phone' => '13800138000',
|
|||
|
|
'source' => '官网表单',
|
|||
|
|
'remark' => '对产品很感兴趣'
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$options = array(
|
|||
|
|
'http' => array(
|
|||
|
|
'header' => "X-API-KEY: your_api_key\\r\\nContent-type: application/json\\r\\n",
|
|||
|
|
'method' => 'POST',
|
|||
|
|
'content' => json_encode($data)
|
|||
|
|
)
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$context = stream_context_create($options);
|
|||
|
|
$result = file_get_contents($url, false, $context);
|
|||
|
|
|
|||
|
|
if ($result === FALSE) {
|
|||
|
|
echo "Error";
|
|||
|
|
} else {
|
|||
|
|
var_dump(json_decode($result));
|
|||
|
|
}
|
|||
|
|
?>`,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getChannelName(channel: string): string {
|
|||
|
|
const channelMap: Record<string, string> = {
|
|||
|
|
douyin: "抖音",
|
|||
|
|
kuaishou: "快手",
|
|||
|
|
xiaohongshu: "小红书",
|
|||
|
|
weibo: "微博",
|
|||
|
|
haibao: "海报",
|
|||
|
|
phone: "电话",
|
|||
|
|
gongzhonghao: "公众号",
|
|||
|
|
weixinqun: "微信群",
|
|||
|
|
payment: "付款码",
|
|||
|
|
api: "API",
|
|||
|
|
}
|
|||
|
|
return channelMap[channel] || channel
|
|||
|
|
}
|
|||
|
|
|