@robocop45
Only python

Почему не вызывается метод в consumer?

Всем привет, задача: Я интегрировал телефонию новофон. Как только на мою ATC поступает групповой звонок(звонок сразу на всех операторов) нужно формировать группу в consumer исходя из id звонка, который отправила телефония на мой вебхук.
1 звонок=1группа
Зачем это нужно? Чтобы когда ОДИН ИЗ операторов принял звонок, то отключить текущее ws соединение для остальных операторов, чтобы им не сыпались различные уведомления

Пытаюсь вызывать метод, который должен формировать ту самую группу, но он не вызывается

services.py
def connect_to_start_call(data: dict, type) -> None:
    """Отвечает за подключение к layer у webscoket"""

    channel_layer = get_channel_layer()
    group_name = f'call_{data["call_id"]}' #формирую ту саму группу 


    event = { #отсылаю данные в consumer
        'type': str(type),
        'data': data
    }

    async_to_sync(channel_layer.group_send)(group_name, event)


def start_call(data):
    """Данную функцию я вызываю в коде выше"""
    connect_to_start_call(
        type='notify_start',
        data={
            'call_id': data
        }
    )


consumers.py
class CallConsumer(AsyncWebsocketConsumer):
    """
       WebSocket-потребитель для отправки уведомлений пользователям.
    """

    async def connect(self) -> None:
        """Устанавливает соединение и проверяет юзера на аутентификацию"""

        await self.accept()

    async def disconnect(self, close_code) -> None:
        """Отключает соединение"""
        if self.user.is_authenticated:
            await self.channel_layer.group_discard(
                self.group_name,
                self.channel_name)

    async def notify_start(self, event):
        print('i am here')
        if event:
            call_id = event['data']['call_id']
            self.group_name = f'call_{call_id}'

            self.user = self.scope["user"]

            if self.user.is_authenticated:
                await self.channel_layer.group_add(
                    self.group_name, self.channel_name
                )


    async def send_notification(self, event: dict) -> None:
        """ Отправляет уведомление конкретному пользователю"""

        if self.scope['user'].id == int(event['data'][
                                            'employee_number']):  # сравниваем id текущего пользователя со списком из контекста(send_simple_notification)
            await self.send(text_data=json.dumps(event['data'], ensure_ascii=False))


как можно решить эту проблему?
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы