FastComments.com

FastComments の API

FastComments は多数のリソースとやり取りするための API を提供しています。プラットフォームと統合を構築したり、独自のクライアントを作成したりできます!

このドキュメントでは、API がサポートするすべてのリソースを、リクエストとレスポンスの型とともに記載しています。

エンタープライズ顧客向けに、すべての API アクセスは監査ログに記録されます。

生成された SDK

FastComments はコードから API 仕様 を生成するようになりました(まだ完全ではありませんが、多くの API が含まれています)。

We also now have SDKs for popular languages:

認証

API は、API キーX-API-KEY ヘッダーまたは API_KEY クエリパラメータのいずれかとして渡すことで認証されます。API 呼び出しには tenantId も必要です。これは API キー と同じページから取得できます。

セキュリティに関する注意

これらのルートはサーバーから呼び出すことを想定しています。ブラウザから呼び出さないでください。そうすると API キーが公開されてしまい、ページのソースコードを閲覧できる誰にでもアカウントへの完全なアクセス権が与えられてしまいます!

認証オプション 1 - ヘッダー

  • ヘッダー: X-API-KEY
  • ヘッダー: X-TENANT-ID

認証オプション 2 - クエリパラメータ

  • クエリパラメータ: API_KEY
  • クエリパラメータ: tenantId

監査ログの構造 Internal Link

AuditLog はこの機能にアクセスできるテナントの監査イベントを表すオブジェクトです。

AuditLog オブジェクトの構造は次のとおりです:

AuditLog の構造
Copy Copy
1
2interface AuditLog {
3 id: string;
4 userId?: string;
5 username?: string;
6 resourceName: string;
7 crudType: 'c' | 'r' | 'u' | 'd' | 'login';
8 from: string;
9 url?: string;
10 ip?: string;
11 when: string;
12 description?: string;
13 serverStartDate: string;
14 objectDetails?: object;
15}
16

監査ログは不変です。手動で書き込むこともできません。FastComments.com のみが監査ログに書き込むタイミングを決定できます。ただし、この API を通じて読み取ることはできます。

監査ログ内のイベントは2年で期限切れになります。

コメントの構造 Internal Link

A Comment オブジェクトは、ユーザーが残したコメントを表します。

親コメントと子コメントの関係は parentId を通じて定義されます。

Comment オブジェクトの構造は次のとおりです:

