Skip to main content

Официальный Python SDK для публичного API BOTIX

Project description

BOTIX SDK для Python

Официальная клиентская библиотека для публичного API BOTIX — платформы визуального конструктора чат-ботов и AI-ассистентов.

PyPI version Python versions License: MIT CI

Что это

BOTIX — облачная SaaS-платформа визуального конструктора чат-ботов: Telegram, WhatsApp, ВКонтакте, виджет на сайте. SDK даёт типизированный доступ к публичному REST API BOTIX из Python-приложений: контакты, сообщения, сценарии, чаты, webhooks.

Установка

pip install botix

Минимальная версия Python — 3.9.

Первый запрос

Получите API-ключ в кабинете BOTIX: «Настройки → API-ключи → Создать ключ». Ключ показывается один раз — сохраните его.

import botix

client = botix.Client("btx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

me = client.me()
print(me.data.project_id, me.data.scopes, me.data.plan_key)

Возвращается контекст текущего ключа: ID проекта, разрешённые scopes, тариф клиента и остаток rate-limit.

Отправка сообщения

response = client.messages.send(
    contact_id=42,
    content="Привет! Это сообщение из BOTIX SDK.",
    channel="telegram",  # опционально — иначе берётся last_channel контакта
)
print(response.data.id, response.data.status)
if response.replayed:
    print("Сервер вернул кешированный ответ по совпадению Idempotency-Key")

SDK автоматически генерирует Idempotency-Key (UUID v4) для защиты от случайных дублей при сетевых сбоях. Чтобы отключить: botix.Client(api_key, auto_idempotency=False). Свой ключ — client.messages.send(..., idempotency_key="my-uuid").

Webhooks: проверка подписи

BOTIX подписывает каждое входящее webhook-сообщение HMAC-SHA256 над сырым телом запроса. Секрет вы получили один раз при создании подписки через client.webhooks.create(...).

from flask import Flask, request, abort
import botix

app = Flask(__name__)
WEBHOOK_SECRET = "ваш_секрет_подписки"

@app.route("/botix-webhook", methods=["POST"])
def botix_webhook():
    raw_body = request.get_data()  # ВАЖНО: сырое тело, не request.json
    signature = request.headers.get("X-Botix-Signature", "")

    if not botix.verify_webhook(raw_body, signature, WEBHOOK_SECRET):
        abort(401, "Invalid signature")

    event = request.json
    print(event["event"], event["data"])
    return "", 200

Работа с ошибками

SDK кидает botix.ApiException на любой не-2xx ответ. Код ошибки BOTIX лежит в теле ответа.

import botix
import json

client = botix.Client("btx_live_...")

try:
    contact = client.contacts.get(99999)
except botix.ApiException as e:
    body = json.loads(e.body) if e.body else {}
    code = body.get("error", {}).get("code")
    print(f"HTTP {e.status} / {code}: {body.get('error', {}).get('message')}")

Возможные коды (полный список — в документации API):

Код HTTP Когда
MISSING_API_KEY 401 Нет заголовка Authorization
INVALID_API_KEY 401 Ключ не существует или подделан
KEY_REVOKED 401 Ключ отозван
INSUFFICIENT_SCOPE 403 У ключа нет нужного scope
API_NOT_AVAILABLE_ON_PLAN 403 Тариф клиента не включает API
TRIAL_READ_ONLY 403 Триал — мутирующие методы запрещены
RATE_LIMIT_EXCEEDED 429 Превышен per-minute или per-day лимит
NO_CHANNEL_AVAILABLE 422 Не удалось определить канал отправки
CHANNEL_NOT_SUPPORTED_YET 422 Канал ещё не подключён к API
CONTACT_NOT_REACHABLE 422 У контакта нет chat_id/phone для канала
DELIVERY_FAILED 502 Канал отверг отправку

Доступные ресурсы

client.me()                                        # GET  /me
client.contacts.list(page=1, per_page=50, ...)     # GET  /contacts
client.contacts.get(id)                            # GET  /contacts/{id}
client.contacts.create(**fields)                   # POST /contacts
client.contacts.update(id, **fields)               # PUT  /contacts/{id}
client.contacts.delete(id)                         # DELETE /contacts/{id}
client.contacts.add_tag(id, tag)                   # POST /contacts/{id}/tags
client.contacts.remove_tag(id, tag)                # DELETE /contacts/{id}/tags/{tag}

client.messages.list(...)                          # GET  /messages
client.messages.send(contact_id, content, ...)     # POST /messages

client.scenarios.list()                            # GET  /scenarios
client.scenarios.run(id, contact_id, ...)          # POST /scenarios/{id}/run

client.chats.list(...)                             # GET  /chats
client.chats.messages(chat_id)                     # GET  /chats/{id}/messages

client.channels.list()                             # GET  /channels

client.webhooks.list()                             # GET  /webhooks
client.webhooks.create(url, events)                # POST /webhooks
client.webhooks.update(id, ...)                    # PUT  /webhooks/{id}
client.webhooks.delete(id)                         # DELETE /webhooks/{id}
client.webhooks.test(id)                           # POST /webhooks/{id}/test

Примеры в examples/.

Ссылки

Лицензия

MIT © 2026 BOTIX (ИП Шпагин В.В.)

Project details


Download files

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

Source Distribution

botix-1.0.0.tar.gz (54.6 kB view details)

Uploaded Source

Built Distribution

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

botix-1.0.0-py3-none-any.whl (149.5 kB view details)

Uploaded Python 3

File details

Details for the file botix-1.0.0.tar.gz.

File metadata

  • Download URL: botix-1.0.0.tar.gz
  • Upload date:
  • Size: 54.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for botix-1.0.0.tar.gz
Algorithm Hash digest
SHA256 2df25ad8371db8dcb998d51db3884f03055e53f7e0cc578696947b0b9152facd
MD5 f57aa0f958ecb4d64a40772d0bd86126
BLAKE2b-256 ce28fe606d899631922532a740570a8bd05a40cb311eee9dd1552e00df989fd1

See more details on using hashes here.

File details

Details for the file botix-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: botix-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 149.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for botix-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e53170c47bbedcaf28729d8a8cee1b0e7652c8c243a0dee6a50868fb2410da7e
MD5 6a511f4adca33a358358e2fdfc6a9bbf
BLAKE2b-256 a4066a326f6eb8b7b5cd8a29fef11ae64f23180cd2e6461c703051e549234a90

See more details on using hashes here.

Supported by

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