From b924442631bc19aad32a8ce32e72f7f09a9fab1c Mon Sep 17 00:00:00 2001 From: behruz Date: Wed, 10 Dec 2025 16:39:28 +0500 Subject: [PATCH] dashboard: userlarga message yozish uchun api qoshildi --- .../dashboard/serializers/send_message.py | 7 ++++ core/apps/dashboard/urls.py | 7 +++- core/apps/dashboard/views/send_message.py | 38 +++++++++++++++++++ core/services/send_telegram_msg.py | 17 +++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 core/apps/dashboard/serializers/send_message.py create mode 100644 core/apps/dashboard/views/send_message.py diff --git a/core/apps/dashboard/serializers/send_message.py b/core/apps/dashboard/serializers/send_message.py new file mode 100644 index 0000000..445ffb0 --- /dev/null +++ b/core/apps/dashboard/serializers/send_message.py @@ -0,0 +1,7 @@ +# rest framework +from rest_framework import serializers + + +class SendMessageSerializer(serializers.Serializer): + user_ids = serializers.ListField(child=serializers.IntegerField()) + message = serializers.CharField() \ No newline at end of file diff --git a/core/apps/dashboard/urls.py b/core/apps/dashboard/urls.py index 4965ce8..d0271cf 100644 --- a/core/apps/dashboard/urls.py +++ b/core/apps/dashboard/urls.py @@ -35,6 +35,8 @@ from core.apps.dashboard.views.location import LocationViewSet, UserLocationView from core.apps.dashboard.views.support import SupportListApiView # distibuted products from core.apps.dashboard.views.dis_prod import DistributedProductListApiView +# send message +from core.apps.dashboard.views.send_message import SendMessageToEmployee urlpatterns = [ @@ -82,7 +84,10 @@ urlpatterns = [ [ path('list/', DistributedProductListApiView.as_view(), name='distributed-product-list-api'), ] - )) + )), + + # -------------- send message -------------- + path('send_message/', SendMessageToEmployee.as_view()), ] diff --git a/core/apps/dashboard/views/send_message.py b/core/apps/dashboard/views/send_message.py new file mode 100644 index 0000000..6544343 --- /dev/null +++ b/core/apps/dashboard/views/send_message.py @@ -0,0 +1,38 @@ +# rest framework +from rest_framework import generics, permissions + + +# services +from core.services.send_telegram_msg import send_message +# accounts +from core.apps.accounts.models import User +#shared +from core.apps.shared.utils.response_mixin import ResponseMixin +# dashboard +from core.apps.dashboard.serializers.send_message import SendMessageSerializer + + +class SendMessageToEmployee(generics.GenericAPIView, ResponseMixin): + serializer_class = SendMessageSerializer + permission_classes = [permissions.IsAdminUser] + queryset = User.objects.all() + + def post(self, request): + try: + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(): + data = serializer.validated_data + message = data.get('message') + user_ids = data.get('user_ids') + users = User.objects.filter(id__in=user_ids) + for user in users: + send_message(chat_id=user.telegram_id, message=message) + return self.success_response( + data={}, + message="Xabar yuborildi" + ) + except Exception as e: + return self.error_response( + data=str(e), + message="xatolik, backend dasturchi bilan boglaning" + ) \ No newline at end of file diff --git a/core/services/send_telegram_msg.py b/core/services/send_telegram_msg.py index b58acb4..67a1124 100644 --- a/core/services/send_telegram_msg.py +++ b/core/services/send_telegram_msg.py @@ -30,4 +30,21 @@ def send_to_telegram(chat_id, order_id): except Exception as e: print(f"Telegram xatolik: {e}") + return False + + +def send_message(chat_id, message): + bot_token = settings.BOT_TOKEN + + try: + url = f"https://api.telegram.org/bot{bot_token}/sendMessage" + data = { + "chat_id": chat_id, + "text": message + } + response = requests.post(url, data=data) + print(response.json()) + return True + except Exception as e: + print(f"Telegram xatosi: {e}") return False \ No newline at end of file