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.1.0.tar.gz (67.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.1.0-py3-none-any.whl (206.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: botix-1.1.0.tar.gz
  • Upload date:
  • Size: 67.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.1.0.tar.gz
Algorithm Hash digest
SHA256 c27abb5752e1baa696d4c5d7f56a28a17f64be6ff3469357193c2d8c1a29afbc
MD5 019be994de2c1ff94c9909e025736a58
BLAKE2b-256 d394439a516325aeb09cef14ed614b37f4aa557e15be66cc6e3ceca81944869e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: botix-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 206.0 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1f4bc15c69160d9cfe9a4982565fe36a394d73dbcdbf1b4a7b575d40b74bd50
MD5 233d6cd54358cb6a9048f7dd44cec4c5
BLAKE2b-256 e0f68e1a0429480c768d6092b2efeea1010fcfef94a87e78712324c375c0c27e

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