コメント構造
Copy Copy
1
2interface Comment {
3 /** 読み取り専用: スパムエンジンがコメントをスパムと判定した場合に true に設定されます。 **/
4 aiDeterminedSpam?: boolean
5 /** コメントが表示承認されているか。コメント保存時に true に設定されます。そうでない場合は非表示になります。 **/
6 approved?: boolean
7 /** ユーザーのアバター。 **/
8 avatarSrc?: string
9 /** 子コメント。すべてのシナリオで設定されるわけではありません。API で asTree を true にした場合に使用されます。 **/
10 children: Comment[]
11 /** コメント投稿者の生のコメント。 **/
12 comment: string
13 /** 読み取り専用: コメント投稿者のコメントを HTML に変換したもの。 **/
14 commentHTML?: string
15 /** コメント投稿者のメールアドレス。匿名コメントが無効の場合は必須です。 **/
16 commenterEmail?: string
17 /** コメント投稿者のリンク(例: ブログ)。 **/
18 commenterLink?: string
19 /** コメント投稿者の名前。常に必須です。利用できない場合は「Anonymous」などに設定してください。 **/
20 commenterName: string
21 /** コメントが残された日付(UTC エポック)。 **/
22 date: number
23 /** コメントの「表示ラベル」— 例えば「Admin」「Moderator」や「VIP User」など。 **/
24 displayLabel?: string
25 /** コメントが投稿されたドメイン。 **/
26 domain?: string
27 /** 読み取り専用: コメントが通報された回数。 **/
28 flagCount?: number
29 /** コメント内で成功裏に解析された #ハッシュタグ。クエリのためにハッシュタグを手動で追加することもできますが、コメント本文には自動的には表示されません。 **/
30 hashTags?: CommentHashTag[]
31 /** 読み取り専用: コメントに画像が含まれているか。 **/
32 hasImages?: boolean
33 /** 読み取り専用: コメントにリンクが含まれているか。 **/
34 hasLinks?: boolean
35 /** 読み取り専用: ユニークなコメント ID。 **/
36 id: string
37 /** 作成時のみ!保存のためにハッシュされます。 **/
38 ip?: string
39 /** 読み取り専用: 現在のユーザーがこのコメントを書いたユーザーをブロックしているか(contextUserId)。 **/
40 isBlocked?: boolean
41 /** 読み取り専用: コメントが管理者によるものか。userId に基づいて自動設定されます。 **/
42 isByAdmin?: boolean
43 /** 読み取り専用: コメントがモデレーターによるものか。userId に基づいて自動設定されます。 **/
44 isByModerator?: boolean
45 /** コメントがソフト削除された場合(何らかの別の設定のためプレースホルダを残す必要があった場合)に true に設定されます。 **/
46 isDeleted?: boolean
47 /** ユーザーのアカウントが削除され、コメントを保持する必要があった場合に true に設定されます。 **/
48 isDeletedUser?: boolean
49 /** 読み取り専用: 現在ログインしているユーザー(contextUserId)によって通報されたか。 **/
50 isFlagged?: boolean
51 /** コメントがピン留めされているか。 **/
52 isPinned?: boolean
53 /** 新しい返信ができないようにロックされているか(モデレーターは引き続き返信可能)。 **/
54 isLocked?: boolean
55 /** コメントがスパムかどうか。 **/
56 isSpam?: boolean
57 /** 読み取り専用: 現在のユーザー(contextUserId)によるダウン投票か。 **/
58 isVotedDown?: boolean
59 /** 読み取り専用: 現在のユーザー(contextUserId)によるアップ投票か。 **/
60 isVotedUp?: boolean
61 /** コメントの言語ロケール。指定がない場合は HTTP の言語受け入れヘッダから決定されます。 **/
62 locale?: 'de_de' | 'en_us' | 'es_es' | 'fr_fr' | 'it_it' | 'ja_jp' | 'ko_kr' | 'pl_pl' | 'pt_br' | 'ru_ru' | 'tr_tr' | 'zh_cn' | 'zh_tw'
63 /** 読み取り専用: コメント内で成功裏に解析された @メンション。 **/
64 mentions?: CommentUserMention[]
65 /** コメントに関連付けられたオプションのメタデータ。 **/
66 meta?: Record<string, string | number | boolean>
67 /** このコメントに関連付けられたモデレーショングループ ID のオプションリスト。 **/
68 moderationGroupIds?: string[]|null
69 /** 読み取り専用: このコメントに対して現在のユーザー(contextUserId)が行った投票に対応する vote オブジェクトの ID。 **/
70 myVoteId?: string
71 /** このコメントに対して返信者向けの通知が送信されたか。インポート時に通知を送らないようにするには、これを true に設定します。 **/
72 notificationSentForParent?: boolean
73 /** テナントユーザー向けの通知が送信されたか。インポート時に通知を送らないようにするには、これを true に設定します。 **/
74 notificationSentForParentTenant?: boolean
75 /** このコメントがあったページのタイトル。 **/
76 pageTitle?: string
77 /** 返信している場合、返信先のコメント ID。 **/
78 parentId?: string|null
79 /** コメントがレビュー済みとしてマークされているか。 **/
80 reviewed: boolean
81 /** コメントが属するテナント ID。 **/
82 tenantId: string
83 /** コメントを書いたユーザー。名前/メールでコメントを保存すると自動的に作成されます。 **/
84 userId?: string|null
85 /** このコメントが表示される場所(例: ブログ記事)の URL。 **/
86 url: string
87 /** あなたが渡した urlId の「クリーン」なバージョン。保存時にはこのフィールドを指定しますが、コメントを取得するときには「クリーン」化され、元の値は "urlIdRaw" に移されます。 **/
88 urlId: string
89 /** 読み取り専用: あなたが渡した元の urlId。 **/
90 urlIdRaw?: string
91 /** ユーザーとこのコメントが検証済みか。 **/
92 verified: boolean
93 /** 賛成票の数。 **/
94 votesUp?: number
95 /** 反対票の数。 **/
96 votesDown?: number
97 /** コメントの「カルマ」(= 賛成票 - 反対票)。 **/
98 votes?: number
99}
100

これらのフィールドの一部は READONLY としてマークされています — これらは API によって返されますが、設定することはできません。

コメントテキストの構造

コメントは FastComments 仕様のマークダウンで記述されます。これはマークダウンに、画像用の従来の bbcode スタイルタグ([img]path[/img] のような)を追加したものです。

テキストは 2 つのフィールドに保存されます。ユーザーが入力したテキストは修正されず comment フィールドに保存されます。これがレンダリングされ、commentHTML フィールドに保存されます。

許可されている HTML タグは b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br です。

HTML は非常に限定されたサブセットなので、HTML をレンダリングすることを推奨します。レンダラーを作るのは比較的簡単です。例えば React Native や Flutter 用のライブラリがいくつかあります。

