- app/services/ym.py: клиент Partner API — getGoodsFeedbacks с пагинацией и фильтром по дате, updateGoodsFeedbackComment (ответ), deleteGoodsFeedbackComment (удаление), обработка новых отзывов по аналогии с WB/Ozon - воркер ym_worker, включается при заданных YM_API_KEY и YM_BUSINESS_ID - кнопки отправки/удаления ответа, платформа в сообщении и в таблице, статистика /stat и /allstat - переменные YM_API_KEY, YM_BUSINESS_ID, YM_CHECK_INTERVAL, PRODUCTS_YM_SHEET_LINK - README и .env.example Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
from tortoise import Model, fields
|
|
|
|
|
|
class Review(Model):
|
|
id = fields.IntField(pk=True)
|
|
external_id = fields.TextField()
|
|
platform = fields.TextField() # "ozon", "wb" or "ym" (Яндекс Маркет)
|
|
rating = fields.IntField()
|
|
is_good = fields.BooleanField()
|
|
text = fields.TextField()
|
|
published_at = fields.DatetimeField()
|
|
|
|
product_id = fields.TextField()
|
|
product_name = fields.TextField()
|
|
product_category = fields.TextField()
|
|
product_subcategory = fields.TextField()
|
|
|
|
tone = fields.TextField(null=True) # positive, neutral, negative
|
|
tone_reason = fields.TextField(null=True)
|
|
is_critical = fields.BooleanField(null=True)
|
|
|
|
response_text = fields.TextField(null=True)
|
|
response_id = fields.TextField(null=True)
|
|
responded_at = fields.DatetimeField(null=True)
|
|
|
|
chat_id = fields.IntField(null=True)
|
|
message_id = fields.IntField(null=True)
|
|
images = fields.JSONField(null=True) # Store image URLs as JSON array
|
|
# WB: теги отзыва из API (bables), например ["цена"]
|
|
bables = fields.JSONField(null=True)
|