Overview
Вызывайте REST API BroadNet из Python, используя библиотеки requests или httpx. Пакета BroadNet Python не существует: единственный официальный SDK предназначен для TypeScript и Node.js, а не Python. Если вам нужен типизированный клиент Python, сгенерируйте его из спецификации OpenAPI с помощью openapi-generator; в противном случае вам достаточно простых HTTP запросов, приведенных ниже.
Обработка ошибок
При возникновении ошибок возвращается код состояния HTTP и JSON тело ExceptionResponse (status, error, message, errorCode, requestUri). Метод resp.raise_for_status() преобразует их в исключения. Повторная попытка выполняется только при сетевых ошибках и ответах с кодом 5xx, с задержкой; как только вызов вернул идентификатор сообщения, отправка была принята, поэтому не следует отправлять запрос повторно вслепую.
Требования
Любая поддерживаемая версия Python 3. В синхронном примере используется requests, а в асинхронном — httpx; установите ту, которую вы используете.
Примеры
Скопируйте, вставьте, замените заполнители — примеры обращаются к production API как есть.
pip install requests httpximport os, requests
r = requests.post(
"https://api.broadnet.me/sms/sendSms",
headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
json={
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT",
},
)
print(r.status_code, r.text) # message IDimport asyncio
import os
import httpx
URL = "https://api.broadnet.me/sms/sendSms"
HEADERS = {"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"}
async def send(client: httpx.AsyncClient, number: str, text: str) -> str:
resp = await client.post(
URL,
headers=HEADERS,
json={
"senderId": "BroadNet",
"destinationNumber": number,
"message": text,
"messageType": "TEXT",
},
)
resp.raise_for_status()
return resp.text # message ID
async def main() -> None:
recipients = ["447700900123", "447700900124", "447700900125"]
async with httpx.AsyncClient(timeout=10) as client:
ids = await asyncio.gather(
*(send(client, n, "Your code is 482913") for n in recipients)
)
print(ids)
if __name__ == "__main__":
asyncio.run(main())# Optional: generate a typed Python client from the OpenAPI spec
curl -O https://www.broadnet.me/developers/openapi.yaml
npx @openapitools/openapi-generator-cli generate \
-i openapi.yaml -g python -o broadnet-python