Webhook

Tip

To use webhooks you need to enable them in the @CryptoBot settings as follows:

🏝 Crypto Pay -> My Apps -> YOUR APP -> Webhooks -> 🌕 Enable webhooks.

Usage example with aiohttp web server

import asyncio
from aiohttp.web import Application, _run_app
from aiosend import CryptoPay
from aiosend.types import Invoice
from aiosend.webhook import AiohttpManager

app = Application()
cp = CryptoPay(
    "TOKEN",
    webhook_manager=AiohttpManager(app, "/handler"),
)

@cp.invoice_paid()
async def handler(invoice: Invoice) -> None:
    print(f"Received {invoice.amount} {invoice.asset}")

async def main() -> None:
    invoice = await cp.create_invoice(1, "USDT")
    print("invoice link:", invoice.bot_invoice_url)
    await _run_app(app)

if __name__ == "__main__":
    asyncio.run(main())

Usage example with fastapi web server

Tip

In order to use aiosend with fastapi you need to install extra package

pip install aiosend[fastapi]
import asyncio
import uvicorn
from fastapi import FastAPI
from aiosend import CryptoPay
from aiosend.types import Invoice
from aiosend.webhook import FastAPIManager

app = FastAPI()
cp = CryptoPay(
    "TOKEN",
    webhook_manager=FastAPIManager(app, "/handler"),
)

@cp.invoice_paid()
async def handler(invoice: Invoice) -> None:
    print(f"Received {invoice.amount} {invoice.asset}")

async def main() -> None:
    invoice = await cp.create_invoice(1, "USDT")
    print("invoice link:", invoice.bot_invoice_url)

if __name__ == "__main__":
    asyncio.run(main())
    uvicorn.run(app)

Usage example with flask web server

Tip

In order to use aiosend with flask you need to install extra package

pip install aiosend[flask]
import asyncio
from flask import Flask
from aiosend import CryptoPay
from aiosend.types import Invoice
from aiosend.webhook import FlaskManager

app = Flask(__name__)
cp = CryptoPay(
    "TOKEN",
    webhook_manager=FlaskManager(app, "/handler"),
)

@cp.invoice_paid()
async def handler(invoice: Invoice) -> None:
    print(f"Received {invoice.amount} {invoice.asset}")

async def main() -> None:
    invoice = await cp.create_invoice(1, "USDT")
    print("invoice link:", invoice.bot_invoice_url)

if __name__ == "__main__":
    asyncio.run(main())
    app.run()

aiosend uses aiohttp as web server by default. You can implement your own webhook manager by inheriting aiosend.webhook.WebhookManager and overriding aiosend.webhook.WebhookManager.register_handler.

class aiosend.webhook.WebhookManager(app, path)

Webhook manager.

If you want to implement your own webhook manager, you must inherit from this class.

abstractmethod register_handler(feed_update)

Register webhook handler.

Override this method in your own webhook manager class. This method is used for registering webhook handler in your app.

Parameters:

handler – Web server handler object.

Return type:

None

class aiosend.webhook.AiohttpManager(app, path)

Bases: WebhookManager[Application]

aiohttp webhook manager.

Webhook manager based on aiohttp.web.Application.

register_handler(feed_update)

Register webhook handler.

Return type:

None

class aiosend.webhook.FastAPIManager(app, path)

Bases: WebhookManager[FastAPI | APIRouter]

FastAPI webhook manager.

Webhook manager based on fastapi.FastAPI.

register_handler(feed_update)

Register webhook handler.

Return type:

None

class aiosend.webhook.FlaskManager(app, path)

Bases: WebhookManager[Flask]

Flask webhook manager.

Webhook manager based on flask.Flask.

register_handler(feed_update)

Register webhook handler.

Return type:

None