🔧 Step 1: Celery ইনস্টল
🧠 Step 2: control_system/celery.py তৈরি করো
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'control_system.settings')
app = Celery('control_system')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
🧩 Step 3: control_system/__init__.py-তে অ্যাড করো
from .celery import app as celery_app
__all__ = ('celery_app',)
⚙️ Step 4: settings.py তে Redis Broker সেট করো
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
🧠 Step 5: core/tasks.py – task define করো
from celery import shared_task
from .models import Operation
from django.utils import timezone
from datetime import datetime
@shared_task
def process_call_task(data):
Operation.objects.create(
dest_phone_number=data['dest_phone_number'],
audio_player_number=data['audio_player_number'],
source_id=data.get('source_id', 'unknown'),
received_time=datetime.fromisoformat(data['received_time']),
enqueue_time=timezone.now(),
sip_id=data.get('sip_id')
)
return "Call Processed"
@shared_task
def end_call_task(device_id, command="end"):
# এখানে future WebSocket integration হতে পারে
print(f"Ending call on {device_id} with command {command}")
return "Call Ended"
📡 Step 6: views.py – API call → Celery Task
from .tasks import process_call_task, end_call_task
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
# ✅ POST /process/
class ProcessCallView(APIView):
def post(self, request):
process_call_task.delay(request.data)
return Response({"message": "Call request sent to queue"}, status=202)
# ✅ POST /endCall/
class EndCallView(APIView):
def post(self, request):
device_id = request.data.get("device_id")
command = request.data.get("command", "end")
end_call_task.delay(device_id, command)
return Response({"message": f"Call end command sent to {device_id}"}, status=202)
🔗 Step 7: urls.py
from .views import ProcessCallView, EndCallView
urlpatterns += [
path('process/', ProcessCallView.as_view()),
path('endCall/', EndCallView.as_view()),
]
🚀 Step 8: Redis এবং Celery চালাও
✅ Redis চালাও (cmd/terminal)
✅ Celery worker চালাও:
celery -A control_system worker --loglevel=info
📫 Test with Postman
🔹 /api/process/ (POST)
{
"dest_phone_number": "01711112233",
"audio_player_number": "01999998888",
"received_time": "2025-04-04T12:00:00",
"sip_id": "sip001",
"source_id": "android001"
}
🔹 /api/endCall/ (POST)
{
"device_id": "android001",
"command": "end"
}
সারসংক্ষেপ
| বিষয় | ✅ |
|---|
| Redis Broker | ✅ |
| Celery Task | ✅ process_call, end_call |
| Async Queue | ✅ delay() |
| Integration with DB | ✅ Operation create |