Posthog
Плагин, который удобно оборачивает клиент PostHog. Автоматически ловит ошибки (и включает в них senderId
и chatId
). Предоставляет методы к которым уже привязан distinctId (в виде from.id
)
Вы можете использовать PostHog Cloud free tier или self-hosted.
Установка
bash
npm install @gramio/posthog
bash
yarn add @gramio/posthog
bash
pnpm add @gramio/posthog
bash
bun install @gramio/posthog
Использование
typescript
import { PostHog } from "posthog-node";
import { posthogPlugin } from "@gramio/posthog";
import { Bot } from "gramio";
const posthog = new PostHog(process.env.POSTHOG_API_KEY!, {
host: process.env.POSTHOG_HOST,
});
const bot = new Bot(process.env.BOT_TOKEN!)
.extend(posthogPlugin(posthog))
.on("message", (context) => {
context.capture("message", {
text: context.message.text,
});
throw new Error("Будет поймано PostHog");
});
await bot.start();
Методы
capture(event: string, properties?: Record<string, unknown>)
Ловит события и отправляет их в PostHog вместе с senderId
.
typescript
context.capture("message", {
text: context.message.text,
});
Feature Flags
isEnabled(feature: string, options?: IsFeatureEnabledOptions)
Проверяет включен ли feature flag для текущего пользователя.
typescript
const isEnabled = await context.featureFlags.isEnabled("beta-feature", {
groups: { organization: "org_id" },
});
// Возвращает boolean
getPayload(feature: string, value?: GetFeatureFlagPayloadValue, options?: GetFeatureFlagPayloadOptions)
Получает payload (дополнительные данные) для feature flag.
typescript
const payload = await context.featureFlags.getPayload("pricing-page", {
sendEmail: true,
});
// Возвращает any | undefined
get(feature: string, options?: GetFeatureFlagOptions)
Получает полную информацию о feature flag.
typescript
const flag = await context.featureFlags.get("new-onboarding", {
personProperties: { plan: "pro" },
});
// Возвращает boolean | string | number | Record<string, any>
getAll(options?: GetAllFlagsOptions)
Получает все feature flags для пользователя.
typescript
const allFlags = await context.featureFlags.getAll({
groups: { company: "acme" },
});
// Возвращает Record<string, boolean | string | number>
getAllPayload(options?: GetAllFlagsPayloadOptions)
Получает все флаги вместе с их payloads.
typescript
const flagsWithPayloads = await context.featureFlags.getAllPayload({
personProperties: { country: "US" },
});
/* Возвращает:
{
flags: Record<string, boolean | string | number>
payloads: Record<string, any>
} */