metricway-sdk
Асинхронный SDK для отправки событий Telegram-бота в metricway. Поддерживает ручную отправку и автоматический сбор из aiogram 3.
Установка и быстрый старт
Нужен Python 3.10+. Создайте проект в metricway и сохраните токен в переменной окружения METRICWAY_PROJECT_TOKEN. Для aiogram-бота установите пакет:
python -m pip install "metricway-sdk[aiogram]"
import asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
from metricway import MetricsClient, setup_aiogram_metrics
metrics = MetricsClient(
api_url="https://metricway.tech",
project_token=os.environ["METRICWAY_PROJECT_TOKEN"],
)
dp = Dispatcher()
setup_aiogram_metrics(dp, metrics)
@dp.message(CommandStart())
async def start_command(message: Message) -> None:
await message.answer("Привет!")
async def on_startup(bot: Bot) -> None:
await metrics.start()
async def on_shutdown(bot: Bot) -> None:
await metrics.close()
dp.startup.register(on_startup)
dp.shutdown.register(on_shutdown)
async def main() -> None:
bot = Bot(token=os.environ["TELEGRAM_BOT_TOKEN"])
try:
await dp.start_polling(bot)
finally:
await bot.session.close()
if __name__ == "__main__":
asyncio.run(main())
setup_aiogram_metrics подключают один раз к роутеру. Он учитывает все входящие сообщения и callback-запросы, даже без подходящего обработчика. В таком случае имя обработчика — unknown. Для ручной отправки без aiogram установите metricway-sdk без дополнения.
Ручная отправка
Методы track_* синхронные: они добавляют запись в очередь, не ожидая сеть.
metrics.track_event(
user_id=123,
chat_id=456,
handler="trial_started",
update_type="trial",
payload={"product_id": "pro_month"},
)
metrics.track_traffic(user_id=123, start_payload="campaign_a", utm_source="telegram")
metrics.track_error(
user_id=123,
error_type="PaymentError",
error_message="Payment failed",
stack="",
)
metrics.track_purchase(
user_id=123,
amount=990.0,
currency="RUB",
product_id="pro_month",
payment_provider="telegram_payments",
)
Покупку отправляйте только после подтверждённой оплаты. Конвертации валюты нет.
Автоматически собираемые данные
| Событие | Передаваемые данные |
|---|---|
| Сообщение | ID пользователя и чата, имя обработчика, тип обновления, полный текст |
| Callback | ID пользователя и чата, имя обработчика, тип обновления, callback data |
/start <payload> |
Дополнительная запись трафика со start payload |
| Ошибка обработчика | Тип, сообщение и полный стек; исключение продолжает распространяться |
Текст, callback data и стек могут содержать личные данные и секреты. Проверьте правила обработки данных своего бота перед подключением. Не передавайте пароли, платёжные реквизиты и другие секреты в payload или текстах ошибок. Храните токен проекта только на сервере; SDK передаёт его в заголовке X-Project-Token и поле записи, но не печатает в своих логах.
Доставка и ограничения
Параметры клиента: batch_size=500, flush_interval=3.0, max_queue_size=10000, max_retries=5, shutdown_timeout=10.0. Батч ограничен 500 записями и 1 МиБ JSON. Ошибки сети, HTTP 429 и 5xx повторяются до пяти раз после первой попытки с возрастающей задержкой; Retry-After учитывается до 60 секунд. Остальные 4xx отклоняются сразу. При заполненной очереди новая запись отбрасывается. close() пытается отправить остаток до 10 секунд.
Очередь находится только в памяти. Сбой процесса, исчерпание повторов или лимитов может привести к потере событий. Успешный HTTP-ответ означает принятие батча collector, но не гарантирует его запись в постоянное хранилище. Для предупреждений включите логгер metricway. После close() новые записи отбрасываются.
Диагностика
- Проверьте токен проекта и вызов
start()при старте бота. - Проверьте доступность
https://metricway.tech/collector/с сервера бота. - Посмотрите логи
metricway: 401 — токен, 429 — ограничение частоты, 413 — размер запроса. - Отправьте
/start test_campaignи проверьте событие и источник трафика в кабинете.
Разработка описана в CONTRIBUTING.md. Лицензия — MIT.
Metadata
Release files for metricway-sdk 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| metricway_sdk-0.1.0.tar.gz | 15.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| metricway_sdk-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.0 kB
Release files / metricway_sdk-0.1.0.tar.gz
| Download URL | metricway_sdk-0.1.0.tar.gz |
|---|---|
| Size | 15.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f49c09f14cd623cd5d5dbb8ccacb86f672bef0182bbe8f56a6a58b8ee9695678
|
|
BLAKE2b-256 checksum How to use checksums |
511bcc8d61015847c027509c6fda2c696e4788b587da000262097ac68d86923e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency logRelease files / metricway_sdk-0.1.0-py3-none-any.whl
| Download URL | metricway_sdk-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
adf8e76be4bae4e88e07da979403822156796757649373b23aaa17ed76e9c1a0
|
|
BLAKE2b-256 checksum How to use checksums |
e9f3a2c1a09879f48f6f6684d0eec8aefd399dccb1028f8d69cf8f81d7d4b8f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency log