Библиотека поддерживает одинаковый набор методов в sync и async вариантах.
Рекомендуемый подход — использовать контекстный менеджер для переиспользования соединения:
from smsru_api import Client
with Client("YOUR_API_KEY") as smsru:
balance = smsru.balance()
cost = smsru.cost("79990000000", message="Тест")
message = smsru.send("79990000000", message="Привет", debug=True)Обычный sync-вызов обратно совместим: каждый запрос создает временный HTTP-клиент.
Используйте async with для корректного управления соединением:
import asyncio
from smsru_api import AsyncClient
async def main():
async with AsyncClient("YOUR_API_KEY") as smsru:
balance = await smsru.balance()
cost = await smsru.cost("79990000000", message="Тест")
message = await smsru.send("79990000000", message="Привет", debug=True)
return balance, cost, message
asyncio.run(main())Без async with поведение остается совместимым: на каждый запрос создается
временный HTTP-клиент.
Если нужно сделать один запрос и больше ничего не делать, можно обойтись без менеджера. В этом случае важно явно закрыть ресурсы:
from smsru_api import Client
# Синхронный вариант
smsru = Client("YOUR_API_KEY")
balance = smsru.balance()
# Закрычем соединение (рекомендуется)
smsru.close()
# Асинхронный вариант
import asyncio
async def get_balance():
smsru = AsyncClient("YOUR_API_KEY")
balance = await smsru.balance()
await smsru.aclose() # Закрываем асинхронное соединение
return balance
asyncio.run(get_balance())Рекомендация: Для нескольких операций подряд используйте контекстный менеджер (
with/async with) — это безопаснее и гарантирует закрытие ресурсов.
- Используйте
Client, если проект уже синхронный и дополнительная асинхронность не нужна. - Используйте
AsyncClient, если проект построен наasyncio, FastAPI, aiohttp или другом асинхронном стеке.
Если у вас остался код старых версий, можно продолжать использовать алиасы:
from smsru_api import SmsRu, AsyncSmsRu
smsru = SmsRu("YOUR_API_KEY")
async_smsru = AsyncSmsRu("YOUR_API_KEY")Если нужно обрабатывать лимиты получателей или некорректные временные параметры, импортируйте исключения из корня пакета:
from smsru_api import OutOfPhoneNumbers, OutOfTimestamp