Skip to main content

pararamio-bot

Async webhook server for pararam.io bot events.

Installation

pip install pararamio-bot

Quick Start

import asyncio
import os

from pararamio_bot import WebhookMessage, WebhookServer


async def on_message(message: WebhookMessage) -> None:
    print(f"@{message.user_unique_name}: {message.text}")


async def main() -> None:
    async with WebhookServer(bot_secret=os.environ["BOT_SECRET"], port=8080) as server:
        server.on_message(on_message)
        await asyncio.Event().wait()


asyncio.run(main())

Configure your bot's webhook URL in pararam.io to http://<host>:8080/<url_key>, where <url_key> is the first 8 characters of your bot secret.

Security

Every incoming request is verified in two steps:

  1. URL key — the first 8 chars of the bot secret must be present in the request path. Requests with a wrong key get 404.
  2. X-Signature — HMAC-SHA256 signature of the request body, verified against the bot secret. Missing or invalid signature returns 401.

Both checks are always enabled and cannot be disabled.

API

WebhookServer

server = WebhookServer(
    bot_secret="...",  # Full bot secret from pararam.io
    host="0.0.0.0",    # Bind address (default)
    port=8080,          # Listen port (default)
)

Context manager:

async with WebhookServer(bot_secret="...") as server:
    server.on_message(handler)
    # server is running

Manual start/stop:

await server.start()
# ...
await server.stop()

Callbacks

Register async callbacks for incoming events:

server.on_message(callback)  # Called for each incoming message
server.on_action(callback)   # Called for bot:// link clicks

Multiple callbacks can be registered; they are called sequentially.

Models

WebhookMessage — incoming message from a user:

Field Type Description
user_id int Sender user ID
user_unique_name str Sender unique name
post_no int Post number in the chat
chat_id int Chat ID
text str Message text
organization_id int | None Organization ID (optional)
text_parsed list[dict] | None Parsed text structure
reply_no int | None Replied-to post number
reply_text str | None Replied-to post text
file_guid str | None Attached file GUID
file_name str | None Attached file name
attachments list[str] | None List of attachment identifiers

WebhookAction — user clicked a bot:// link:

Field Type Description
user_id int User who clicked
chat_id int Chat ID
post_no int Post number
organization_id int | None Organization ID (optional)
action str Action name from the link
params dict[str, str] Action parameters

Utility Functions

from pararamio_bot import extract_url_key, extract_api_key, make_signature, verify_signature

# Get the URL key (first 8 chars) from a bot secret
url_key = extract_url_key(bot_secret)

# Get the API key portion (chars 20+ for secrets > 50 chars)
api_key = extract_api_key(bot_secret)

# Compute / verify HMAC-SHA256 signatures
sig = make_signature(body, secret)
is_valid = verify_signature(body, sig, secret)

HTTP Endpoints

Route Description
POST /{url_key} Receive message webhooks
POST /{url_key}/act Receive action webhooks

Requirements

  • Python >= 3.11
  • aiohttp >= 3.9
  • pydantic >= 2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pararamio_bot-3.0.34.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pararamio_bot-3.0.34-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file pararamio_bot-3.0.34.tar.gz.

File metadata

  • Download URL: pararamio_bot-3.0.34.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for pararamio_bot-3.0.34.tar.gz
Algorithm Hash digest
SHA256 43d48ef46572dd34d5832d82e73a3b9e23efaf924d0cf3fb689dc6fcfad5b1d0
MD5 c3e20d46e979e761e2dec8035156ee38
BLAKE2b-256 16cb2aa917c100581953cc194b97fc067512352cc77df184674e0396d03983fd

See more details on using hashes here.

File details

Details for the file pararamio_bot-3.0.34-py3-none-any.whl.

File metadata

  • Download URL: pararamio_bot-3.0.34-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for pararamio_bot-3.0.34-py3-none-any.whl
Algorithm Hash digest
SHA256 4dfb9a8e6d6ea38e15cec5ad26cbf2cba549c983f4dee7efaa5803e088e3e30c
MD5 05b63c8206c0e04e8f6b3d6b80f6ccf6
BLAKE2b-256 4b39e59c1ca03405c1528cdbb571d9d87985e3193546a1a8224fda4a19dead41

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

3.0.34 This release

2 files

3.0.32

2 files

3.0.31

2 files

3.0.30

2 files

3.0.29

2 files

3.0.28

2 files

3.0.27

2 files

3.0.26

2 files

3.0.25

2 files

3.0.24

2 files

3.0.23

2 files

3.0.22

2 files

3.0.21

2 files

3.0.19

2 files

3.0.18

2 files

3.0.17

2 files

3.0.16

2 files

3.0.15

2 files

3.0.14

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page