comment フィールドの正規化されていない値をレンダリングすることも選択できます。 例のパーサーはこちら。

この例のパーサーは HTML に合わせて調整し、HTML タグをプラットフォームでレンダリングするための期待される要素に変換することもできます。

タギング

ユーザーがコメント内でタグ付けされた場合、その情報は mentions と呼ばれるリストに保存されます。リスト内の各オブジェクトは次の構造を持ちます。

コメントのメンションオブジェクト
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ユーザー ID。SSO ユーザーの場合はテナント ID がプレフィックスとして付与されます。 **/
4 id: string
5 /** 最終的な @メンションのタグテキスト(@ 記号を含む)。 **/
6 tag: string
7 /** 元の @メンションのタグテキスト(@ 記号を含む)。 **/
8 rawTag: string
9 /** タグ付けされたユーザーのタイプ。user = FastComments.com アカウント、sso = SSOUser。 **/
10 type: 'user'|'sso'
11 /** ユーザーが通知をオプトアウトしている場合でも、これは true に設定されます。 **/
12 sent: boolean
13}
14

ハッシュタグ

ハッシュタグが使用され、正常に解析された場合、その情報は hashTags と呼ばれるリストに保存されます。リスト内の各オブジェクトは次の構造を持ちます。retain が設定されている場合、ハッシュタグはクエリ用にコメントの hashTags 配列に手動で追加することもできます。

コメントのハッシュタグオブジェクト
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** ハッシュタグ ID。 **/
4 id: string
5 /** 最終的な #ハッシュタグのタグテキスト(# 記号を含む)。 **/
6 tag: string
7 /** ハッシュタグがカスタム URL に関連付けられている場合、ここに定義されます。 **/
8 url?: string
9 /** コメントが更新されたときに、コメント本文に存在しない場合でもハッシュタグを保持するか。コメントテキストを変更せずにコメントにタグ付けする場合に便利です。 **/
10 retain?: boolean
11}
12

メールテンプレートの構造 Internal Link

An EmailTemplate object represents configuration for a custom email template, for a tenant.

The system will select the email template to use via:

  • Its type identifier, we call this emailTemplateId. These are constants.
  • The domain. We will first try to find a template for the domain that the related object (like a Comment) is tied to, and if a match is not found then we will try to find a template where domain is null or *.

The structure for the EmailTemplate object is as follows:

メールテンプレートの構造
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** 読み取り専用 **/
8 createdAt: string
9 /** 読み取り専用 **/
10 updatedAt: string
11 /** 読み取り専用 **/
12 updatedByUserId: string
13 /** テンプレートが関連付けられるドメイン。 **/
14 domain?: string | '*' | null
15 /** EJS 構文で記述されたメールテンプレートの内容。 **/
16 ejs: string
17 /** サポートされている各ロケールごとの、上書きされた翻訳キーから値へのマップ。 **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** テンプレートのレンダリングコンテキストを表すオブジェクト。 **/
20 testData: object
21}
22

注意

  • You can get the valid emailTemplateId values from the /definitions endpoint.
  • The /definitions endpoint also includes the default translations and test data.
  • Templates will fail to save with invalid structure or test data.

ハッシュタグの構造 Internal Link

A HashTag オブジェクトはユーザーが残すことのできるタグを表します。ハッシュタグは外部のコンテンツへのリンクに使用したり、関連するコメントを結びつけるために使用できます。

The structure for the HashTag object is as follows:

HashTag 構造
Copy Copy
1
2interface HashTag {
3 /** "#" または任意の指定文字で始める必要があります。 **/
4 tag: string
5 /** ハッシュタグが指すオプションのURL。ハッシュタグでコメントをフィルタリングする代わりに、UIはクリック時にこのURLへリダイレクトします。 **/
6 url?: string
7 /** 読み取り専用 **/
8 createdAt: string
9}
10

Notes:

  • In some API endpoints you will see that the hashtag is used in the URL. Remember to URI-Encoded values. For example, # should instead be represented as %23.
  • Some of these fields are marked READONLY - these are returned by the API but cannot be set.

通知数の構造 Internal Link

NotificationCount オブジェクトはユーザーの未読通知数とメタデータを表します。

未読の通知がない場合、ユーザーに対する NotificationCount は存在しません。

NotificationCount オブジェクトは自動的に作成され、API経由で作成することはできません。これらは1年で期限切れになります。

ユーザーの未読通知数は、その NotificationCount を削除することでクリアできます。

NotificationCount オブジェクトの構造は次のとおりです:

NotificationCount の構造
Copy Copy
1
2interface NotificationCount {
3 id: string // ユーザーID
4 count: number
5 createdAt: string // 日付文字列
6 expireAt: string // 日付文字列
7}
8

通知の構造 Internal Link

Notificationオブジェクトはユーザーのための通知を表します。

Notificationオブジェクトは自動的に作成され、API経由で作成することはできません。これらはまた1年後に期限切れになります。

通知は削除できません。ただし、viewedfalseに設定するよう更新することはでき、viewedでクエリすることができます。

ユーザーは、通知のoptedOuttrueにすることで特定のコメントの通知をオプトアウトできます。再度受け取りたい場合はfalseに設定してください。

通知にはさまざまなタイプがあります — relatedObjectTypetypeを確認してください。

通知の作成方法は非常に柔軟で、多くのシナリオでトリガーされます(NotificationTypeを参照)。

現在、Notificationの存在がメールが送信される、または送信されるべきであることを意味するわけではありません。むしろ、通知は通知フィードおよび関連する統合で使用されます。

Notificationオブジェクトの構造は次のとおりです:

通知の構造
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** 誰かがあなたに返信した場合。 **/
10 RepliedToMe = 0,
11 /** あなたがコメントしたスレッド内のどこか(子の子も含む)で誰かが返信した場合。 **/
12 RepliedTransientChild = 1,
13 /** あなたのコメントがアップボートされた場合。 **/
14 VotedMyComment = 2,
15 /** あなたが購読しているページのルートに新しいコメントが残された場合。 **/
16 SubscriptionReplyRoot = 3,
17 /** 誰かがあなたのプロフィールにコメントした場合。 **/
18 CommentedOnProfile = 4,
19 /** ダイレクトメッセージ(DM)がある場合。 **/
20 DirectMessage = 5,
21 /** TrialLimitsはテナントユーザーのみ対象です。 **/
22 TrialLimits = 6,
23 /** あなたが@メンションされた場合。 **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** SSOを使用する場合、ユーザーIDの形式は `<tenant id>:<user id>`です。 **/
31 userId?: string
32 /** SSOを扱う際は、`userId`のみ気にすればよいです。 **/
33 anonUserId?: string
34 /** urlIdはほとんどの場合定義されています。テナントレベルの通知の場合のみ省略可能で、これは稀です。 **/
35 urlId?: string
36 /** URLは通知のソースへ迅速に移動できるようキャッシュされます。 **/
37 url?: string
38 /** ページタイトルは通知のソースを素早く確認できるようキャッシュされます。 **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** 例えば、コメントID。 **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // 日付文字列
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserNameとfromUserAvatarSrcは通知の表示を迅速に行うためにここでキャッシュされます。ユーザーが更新されるとこれらも更新されます。 **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** これをtrueに設定するとこのオブジェクトの通知を受け取らなくなります。 **/
53 optedOut?: boolean
54}
55

ページの構造 Internal Link

A Page object represents the page that many comments may belong to. This relationship is defined by urlId.

A Page stores information such as the page title, comment count, and urlId.

The structure for the Page object is as follows:

ページ構造
Copy Copy
1
2interface Page {
3 id: string
4 urlId: string
5 url: string
6 title?: string
7 createdAt: string
8 commentCount: number
9 rootCommentCount: number
10 /** これを null に設定すると、すべての SSO ユーザーがページを閲覧できます。空のリストは、すべてのユーザーに対して閉じられていることを意味します。 **/
11 accessibleByGroupIds?: string[] | null
12 /** このページは新しいコメントの受付を停止していますか? **/
13 isClosed?: boolean
14}
15

保留中のWebhookイベントの構造 Internal Link

A PendingWebhookEvent object represents a queued webhook event that is pending.

PendingWebhookEvent オブジェクトは自動的に作成され、API 経由で手動作成することはできません。これらはまた 1 年後に期限切れになります。 それらは削除可能で、削除するとキューからタスクが取り除かれます。

異なるイベントタイプがあります — eventTypeOutboundSyncEventType)と typeOutboundSyncType)を確認してください。

この API の一般的なユースケースはカスタム監視を実装することです。指定したフィルターに対する未処理数をポーリングするために、/count エンドポイントを定期的に呼び出すことがあるでしょう。

The structure for the PendingWebhookEvent object is as follows:

