Перейти к содержанию

Чаты, сообщения и изображения

Этот рецепт показывает базовый цикл работы с мессенджером: найти чат, прочитать сообщения, отправить текст, загрузить изображение и отправить его в чат.

Список чатов

Для операций мессенджера почти всегда нужен user_id. Передайте его в фабрику доменного объекта.

from avito import AvitoClient

with AvitoClient.from_env() as avito:
    chats = avito.chat(user_id=7).list()

print(chats.items[0].chat_id)
print(chats.items[0].last_message_text)

Карточка и сообщения чата

chat() отвечает за состояние чата, а chat_message() — за сообщения внутри него.

from avito import AvitoClient

with AvitoClient.from_env() as avito:
    chat = avito.chat("chat-1", user_id=7).get()
    messages = avito.chat_message(chat_id="chat-1", user_id=7).list()

print(chat.title)
print(messages.items[0].text)

Отправка текста

Для повторяемых write-вызовов передавайте idempotency_key.

from avito import AvitoClient

with AvitoClient.from_env() as avito:
    sent = avito.chat_message(chat_id="chat-1", user_id=7).send_message(
        message="Здравствуйте, объявление актуально.",
        idempotency_key="chat-text-example-1",
    )

print(sent.message_id)
print(sent.status)

Загрузка изображения

upload_images() принимает список UploadImageFile. В пользовательском коде content может быть bytes или file-like объектом.

from avito import AvitoClient
from avito.messenger import UploadImageFile

image = UploadImageFile(
    field_name="image",
    filename="photo.jpg",
    content=b"image-bytes",
    content_type="image/jpeg",
)

with AvitoClient.from_env() as avito:
    uploaded = avito.chat_media(user_id=7).upload_images(
        files=[image],
        idempotency_key="chat-upload-example-1",
    )

print(uploaded.items[0].image_id)

Отправка изображения

После загрузки используйте image_id в send_image().

from avito import AvitoClient

with AvitoClient.from_env() as avito:
    result = avito.chat_message(chat_id="chat-1", user_id=7).send_image(
        image_id="img-1",
        caption="Фото товара",
        idempotency_key="chat-image-example-1",
    )

print(result.message_id)

Пометка чата прочитанным

Состояние чата меняется через chat().mark_read().

from avito import AvitoClient

with AvitoClient.from_env() as avito:
    result = avito.chat("chat-1", user_id=7).mark_read(
        idempotency_key="chat-read-example-1",
    )

print(result.success)

Полный контракт моделей смотрите в reference по messenger. Для webhook и спецпредложений используйте отдельные доменные объекты chat_webhook() и special_offer_campaign().