231 lines
9.4 KiB
Python
231 lines
9.4 KiB
Python
|
|
import json
|
|||
|
|
|
|||
|
|
import requests
|
|||
|
|
from django.http import HttpResponse
|
|||
|
|
from rest_framework import status
|
|||
|
|
from rest_framework.permissions import AllowAny
|
|||
|
|
from rest_framework.response import Response
|
|||
|
|
from rest_framework.views import APIView
|
|||
|
|
|
|||
|
|
from authentication.models import SystemUserProfile
|
|||
|
|
from general_urls import base_url_for_sms_report
|
|||
|
|
from panel.convert_date import convert_to_shamsi
|
|||
|
|
from panel.models import PosCompany, ProductsTransactions
|
|||
|
|
from .helper import Token
|
|||
|
|
from .models import User_Bale
|
|||
|
|
|
|||
|
|
|
|||
|
|
class BaleWebhookView(APIView):
|
|||
|
|
permission_classes = [AllowAny]
|
|||
|
|
|
|||
|
|
def post(self, request):
|
|||
|
|
try:
|
|||
|
|
data = request.data
|
|||
|
|
|
|||
|
|
if 'message' in data:
|
|||
|
|
message = data['message']
|
|||
|
|
chat_id = message['chat']['id']
|
|||
|
|
user_info = message.get('from', {})
|
|||
|
|
|
|||
|
|
user, created = User_Bale.objects.update_or_create(
|
|||
|
|
chat_id=chat_id,
|
|||
|
|
defaults={
|
|||
|
|
'first_name': user_info.get('first_name'),
|
|||
|
|
'last_name': user_info.get('last_name'),
|
|||
|
|
}
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
text = message.get('text', '')
|
|||
|
|
contact = message.get('contact', '')
|
|||
|
|
|
|||
|
|
if text == '/start':
|
|||
|
|
welcome_message = "سلام! به ربات هوشمند سامانه رصدیار خوش آمدید. لطفاً برای ادامه شماره تلفن خود را ثبت کنید."
|
|||
|
|
|
|||
|
|
keyboard = {
|
|||
|
|
"keyboard": [[{
|
|||
|
|
"text": "📱 ارسال شماره تلفن",
|
|||
|
|
"request_contact": True
|
|||
|
|
}]],
|
|||
|
|
"resize_keyboard": True,
|
|||
|
|
"one_time_keyboard": True
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
self.send_message(
|
|||
|
|
chat_id,
|
|||
|
|
welcome_message,
|
|||
|
|
reply_markup=keyboard
|
|||
|
|
)
|
|||
|
|
elif contact:
|
|||
|
|
phone = contact['phone_number']
|
|||
|
|
if phone.startswith('98'):
|
|||
|
|
phone = '0' + phone[2:]
|
|||
|
|
system_user=SystemUserProfile.objects.filter(trash=False,mobile=phone).first()
|
|||
|
|
if system_user:
|
|||
|
|
user.rasadyar_user=system_user
|
|||
|
|
user.phone_number = phone
|
|||
|
|
user.save()
|
|||
|
|
|
|||
|
|
keyboard = {
|
|||
|
|
"keyboard": [
|
|||
|
|
[{"text": "ℹ️ درباره ما"},
|
|||
|
|
{"text": "📬 تماس با ما"}
|
|||
|
|
]
|
|||
|
|
],
|
|||
|
|
"resize_keyboard": True,
|
|||
|
|
"one_time_keyboard": False
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
self.send_message(
|
|||
|
|
chat_id,
|
|||
|
|
f"شماره شما ثبت شد: {phone}",
|
|||
|
|
reply_markup=keyboard
|
|||
|
|
)
|
|||
|
|
elif text == "ℹ️ درباره ما":
|
|||
|
|
self.send_message(
|
|||
|
|
chat_id,
|
|||
|
|
"ربات هوشمند ساخته شده با پایتون \n\n"
|
|||
|
|
"توسعه دهنده: شرکت هوشمندسازان فرآیند های نوین ماداکتو"
|
|||
|
|
)
|
|||
|
|
elif text == "📬 تماس با ما":
|
|||
|
|
self.send_message(
|
|||
|
|
chat_id,
|
|||
|
|
"برای ارتباط با ما:\n\n"
|
|||
|
|
"📧 ایمیل: info@mnpc.ir\n"
|
|||
|
|
"☎️ تلفن: 28421237-021\n"
|
|||
|
|
"🌐 وبسایت: https://mnpc.ir/ \n"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
self.send_message(chat_id, f"لطفا از دکمه های راهنما استفاده کنید.")
|
|||
|
|
|
|||
|
|
return Response({'status': 'ok'}, status=status.HTTP_200_OK)
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print("خطا:", e)
|
|||
|
|
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
|||
|
|
|
|||
|
|
def send_message(self, chat_id, text, reply_markup=None):
|
|||
|
|
# url = f"https://tapi.bale.ai/bot{Token}/sendMessage"
|
|||
|
|
# payload = {
|
|||
|
|
# "chat_id": chat_id,
|
|||
|
|
# "text": text
|
|||
|
|
# }
|
|||
|
|
#
|
|||
|
|
# if reply_markup:
|
|||
|
|
# payload["reply_markup"] = reply_markup
|
|||
|
|
#
|
|||
|
|
# headers = {'Content-Type': 'application/json'}
|
|||
|
|
#
|
|||
|
|
# try:
|
|||
|
|
# response = requests.post(url, data=json.dumps(payload), headers=headers)
|
|||
|
|
# response.raise_for_status()
|
|||
|
|
# return response.json()
|
|||
|
|
# except requests.exceptions.RequestException as e:
|
|||
|
|
# print("خطا در ارسال پیام:", e)
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def bale_set_webhook(request):
|
|||
|
|
response = requests.post(
|
|||
|
|
f"https://tapi.bale.ai/bot{Token}/setWebhook",
|
|||
|
|
json={"url": f"https://{base_url_for_sms_report}backend.rasadyaar.ir/bale/webhook/"}
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
return HttpResponse(response.json())
|
|||
|
|
|
|||
|
|
|
|||
|
|
def send_message_for_bale(chat_id, text, reply_markup=None):
|
|||
|
|
# url = f"https://tapi.bale.ai/bot{Token}/sendMessage"
|
|||
|
|
# payload = {
|
|||
|
|
# "chat_id": chat_id,
|
|||
|
|
# "text": text
|
|||
|
|
# }
|
|||
|
|
#
|
|||
|
|
# if reply_markup:
|
|||
|
|
# payload["reply_markup"] = reply_markup
|
|||
|
|
#
|
|||
|
|
# headers = {'Content-Type': 'application/json'}
|
|||
|
|
#
|
|||
|
|
# try:
|
|||
|
|
# response = requests.post(url, data=json.dumps(payload), headers=headers)
|
|||
|
|
# response.raise_for_status()
|
|||
|
|
# return response.json()
|
|||
|
|
# except requests.exceptions.RequestException as e:
|
|||
|
|
# print("خطا در ارسال پیام:", e)
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def send_transaction(transaction, chat_ids):
|
|||
|
|
try:
|
|||
|
|
if transaction.paid or transaction.status in (0, 1):
|
|||
|
|
pos_company = PosCompany.objects.filter(trash=False, en_name__exact=transaction.posProvider).first()
|
|||
|
|
if pos_company:
|
|||
|
|
pos_company_name = pos_company.name
|
|||
|
|
else:
|
|||
|
|
pos_company_name = 'ناشناس'
|
|||
|
|
if transaction.pos.kill_house:
|
|||
|
|
dict_info = {
|
|||
|
|
'name': transaction.pos.kill_house.name,
|
|||
|
|
'mobile': transaction.pos.kill_house.kill_house_operator.user.mobile,
|
|||
|
|
'fullname': transaction.pos.kill_house.kill_house_operator.user.fullname,
|
|||
|
|
'city': transaction.pos.kill_house.kill_house_operator.user.city.name,
|
|||
|
|
'province': transaction.pos.kill_house.kill_house_operator.user.province.name,
|
|||
|
|
'national_code': transaction.pos.kill_house.kill_house_operator.user.national_code,
|
|||
|
|
'type': 'کشتارگاه',
|
|||
|
|
}
|
|||
|
|
elif transaction.pos.guild:
|
|||
|
|
dict_info = {
|
|||
|
|
'name': transaction.pos.guild.guilds_name,
|
|||
|
|
'mobile': transaction.pos.guild.user.mobile,
|
|||
|
|
'fullname': transaction.pos.guild.user.fullname,
|
|||
|
|
'city': transaction.pos.guild.user.city.name,
|
|||
|
|
'province': transaction.pos.guild.user.province.name,
|
|||
|
|
'national_code': transaction.pos.guild.user.national_code,
|
|||
|
|
'type': 'صنف',
|
|||
|
|
}
|
|||
|
|
else:
|
|||
|
|
dict_info = {
|
|||
|
|
'name': transaction.pos.cooperative.name,
|
|||
|
|
'mobile': transaction.pos.cooperative.user.mobile,
|
|||
|
|
'fullname': transaction.pos.cooperative.user.fullname,
|
|||
|
|
'city': transaction.pos.cooperative.user.city.name,
|
|||
|
|
'province': transaction.pos.cooperative.user.province.name,
|
|||
|
|
'national_code': transaction.pos.cooperative.user.national_code,
|
|||
|
|
'type': 'سامانه دام',
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
price = "{:,}".format(int(transaction.price))
|
|||
|
|
|
|||
|
|
alert_message = (
|
|||
|
|
f"*---* {transaction.result} *---*\n"
|
|||
|
|
f"{dict_info['type']} : *{dict_info['name']}*\n"
|
|||
|
|
f"آدرس : *{dict_info['province']}* - *{dict_info['city']}*\n"
|
|||
|
|
f"درگاه : *{pos_company_name}*\n"
|
|||
|
|
f"زمان : *{convert_to_shamsi(datetime=transaction.date, in_value=True)}*\n"
|
|||
|
|
f"مبلغ کل : *{price}* ریال\n\n"
|
|||
|
|
)
|
|||
|
|
products = ProductsTransactions.objects.filter(trash=False, transaction=transaction)
|
|||
|
|
for prd in products:
|
|||
|
|
if prd.live_stack_products:
|
|||
|
|
fi_prd_price = "{:,}".format(int(int(prd.cur_price) / int(prd.cur_weight)) if prd.cur_weight > 0 else 0)
|
|||
|
|
else:
|
|||
|
|
fi_prd_price = "{:,}".format(int(prd.price))
|
|||
|
|
cur_weight = "{:,}".format(int(prd.cur_weight))
|
|||
|
|
cur_price = "{:,}".format(int(prd.cur_price))
|
|||
|
|
if prd.cur_weight != 1:
|
|||
|
|
alert_message += (
|
|||
|
|
f"*{prd.name}* (فی {fi_prd_price} ریال)\n"
|
|||
|
|
f"وزن خریداری شده:({cur_weight}{prd.targetunit}) \n"
|
|||
|
|
f"مبلغ: *{cur_price}* ریال\n\n"
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
alert_message += (
|
|||
|
|
f"*{prd.name}* \n"
|
|||
|
|
f"خریداری شده : *{cur_price}* ریال\n\n"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
for i in chat_ids:
|
|||
|
|
send_message_for_bale(chat_id=i, text=alert_message)
|
|||
|
|
except:
|
|||
|
|
pass
|