PendingWebhookEvent の構造
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** WordPress-specific sync task. **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** The comment id associated with the event. **/
17 commentId: string
18 /** The comment object for the event at the time of the event. We started adding these in Nov 2023. **/
19 comment: Comment
20 /** An external id that may be associated with the comment. **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** Set before first attempt, and after every failure. **/
26 nextAttemptAt: Date
27 /** Whether this is a creation, deletion, or update event... **/
28 eventType: OutboundSyncEventType
29 /** The type of sync to perform (WordPress, call API, etc). **/
30 type: OutboundSyncType
31 /** The domain that matched the comment. We use this domain to pick the API key. **/
32 domain: string
33 /** The last error that occurred. This type is untyped and is a "dump" of whatever happened. Usually it contains an object with statusCode, body, and a headers map. **/
34 lastError: object | null
35}
36

SSOユーザーの構造 Internal Link

FastComments は使いやすい SSO ソリューションを提供します。HMAC ベースの統合を使用したユーザー情報の更新は、ユーザーが更新されたペイロードでページを読み込むだけで簡単に行えます。

ただし、アプリケーションの整合性を高めるために、そのフロー外でユーザーを管理したい場合もあります。

SSO User API は、SSOUsers と呼ぶオブジェクトを CRUD する方法を提供します。これらのオブジェクトは通常の Users と異なり、型安全性のために別に保持されています。

SSOUser オブジェクトの構造は次のとおりです:

SSOUser の構造
Copy Copy
1
2interface SSOUser {
3 id: string
4 username: string
5 email?: string
6 websiteUrl?: string
7 signUpDate: number
8 createdFromUrlId?: string
9 loginCount?: number
10 avatarSrc?: string
11 optedInNotifications?: boolean
12 optedInSubscriptionNotifications?: boolean
13 displayLabel?: string
14 displayName?: string
15 isAccountOwner?: boolean // 管理者権限 - このフラグが付いた SSO ユーザーは SSO 管理者として課金されます(通常の SSO ユーザーとは別扱い)
16 isAdminAdmin?: boolean // 管理者権限 - このフラグが付いた SSO ユーザーは SSO 管理者として課金されます(通常の SSO ユーザーとは別扱い)
17 isCommentModeratorAdmin?: boolean // モデレーター権限 - このフラグが付いた SSO ユーザーは SSO モデレーターとして課金されます(通常の SSO ユーザーとは別扱い)
18 /** null の場合、アクセス制御はユーザーに適用されません。空のリストの場合、このユーザーはページを閲覧したり他のユーザーを @mention することができなくなります。 **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** 他のユーザーがこのユーザーのプロフィール上のアクティビティ(コメントを含む)を見られないようにします。デフォルトは安全なプロフィールを提供するため true です。 **/
22 isProfileActivityPrivate?: boolean
23 /** 他のユーザーがこのユーザーのプロフィールにコメントを残したり、既存のプロフィールコメントを見たりできないようにします。デフォルトは false です。 **/
24 isProfileCommentsPrivate?: boolean
25 /** 他のユーザーがこのユーザーにダイレクトメッセージを送信できないようにします。デフォルトは false です。 **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** ユーザーバッジのオプション設定。 **/
29 badgeConfig?: {
30 /** ユーザーに割り当てるバッジ ID の配列。30 個までに制限されています。順序は尊重されます。 **/
31 badgeIds: string[]
32 /** true の場合、表示されている既存のバッジをすべて提供されたバッジで置き換えます。false の場合、既存のバッジに追加します。 **/
33 override?: boolean
34 /** true の場合、テナント設定からバッジの表示プロパティを更新します。 **/
35 update?: boolean
36 }
37}
38

SSO ユーザーの課金

SSO ユーザーは権限フラグに応じて異なる方法で課金されます:

  • 通常の SSO ユーザー: 管理者またはモデレーター権限を持たないユーザーは通常の SSO ユーザーとして課金されます
  • SSO 管理者: isAccountOwner または isAdminAdmin フラグを持つユーザーは、別個に SSO 管理者として課金されます(通常のテナント管理者と同じ料金)
  • SSO モデレーター: isCommentModeratorAdmin フラグを持つユーザーは、別個に SSO モデレーターとして課金されます(通常のモデレーターと同じ料金)

重要: 二重課金を防ぐため、システムはメールアドレスで SSO ユーザーを通常のテナントユーザーおよびモデレーターと自動的に重複排除します。SSO ユーザーが通常のテナントユーザーまたはモデレーターと同じメールを持っている場合、二重に課金されることはありません。

アクセス制御

ユーザーはグループに分けることができます。これが groupIds フィールドの目的で、オプションです。

@メンション

デフォルトでは、@ を入力すると @mentionsusername を使って他の SSO ユーザーを検索します。displayName が使用されている場合、displayName に一致する結果があるときは username に一致する結果は無視され、@mention の検索結果は displayName を使用します。

サブスクリプション

FastComments では、ユーザーはコメントウィジェットのベルアイコンをクリックして「購読」をクリックすることでページを購読できます。

