С вопросом

Проблема с уведомлениями, отправляемыми на Webhook.

1 мая 2026
397
1
3

Суть проблемы вот в чем. Я организовал стенд для работы с Seller API через webhook. Для получения уведомления о НОВЫХ СООБЩЕНИЯХ в чат продавца. Согласно документации это TYPE_NEW_MESSAGE. При отправке сообщения продавцу я ожидаю увидеть именно такое уведомление в единственном варианте (при условии, что я дам Seller API ответ об успешном получении запроса согласно https://docs.ozon.ru/api/seller/?__rr=1#tag/service_response). Но я получаю не одно, а несколько подряд уведомлений на веб-хук. А иногда и вовсе результате ОТПРАВЛЕНИЯ сообщения в чат я получаю не TYPE_NEW_MESSAGE, а TYPE_UPDATE_MESSAGE. Хотелось бы узнать почему так? Я где-то ошибся или все же сервис троит, т.к. работа с чатом продавца в разделе beta-методов.Спасибо. Пруфы снизу. Код:

class WebhookListener:
    def __init__(
            self,
            config: OzonAPI,
            message_queue: Queue
    ):
        self.config = config
        self.message_queue = message_queue
        self.handlers: Dict[str, Callable[[dict], Awaitable[JSONResponse]]] = {
            "TYPE_PING": self._handle_ping,
            "TYPE_NEW_MESSAGE": self._handle_new_message,
            "TYPE_UPDATE_MESSAGE": self._handle_update_message,
        }

    async def _handle_ping(self, payload: dict) -> JSONResponse:
        """Обработчик для пинг-запросов"""
        datetime_type = payload.get("time", None)
        log.info(f"Получен запрос проверки статуса готовности сервиса TYPE_PING {datetime_type}")
        return JSONResponse(
            status_code=status.HTTP_200_OK,
            content={
                "version": "1.0.13",
                "name": "OzonTest",
                "time": datetime.now(timezone.utc).isoformat().replace('+00:00', 'Z')
            }
        )

    @staticmethod
    async def _handle_new_message(payload: dict) -> JSONResponse:
        """Обработчик для уведомлений о новых сообщениях"""
        message: Message = Message(**payload)
        log.info(f"Получено уведомление о новом сообщении:\n{payload}")
        return JSONResponse(status_code=status.HTTP_200_OK, content={"result": True})

    @staticmethod
    async def _handle_update_message(payload: dict) -> JSONResponse:
        """Обработчик для уведомлений о новых сообщениях"""
        message: Message = Message(**payload)
        log.info(f"Получено уведомление об обновлении сообщения:\n{payload}")
        return JSONResponse(status_code=status.HTTP_200_OK, content={"result": True})

    @staticmethod
    async def _handle_unknown(payload: dict) -> JSONResponse:
        """Обработчик для неизвестных типов сообщений"""
        message_type = payload.get("message_type", "UNKNOWN")
        log.warning(f"Неизвестный тип сообщения: {message_type}")
        return JSONResponse(
            status_code=status.HTTP_400_BAD_REQUEST,
            content={"error": f"Непредусмотренный message_type: {message_type}"}
        )

    def _create_app(self):
        app = FastAPI()

        @app.post("/new_message")
        async def ozon_webhook(request: Request):
            try:
                data = await request.json()
                message_type = data["message_type"]

                log.info(f"Получено уведомление: type={message_type}")

                handler = self.handlers.get(message_type, self._handle_unknown)
                return await handler(data)
            except Exception as e:
                log.error(f"Error: {e}")
                return JSONResponse(
                    status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                    content={"error": str(e)}
                )

        return app

Скриншот чата (обратите внимание на время тут и в логах):

image

Логи приложения, которое принимает запросы:

2026-05-01 13:47:36 - webhook - INFO - Получено уведомление: type=TYPE_UPDATE_MESSAGE
2026-05-01 13:47:36 - webhook - INFO - Получено уведомление об обновлении сообщения:
{'message_type': 'TYPE_UPDATE_MESSAGE', 'message_id': '3000000415095791941', 'chat_id': '6c9f7308-7a97-4ab3-8774-12bf4b4fb1e0', 'chat_type': 'Buyer_Seller', 'user': {'id': '47746975', 'type': 'Customer'}, 'seller_id': 1879423, 'created_at': '2026-05-01T10:44:16.123557Z', 'updated_at': '2026-05-01T10:47:30.733409Z', 'data': ['Test']}
INFO:     91.223.93.246:0 - "POST /new_message HTTP/1.1" 200 OK
2026-05-01 13:47:36 - webhook - INFO - Получено уведомление: type=TYPE_UPDATE_MESSAGE
2026-05-01 13:47:36 - webhook - INFO - Получено уведомление об обновлении сообщения:
{'message_type': 'TYPE_UPDATE_MESSAGE', 'message_id': '3000000415095510000', 'chat_id': '6c9f7308-7a97-4ab3-8774-12bf4b4fb1e0', 'chat_type': 'Buyer_Seller', 'user': {'id': '47746975', 'type': 'Customer'}, 'seller_id': 1879423, 'created_at': '2026-05-01T10:43:14.361193Z', 'updated_at': '2026-05-01T10:47:30.732129Z', 'data': ['Тестовое сообщение на webhook 3']}
INFO:     91.223.93.246:0 - "POST /new_message HTTP/1.1" 200 OK
2026-05-01 13:47:36 - webhook - INFO - Получено уведомление: type=TYPE_UPDATE_MESSAGE
2026-05-01 13:47:36 - webhook - INFO - Получено уведомление об обновлении сообщения:
{'message_type': 'TYPE_UPDATE_MESSAGE', 'message_id': '3000000415096522383', 'chat_id': '6c9f7308-7a97-4ab3-8774-12bf4b4fb1e0', 'chat_type': 'Buyer_Seller', 'user': {'id': '47746975', 'type': 'Customer'}, 'seller_id': 1879423, 'created_at': '2026-05-01T10:47:00.994532Z', 'updated_at': '2026-05-01T10:47:32.773939Z', 'data': ['Я изменил это сообщение.']}
INFO:     91.223.93.246:0 - "POST /new_message HTTP/1.1" 200 OK
2026-05-01 13:48:28 - webhook - INFO - Получено уведомление: type=TYPE_UPDATE_MESSAGE
2026-05-01 13:48:28 - webhook - INFO - Получено уведомление об обновлении сообщения:
{'message_type': 'TYPE_UPDATE_MESSAGE', 'message_id': '3000000415096934171', 'chat_id': '6c9f7308-7a97-4ab3-8774-12bf4b4fb1e0', 'chat_type': 'Buyer_Seller', 'user': {'id': '47746975', 'type': 'Customer'}, 'seller_id': 1879423, 'created_at': '2026-05-01T10:48:25.965616Z', 'updated_at': '2026-05-01T10:48:29.132406Z', 'data': ['Сейчас должен прийти NEW']}
INFO:     91.223.93.242:0 - "POST /new_message HTTP/1.1" 200 OK
2026-05-01 13:48:32 - webhook - INFO - Получено уведомление: type=TYPE_NEW_MESSAGE
2026-05-01 13:48:32 - webhook - INFO - Получено уведомление о новом сообщении:
{'message_type': 'TYPE_NEW_MESSAGE', 'message_id': '3000000415096934171', 'chat_id': '6c9f7308-7a97-4ab3-8774-12bf4b4fb1e0', 'chat_type': 'Buyer_Seller', 'user': {'id': '47746975', 'type': 'Customer'}, 'seller_id': 1879423, 'created_at': '2026-05-01T10:48:25.965616Z', 'data': ['Сейчас должен прийти NEW']}
INFO:     91.223.93.248:0 - "POST /new_message HTTP/1.1" 200 OK

Обратите внимание, что сообщение  "Тестовое сообщение на webhook 3"Пришло с задержкой в 4 минуты. Хоте create_at у него в то же время, что и в чате. Судя по всему присутствует какая-то задержка в очереди.Но интересует все же два вопроса:1. Почему на ивент отправки нового сообщения прилетает UPDATE вместо NEW2. Почему приходит друг за другом NEW и UPDATE либо наоборот

1 комментарий
Чтобы оставить комментарий, нужно  или 
  • M
    Magic
    6 месяцев назад

    UPD: Здравствуйте, уважаемые разработчики. Также я заметил некоторые пропуски в отправках уведомлений на мой хук. Может ли это быть связано с техническими особенностями (очередями) на вашей стороне? потому как на моей вроде бы все ок