网淘吧来吧,欢迎您!

Fanvue技能使用说明

2026-04-01 新闻来源:网淘吧 围观:32
电脑广告
手机广告

Fanvue API 技能

与 Fanvue 创作者平台集成,以管理聊天、帖子、订阅者、收益洞察和媒体内容。

前提条件

1. 创建一个 OAuth 应用

  1. 前往Fanvue 开发者门户
  2. 创建一个新的 OAuth 应用
  3. 记下您的客户端 ID客户端密钥
  4. 配置您的重定向 URI(例如:https://your-app.com/callback

2. 环境变量

设置以下环境变量:

Fanvue

FANVUE_CLIENT_ID=your_client_id
FANVUE_CLIENT_SECRET=your_client_secret
FANVUE_REDIRECT_URI=https://your-app.com/callback

身份验证

Fanvue 使用OAuth 2.0 与 PKCE(代码交换证明密钥)。所有 API 请求都需要:

  • 授权请求头Bearer <access_token>API 版本头部
  • :X-Fanvue-API-Version: 2025-06-26OAuth 权限范围

根据您的需求请求以下权限范围:

权限范围

访问权限openid
OpenID Connect 身份验证offline_access
刷新令牌支持offline
离线访问read:self
读取已认证用户资料read:chat
读取聊天对话write:chat
发送消息、更新聊天read:post
读取帖子write:post
创建帖子Create posts
读取:创作者信息读取订阅者/关注者数据
读取:媒体内容读取媒体库
写入:追踪链接管理活动链接
读取:洞察数据读取收益/分析数据(创作者账户)
读取:订阅者读取订阅者列表(创作者账户)

注意:部分端点(订阅者、洞察数据、收益)需要创作者账户,且可能需要公开文档中未列出的额外权限范围。

快速认证流程

import { randomBytes, createHash } from 'crypto';

// 1. Generate PKCE parameters
const codeVerifier = randomBytes(32).toString('base64url');
const codeChallenge = createHash('sha256')
  .update(codeVerifier)
  .digest('base64url');

// 2. Build authorization URL
const authUrl = new URL('https://auth.fanvue.com/oauth2/auth');
authUrl.searchParams.set('client_id', process.env.FANVUE_CLIENT_ID);
authUrl.searchParams.set('redirect_uri', process.env.FANVUE_REDIRECT_URI);
authUrl.searchParams.set('response_type', 'code');
authUrl.searchParams.set('scope', 'openid offline_access read:self read:chat write:chat read:post');
authUrl.searchParams.set('state', randomBytes(32).toString('hex'));
authUrl.searchParams.set('code_challenge', codeChallenge);
authUrl.searchParams.set('code_challenge_method', 'S256');

// Redirect user to: authUrl.toString()
// 3. Exchange authorization code for tokens
const tokenResponse = await fetch('https://auth.fanvue.com/oauth2/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    grant_type: 'authorization_code',
    client_id: process.env.FANVUE_CLIENT_ID,
    client_secret: process.env.FANVUE_CLIENT_SECRET,
    code: authorizationCode,
    redirect_uri: process.env.FANVUE_REDIRECT_URI,
    code_verifier: codeVerifier,
  }),
});

const tokens = await tokenResponse.json();
// tokens.access_token, tokens.refresh_token

API 基础 URL

所有 API 请求均发送至:https://api.fanvue.com

标准请求头

const headers = {
  'Authorization': `Bearer ${accessToken}`,
  'X-Fanvue-API-Version': '2025-06-26',
  'Content-Type': 'application/json',
};

代理自动化

这些工作流程专为自动化 Fanvue 创作者账户的 AI 代理设计。

访问图像(使用签名 URL)

基础的/media端点仅返回元数据。要获取实际可查看的URL,请使用variants查询参数:

// Step 1: List all media
const list = await fetch('https://api.fanvue.com/media', { headers });
const { data } = await list.json();

// Step 2: Get signed URLs for a specific media item
const media = await fetch(
  `https://api.fanvue.com/media/${uuid}?variants=main,thumbnail,blurred`, 
  { headers }
);
const { variants } = await media.json();