通常ユーザーの場合、通知設定に基づいて通知メールを送信します。

SSO ユーザーについては、後方互換性のためにこれを区別しています。追加の購読通知メールは optedInSubscriptionNotificationstrue に設定した場合にのみ送信されます。

バッジ

badgeConfig プロパティを使って SSO ユーザーにバッジを割り当てることができます。バッジはコメント内でユーザー名の横に表示される視覚的な表示です。

  • badgeIds - ユーザーに割り当てるバッジ ID の配列。これらはあなたの FastComments アカウントで作成された有効なバッジ ID である必要があります。30 個までに制限されています。
  • override - true の場合、コメントに表示されている既存のバッジはすべて提供されたバッジで置き換えられます。false または省略した場合、提供されたバッジは既存のバッジに追加されます。
  • update - true の場合、ユーザーがログインするたびにテナントの設定からバッジの表示プロパティが更新されます。

サブスクリプションの構造 Internal Link

A Subscription object represents a subscription for a user.

Subscription objects are created when a user clicks the notification bell in the comment widget and clicks "Subscribe to this page".

Subscriptions can also be created via the API.

Having a Subscription object causes Notification objects to be generated, and emails sent, when new comments are left on the root of the associated page that the Subscription is for. Sending of emails depends on the type of user. For regular users this depends on optedInNotifications. For SSO Users this depends on optedInSubscriptionNotifications. Note that some applications may not have the concept of a web-accessible page, in which case simply set urlId to the id of the item you are subscribing to (same value for urlId you would pass to the comment widget).

A Subscription オブジェクトはユーザーの購読を表します。

Subscription オブジェクトは、ユーザーがコメントウィジェットの通知ベルをクリックし、"このページを購読する" をクリックしたときに作成されます。

購読はAPI経由でも作成できます。

Subscription オブジェクトが存在すると、該当するページのルートに新しいコメントが投稿された際に Notification オブジェクトが生成され、メールが送信されます。メールの送信はユーザーの種類に依存します。通常のユーザーの場合は optedInNotifications に依存します。SSOユーザーの場合は optedInSubscriptionNotifications に依存します。ウェブでアクセス可能なページという概念がないアプリケーションもある点に注意してください。その場合は、購読対象のアイテムの id(コメントウィジェットに渡す urlId と同じ値)を urlId に設定してください。

The structure for the Subscription object is as follows:

サブスクリプションの構造
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** SSOの場合、ユーザーIDは `<tenant id>:<user id>` 形式になります。 **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // 日付文字列
12}
13

テナント日次使用量の構造 Internal Link

TenantDailyUsage オブジェクトは、特定の日におけるテナントの使用量を表します。特定のテナントにその日にアクティビティがなかった場合、その日には TenantDailyUsage オブジェクトは存在しません。

TenantDailyUsage オブジェクトは リアルタイムではありません。実際の使用状況より数分遅れることがあります。

TenantDailyUsage オブジェクトの構造は次のとおりです:

TenantDailyUsage の構造
Copy Copy
1
2export interface TenantDailyUsage {
3 yearNumber: number
4 monthNumber: number
5 dayNumber: number
6 commentFetchCount?: number
7 commentCreateCount?: number
8 conversationCreateCount?: number
9 voteCount?: number
10 accountCreatedCount?: number
11 userMentionSearch?: number
12 hashTagSearch?: number
13 gifSearchTrending?: number
14 gifSearch?: number
15 apiCreditsUsed?: number
16 createdAt: string
17 billed: boolean
18 /** 課金対象外。 **/
19 ignored: boolean
20}
21

テナントの構造 Internal Link

Tenant は FastComments.com の顧客を定義します。ホワイトラベリング権限を持つテナントは API を介してそれらを作成できます。ホワイトラベル化テナントは他のホワイトラベル化テナントを作成できません(ネストは1レベルのみ許可されます)。

Tenant オブジェクトの構造は次の通りです:

