Отправка сообщения определенной группе в Django Channels

Я хотел бы подключить каждого пользователя, посетившего определенную страницу. Назовем ее "Зал ожидания" и подключим к вебсокету.

Когда пользователь подключается к вебсокету, он подписывается на группу. Группа называется по имени пользователя (user_id). Таким образом, User1 и User подключаются к вебсокету и подписываются на группы; 1 и 2 соответственно.

После подключения пользователя я запускаю метод, который отправляет user_id, с которым пользователь был сопоставлен, и room_id на мой сервер. Предположим, что User1 сопоставлен с User2. User1 отправит User2 и room_id на сервер. Затем я отправляю сообщение обратно в группу, связанную с полученным идентификатором пользователя. То есть я посылаю сообщение с вебсокета User1 на клиент User2.

Однако, когда я реализую эту логику, пользователь User2 не получает никаких сообщений.

Вот что у меня есть в consumers.py:

class PracticeConsumer(AsyncConsumer):
    username_id = None
    async def websocket_connect(self, event):
        username = self.scope['user']
        username_id = str(await self.get_user(username))
        group_name = username_id
        await self.channel_layer.group_add(
            '{}'.format(group_name),
            self.channel_name
        )
        await self.send({
            "type": "websocket.accept"
        })

    async def websocket_receive(self, event):
        received = event["text"] 
        invite_data = received.split()
        matched_user = invite_data[0]
        username = invite_data[2]
        user_id = str(await self.get_user(matched_user))
        my_response = {
            "message": "!!!!the websocket is sending this back!!!!"
        }
        sleep(1)
        await self.channel_layer.group_send(
            '{}'.format(user_id),
            {
                "type": "send.message",
                "message": json.dumps(my_response),
                "username": username
            })
...
    async def send_message(self, event):
        message = event['message']
        await self.send({
            'message': message
        })

    @database_sync_to_async
    def get_user(self, user_id):
        try:
            return User.objects.get(username=user_id).pk
        except User.DoesNotExist:
            return AnonymousUser()

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

    INFO 2022-09-26 10:09:43,129: WebSocket CONNECT /connect/testing/ [127.0.0.1:56653]
    INFO 2022-09-26 10:09:44,239: sending message inside presenter{"message": "!!!!the websocket is sending this back!!!!"}
    INFO 2022-09-26 10:09:44,240: sending message inside presenter{"message": "!!!!the websocket is sending this back!!!!"}
    Exception inside application: 'type'
Traceback (most recent call last):
  File "C:\Users\15512\Desktop\django-project\peerplatform\signup\middleware.py", line 45, in __call__
    return await super().__call__(scope, receive, send)
  ...
  File "C:\Users\15512\anaconda3\lib\site-packages\channels\consumer.py",   File "C:\Users\15512\Desktop\django-project\peerplatform\signup\consumers.py", line 76, in send_message
    await self.send({
  File "C:\Users\15512\anaconda3\lib\site-packages\channels\consumer.py", line 81, in send
    await self.base_send(message)
  File "C:\Users\15512\anaconda3\lib\site-packages\channels\sessions.py", line 186, in send
    message["type"] in self.save_message_types
Вернуться на верх