Шопинг — чаты (tbank.shopping)

Чаты магазина с покупателями: список чатов, история сообщений, отправка сообщений и обмен файлами.

  • Хост: secured-openapi.tbank.ru (mTLS, cert) по Bearer-токену.

  • Файлы: загрузка — application/octet-stream, скачивание — «сырые» байты.

  • Клиенты: tbank.shopping.ShoppingClient (async) и tbank.shopping.sync.ShoppingClient (sync).

from tbank.shopping import ShoppingClient
from tbank.shopping.models import SendMessageRequest

client = ShoppingClient(
    token="business-token",
    cert=("client.pem", "client-key.pem"),
)

chats = await client.list_chats(shop_id="SHOP-1")
chat_id = chats.chats[0].chat_id

messages = await client.list_messages("SHOP-1", chat_id, limit=50)

# отправить файл, затем сообщение с этим файлом
uploaded = await client.upload_chat_file(
    "SHOP-1", chat_id, pdf_bytes, file_name="invoice.pdf", file_type="application/pdf",
)
await client.send_message("SHOP-1", chat_id, SendMessageRequest(
    partner_message_id="pm-1", file_id=uploaded.file_id,
))

# скачать файл из сообщения
content = await client.download_chat_file("SHOP-1", chat_id, uploaded.file_id)

partner_message_id — ключ идемпотентности сообщения на стороне партнёра.

Клиент

class tbank.shopping.aio.ShoppingClient(token, *, base_url=None, sandbox=False, cert=None, verify=True, retry=None, transport=None)[исходный код]

Базовые классы: BaseAsyncClient

Асинхронный клиент шопинга (чаты магазина): чаты, сообщения и файлы.

Домен работает на secured-хосте (mTLS, cert) по Bearer-токену. Провод — camelCase.

Параметры:
async list_chats(shop_id)[исходный код]

Список чатов магазина.

Параметры:

shop_id (str)

Тип результата:

ChatList

async get_chat(shop_id, chat_id)[исходный код]

Карточка чата.

Параметры:
Тип результата:

Chat

async list_messages(shop_id, chat_id, *, limit=None, message_id_from=None)[исходный код]

Сообщения чата.

Параметры:
  • shop_id (str)

  • chat_id (str)

  • limit (int | None)

  • message_id_from (str | None)

Тип результата:

MessageList

async send_message(shop_id, chat_id, request)[исходный код]

Отправить сообщение в чат.

Параметры:
Тип результата:

SendMessageResult

async upload_chat_file(shop_id, chat_id, content, *, file_name, file_type)[исходный код]

Загрузить файл в чат (octet-stream). Возвращает идентификатор файла.

Параметры:
Тип результата:

ChatFileUploadResult

async download_chat_file(shop_id, chat_id, file_id)[исходный код]

Скачать файл из чата (бинарное содержимое).

Параметры:
Тип результата:

bytes

Модели

class tbank.shopping.models.ShoppingModel[исходный код]

Базовые классы: BaseModel

Базовая модель домена: snake_case в Python, camelCase на проводе.

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.Chat(*, chatId, createdAt, description=None)[исходный код]

Базовые классы: ShoppingModel

Параметры:
model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.ChatList(*, chats=<factory>)[исходный код]

Базовые классы: ShoppingModel

Параметры:

chats (List[Chat])

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.MessageFile(*, id, name, size, mimeType)[исходный код]

Базовые классы: ShoppingModel

Параметры:
model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.MessageAuthor(*, name)[исходный код]

Базовые классы: ShoppingModel

Параметры:

name (str)

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.ChatMessage(*, messageId, author, createdAt, message=None, files=None)[исходный код]

Базовые классы: ShoppingModel

Параметры:
model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.MessageList(*, messages=<factory>)[исходный код]

Базовые классы: ShoppingModel

Параметры:

messages (List[ChatMessage])

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.SendMessageRequest(*, partnerMessageId, text=None, fileId=None)[исходный код]

Базовые классы: ShoppingModel

Сообщение в чат. Требуется text либо file_id. partner_message_id — ключ идемпотентности на стороне партнёра.

Параметры:
  • partnerMessageId (str)

  • text (str | None)

  • fileId (str | None)

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.SendMessageResult(*, messageId, partnerMessageId)[исходный код]

Базовые классы: ShoppingModel

Параметры:
  • messageId (str)

  • partnerMessageId (str)

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class tbank.shopping.models.ChatFileUploadResult(*, fileId)[исходный код]

Базовые классы: ShoppingModel

Параметры:

fileId (str)

model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].