テナント構造
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** これは DomainConfig API でも処理できます。 **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // おそらく Unknown を使用するでしょう
14 logoSrc?: string, // 元の画像パス
15 logoSrc100px?: string, // サムネイル用にリサイズ済み
16 footerUnsubscribeURL?: string,
17 emailHeaders?: Record<string, string>,
18 disableUnsubscribeLinks?: boolean,
19 dkim?: {
20 domainName: string,
21 keySelector: string,
22 privateKey: string
23 }
24}
25
26export interface TenantBillingInfo {
27 name: string
28 address: string
29 city: string
30 state: string
31 zip: string
32 country: string
33}
34
35export enum TenantPaymentFrequency {
36 Monthly = 0,
37 Annually = 1
38}
39
40export interface Tenant {
41 id: string
42 name: string
43 email?: string
44 signUpDate: number; // number 型は "legacy" の理由による
45 packageId?: string | null
46 paymentFrequency?: TenantPaymentFrequency
47 billingInfoValid?: boolean
48 billingHandledExternally?: boolean
49 createdBy?: string
50 isSetup?: boolean
51 domainConfiguration: FastCommentsAPITenantDomainConfig[]
52 billingInfo?: FastCommentsAPITenantBillingInfo
53 stripeCustomerId?: string
54 stripeSubscriptionId?: string
55 stripePlanId?: string
56 enableProfanityFilter?: boolean
57 enableSpamFilter?: boolean
58 lastBillingIssueReminderDate?: string
59 removeUnverifiedComments?: boolean
60 unverifiedCommentsTTLms?: number
61 commentsRequireApproval?: boolean
62 autoApproveCommentOnVerification?: boolean
63 sendProfaneToSpam?: boolean
64 /** @readonly - packageId に基づいて計算されます。 **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - packageId に基づいて計算されます。 **/
69 hasAuditing?: boolean
70 /** テナントにキーと値のペアを保存でき、これをクエリに使用できます。キーには "." または "$" を含めることはできず、100 文字を超えることはできません。値は 2k 文字を超えることはできません。 **/
71 meta?: Record<string, string | null>
72}
73

ユーザーの構造 Internal Link

User はすべてのユーザーの最も一般的な共通要素を表すオブジェクトです。

Keep in mind that at FastComments we have a bunch of different use cases for users:

  • Secure SSO
  • Simple SSO
  • Tenant Users (For example: Administrators)
  • Commenters

This API is for Commenters and users created via Simple SSO. Basically, any user created through your site can be accessed via this API. Tenant Users can also be fetched this way, but you'll get more information by interacting with the /tenant-users/ API.

For Secure SSO please use the /sso-users/ API.

You cannot update these types of users. They created their account through your site, so we provide some basic read-only access, but you cannot make changes. If you want to have this type of flow - you need to setup Secure SSO.

The structure for the User object is as follows:

User の構造
Copy Copy
1
2export interface User {
3 /** これはコメントオブジェクトの userId としても使用される id です。 **/
4 id: string
5 username: string
6 /** 例えば、コメント投稿者のブログへのリンク。 **/
7 websiteUrl?: string
8 email: string
9 signUpDate: number
10 createdFromUrlId: string
11 createdFromTenantId: string
12 avatarSrc?: string
13 locale: FastCommentsLocale
14 displayLabel?: string
15 karma?: number
16}
17

投票の構造 Internal Link


A Vote object represents a vote left by a user.

コメントと投票の関係は commentId によって定義されます。

Vote オブジェクトの構造は次のとおりです:

Vote オブジェクトの構造
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

質問設定の構造 Internal Link

FastCommentsは、質問を構築しその結果を集計する方法を提供します。例としての質問(以下 QuestionConfig と呼びます)は、星評価、スライダー、またはNPS質問(type により決定)などがあります。

質問データは個別に、まとめて、時間経過で、全体として、ページ別など、さまざまな方法で集計できます。

このフレームワークは、クライアント側ウィジェット(このAPIの前にあなたのサーバーを置く場合)、管理ダッシュボード、レポーティングツールを構築するために必要なすべての機能を備えています。

まず、QuestionConfig を定義する必要があります。構造は次のとおりです:

QuestionConfig の構造
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** 読み取り専用 - 各新しいレスポンスごとにインクリメントされます。 **/
13 usedCount: number
14 /** 構成が最後に使用された日時の文字列(結果が残されたとき)。 **/
15 lastUsed?: string
16 type: QuestionConfigType
17 numStars?: number
18 min?: number
19 max?: number
20 defaultValue?: number
21 labelNegative?: string
22 labelPositive?: string
23 subQuestionIds?: string[]
24 alwaysShowSubQuestions?: boolean
25 reportingOrder: number
26}
27

質問結果の構造 Internal Link

質問の結果を保存するには、QuestionResult を作成します。次に、質問の結果を集計したり、また レポート目的でコメントに紐付けたりできます。

QuestionResult の構造
Copy Copy
1
2interface QuestionResultMeta {
3 name: string
4 values: string[]
5}
6
7interface QuestionResult {
8 id: string
9 tenantId: string
10 urlId: string
11 anonUserId?: string
12 userId?: string
13 createdAt?: string
14 value: number
15 commentId?: string
16 questionId: string
17 meta?: QuestionResultMeta[]
18}
19