// variants = [
//   { variantType: 'main', url: 'https://media.fanvue.com/private/...' },
//   { variantType: 'thumbnail', url: '...' },
//   { variantType: 'blurred', url: '...' }
// ]

变体类型:

  • main- 完整分辨率的原始文件
  • thumbnail- 优化预览(较小尺寸)
  • blurred- 用于预告的审查版本

创建包含媒体的帖子

// Step 1: Have existing media UUIDs from vault
const mediaIds = ['media-uuid-1', 'media-uuid-2'];

// Step 2: Create post
const response = await fetch('https://api.fanvue.com/posts', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    text: 'Check out my new content! 🔥',
    mediaIds,
    audience: 'subscribers',  // or 'followers-and-subscribers'
    // Optional:
    price: null,              // Set for pay-per-view
    publishAt: null,          // Set for scheduled posts
  }),
});

受众选项:

谁可以查看
subscribers仅付费订阅者
followers-and-subscribers免费关注者和订阅者均可

发送包含媒体的消息

// Get subscriber list for decision making
const subs = await fetch('https://api.fanvue.com/creators/list-subscribers', { headers });
const { data: subscribers } = await subs.json();

// Get top spenders for VIP targeting
const vips = await fetch('https://api.fanvue.com/insights/get-top-spenders', { headers });
const { data: topSpenders } = await vips.json();

// Send personalized message with media
await fetch('https://api.fanvue.com/chat-messages', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    recipientUuid: subscribers[0].userUuid,
    content: 'Thanks for being a subscriber! Here\'s something special for you 💕',
    mediaIds: ['vault-media-uuid'],  // Attach media from vault
  }),
});

// Or send to multiple subscribers at once
await fetch('https://api.fanvue.com/chat-messages/mass', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    recipientUuids: subscribers.map(s => s.userUuid),
    content: 'New exclusive content just dropped! 🎉',
    mediaIds: ['vault-media-uuid'],
  }),
});

智能体决策上下文

为实现有效自动化,请收集以下上下文:

interface AutomationContext {
  // Current media in vault
  media: {
    uuid: string;
    name: string;
    type: 'image' | 'video';
    description: string;  // AI-generated caption
    signedUrl: string;    // From variants query
  }[];
  
  // Audience data
  subscribers: {
    uuid: string;
    name: string;
    subscribedAt: string;
    tier: string;
  }[];
  
  // Engagement signals
  topSpenders: {
    uuid: string;
    totalSpent: number;
  }[];
  
  // Recent earnings for trend analysis
  earnings: {
    period: string;
    total: number;
    breakdown: { type: string; amount: number }[];
  };
}

核心操作

获取当前用户

const response = await fetch('https://api.fanvue.com/users/me', { headers });
const user = await response.json();

列出聊天

const response = await fetch('https://api.fanvue.com/chats', { headers });
const { data, pagination } = await response.json();

发送消息

const response = await fetch('https://api.fanvue.com/chat-messages', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    recipientUuid: 'user-uuid-here',
    content: 'Hello! Thanks for subscribing!',
  }),
});

创建帖子

const response = await fetch('https://api.fanvue.com/posts', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    content: 'New content available!',
    // Add media IDs, pricing, etc.
  }),
});

获取收益

const response = await fetch('https://api.fanvue.com/insights/get-earnings', { headers });
const earnings = await response.json();

列出订阅者

const response = await fetch('https://api.fanvue.com/creators/list-subscribers', { headers });
const { data } = await response.json();

API 参考

请参阅api-reference.md以获取完整的端点文档。


令牌刷新

访问令牌会过期。使用刷新令牌获取新的令牌:

const response = await fetch('https://auth.fanvue.com/oauth2/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    grant_type: 'refresh_token',
    client_id: process.env.FANVUE_CLIENT_ID,
    client_secret: process.env.FANVUE_CLIENT_SECRET,
    refresh_token: currentRefreshToken,
  }),
});

const newTokens = await response.json();

错误处理

常见的 HTTP 状态码:

状态码含义
200成功
400错误请求 - 请检查参数
401未授权 - 令牌过期或无效
403禁止 - 缺少必要权限范围
404资源未找到
429请求频率受限 - 请降低请求速度

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第406630名访客 今日有4篇新文章/评论