ユーザーバッジの構造 Internal Link

UserBadge は FastComments システムでユーザーに付与されるバッジを表すオブジェクトです。

バッジは、ユーザーのアクティビティ(コメント数、返信時間、ベテランステータスなど)に基づいて自動的に付与されるか、サイト管理者によって手動で付与されます。

The structure for the UserBadge object is as follows:

UserBadge の構造
Copy Copy
1
2export interface UserBadge {
3 /** このユーザーバッジ割り当ての一意の識別子 */
4 id: string
5 /** このバッジが割り当てられているユーザーのID */
6 userId: string
7 /** テナントのバッジカタログにあるバッジ定義のID */
8 badgeId: string
9 /** このバッジを作成/割り当てたテナントのID */
10 fromTenantId: string
11 /** このバッジが作成された時刻(エポックからのミリ秒) */
12 createdAt?: number
13 /** ユーザーがこのバッジを受け取った時刻(エポックからのミリ秒) */
14 receivedAt?: number
15 /**
16 * バッジの種類:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** 閾値ベースのバッジの場合の閾値 */
25 threshold?: number
26 /** バッジの名前/ラベル */
27 name?: string
28 /** バッジの詳細な説明 */
29 description?: string
30 /** バッジに表示されるテキスト */
31 displayLabel?: string
32 /** バッジに表示される画像のURL */
33 displaySrc?: string
34 /** バッジの背景色(16進数コード) */
35 backgroundColor?: string
36 /** バッジの枠線色(16進数コード) */
37 borderColor?: string
38 /** バッジのテキスト色(16進数コード) */
39 textColor?: string
40 /** スタイリング用の追加CSSクラス */
41 cssClass?: string
42 /** ベテランバッジの場合の時間閾値(ミリ秒) */
43 veteranUserThresholdMillis?: number
44 /** このバッジがユーザーのコメントに表示されるかどうか */
45 displayedOnComments: boolean
46 /** バッジの表示順序 */
47 order?: number
48}
49
---

ユーザーバッジ進捗の構造 Internal Link

UserBadgeProgress は、FastComments システムでユーザーがさまざまなバッジを獲得するための進捗を表すオブジェクトです。

このトラッキングは、ユーザーの活動やコミュニティへの参加に基づいていつ自動的にバッジを付与するべきかを判断するのに役立ちます。

以下が UserBadgeProgress オブジェクトの構造です:

UserBadgeProgress の構造
Copy Copy
1
2export interface UserBadgeProgress {
3 /** この進捗レコードの一意の識別子 */
4 id: string
5 /** この進捗レコードが属するテナントのID */
6 tenantId: string
7 /** この進捗レコードが追跡するユーザーのID */
8 userId: string
9 /** システム内でのユーザーの最初のコメントのID */
10 firstCommentId?: string
11 /** ユーザーの最初のコメントの日付(エポックからのミリ秒) */
12 firstCommentDate?: number
13 /** ユーザーの活動に基づいて自動計算される信頼度 */
14 autoTrustFactor?: number
15 /** 管理者によって手動で設定される信頼度 */
16 manualTrustFactor?: number
17 /** さまざまな指標を含む詳細な進捗オブジェクト。キーは BadgeType 列挙型と一致します */
18 progress: {
19 /** 0: CommentCount - ユーザーが行ったコメントの数 */
20 '0'?: number
21 /** 1: CommentUpVotes - ユーザーが受け取ったアップボートの数 */
22 '1'?: number
23 /** 2: CommentReplies - ユーザーが行った返信の数 */
24 '2'?: number
25 /** 3: CommentsPinned - ユーザーが持つピン留めされたコメントの数 */
26 '3'?: number
27 /** 4: Veteran - ユーザーのアカウントの経過期間 */
28 '4'?: number
29 /** 5: NightOwl - 夜間の時間帯にユーザーが投稿した回数 */
30 '5'?: number
31 /** 6: FastReplyTime - 平均返信時間(ミリ秒) */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - モデレーターバッジ用:削除したコメントの数 */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - モデレーターバッジ用:承認したコメントの数 */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - モデレーターバッジ用:非承認にしたコメントの数 */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - モデレーターバッジ用:レビューしたコメントの数 */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - モデレーターバッジ用:スパムとしてマークしたコメントの数 */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - モデレーターバッジ用:スパムではないとマークしたコメントの数 */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - 各ページごとの返信数 */
46 '13'?: Record<string, number>
47 }
48}
49

まとめ

当社のAPIドキュメントが網羅的で分かりやすいと感じていただけていれば幸いです。もし不足点を見つけた場合は、下にお知らせください。