Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1064,27 +1064,24 @@ def split_message_for_whatsapp(message: str, max_length: int = 1000) -> list:
|
|
| 1064 |
return [message[i:i+max_length] for i in range(0, len(message), max_length)]
|
| 1065 |
|
| 1066 |
def send_whatsjet_message(phone_number: str, message: str, media_type: str = None, media_path: str = None, filename: str = None) -> bool:
|
| 1067 |
-
"""Send a message using WhatsJet API with optional media attachment"""
|
| 1068 |
if not all([WHATSJET_API_URL, WHATSJET_VENDOR_UID, WHATSJET_API_TOKEN]):
|
| 1069 |
logger.error("[WhatsJet] Missing environment variables.")
|
| 1070 |
return False
|
| 1071 |
|
| 1072 |
url = f"{WHATSJET_API_URL}/{WHATSJET_VENDOR_UID}/contact/send-message?token={WHATSJET_API_TOKEN}"
|
| 1073 |
|
| 1074 |
-
# Handle media messages
|
| 1075 |
if media_type and media_path:
|
| 1076 |
-
|
| 1077 |
-
|
| 1078 |
-
media_content = f.read()
|
| 1079 |
-
media_b64 = base64.b64encode(media_content).decode('utf-8')
|
| 1080 |
payload = {
|
| 1081 |
-
"phone_number": phone_number,
|
| 1082 |
"message_body": message,
|
| 1083 |
-
|
| 1084 |
-
|
| 1085 |
-
|
| 1086 |
}
|
| 1087 |
-
# Send message with increased timeout
|
| 1088 |
try:
|
| 1089 |
response = httpx.post(
|
| 1090 |
url,
|
|
@@ -1092,14 +1089,39 @@ def send_whatsjet_message(phone_number: str, message: str, media_type: str = Non
|
|
| 1092 |
timeout=15
|
| 1093 |
)
|
| 1094 |
response.raise_for_status()
|
| 1095 |
-
logger.info(f"[WhatsJet] Media message sent successfully to {phone_number}")
|
| 1096 |
return True
|
| 1097 |
except Exception as e:
|
| 1098 |
-
logger.error(f"[WhatsJet] Exception sending media message: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1099 |
return False
|
| 1100 |
-
except Exception as e:
|
| 1101 |
-
logger.error(f"[WhatsJet] Exception preparing media message: {str(e)}")
|
| 1102 |
-
return False
|
| 1103 |
|
| 1104 |
# Handle text messages
|
| 1105 |
if not message.strip():
|
|
@@ -1108,7 +1130,6 @@ def send_whatsjet_message(phone_number: str, message: str, media_type: str = Non
|
|
| 1108 |
for chunk in split_message_for_whatsapp(message):
|
| 1109 |
try:
|
| 1110 |
payload = {"phone_number": phone_number, "message_body": chunk}
|
| 1111 |
-
# Send message with increased timeout
|
| 1112 |
try:
|
| 1113 |
response = httpx.post(
|
| 1114 |
url,
|
|
@@ -1123,7 +1144,6 @@ def send_whatsjet_message(phone_number: str, message: str, media_type: str = Non
|
|
| 1123 |
except Exception as e:
|
| 1124 |
logger.error(f"[WhatsJet] Exception preparing text chunk: {str(e)}")
|
| 1125 |
return False
|
| 1126 |
-
|
| 1127 |
logger.info(f"[WhatsJet] Successfully sent complete text message to {phone_number}")
|
| 1128 |
return True
|
| 1129 |
|
|
|
|
| 1064 |
return [message[i:i+max_length] for i in range(0, len(message), max_length)]
|
| 1065 |
|
| 1066 |
def send_whatsjet_message(phone_number: str, message: str, media_type: str = None, media_path: str = None, filename: str = None) -> bool:
|
| 1067 |
+
"""Send a message using WhatsJet API with optional media attachment or public URL"""
|
| 1068 |
if not all([WHATSJET_API_URL, WHATSJET_VENDOR_UID, WHATSJET_API_TOKEN]):
|
| 1069 |
logger.error("[WhatsJet] Missing environment variables.")
|
| 1070 |
return False
|
| 1071 |
|
| 1072 |
url = f"{WHATSJET_API_URL}/{WHATSJET_VENDOR_UID}/contact/send-message?token={WHATSJET_API_TOKEN}"
|
| 1073 |
|
| 1074 |
+
# Handle media messages (local file or public URL)
|
| 1075 |
if media_type and media_path:
|
| 1076 |
+
# If media_path is a public URL, use media_url and send caption
|
| 1077 |
+
if isinstance(media_path, str) and media_path.startswith("http"):
|
|
|
|
|
|
|
| 1078 |
payload = {
|
| 1079 |
+
"phone_number": phone_number,
|
| 1080 |
"message_body": message,
|
| 1081 |
+
"media_type": media_type,
|
| 1082 |
+
"media_url": media_path,
|
| 1083 |
+
"media_filename": filename or os.path.basename(media_path)
|
| 1084 |
}
|
|
|
|
| 1085 |
try:
|
| 1086 |
response = httpx.post(
|
| 1087 |
url,
|
|
|
|
| 1089 |
timeout=15
|
| 1090 |
)
|
| 1091 |
response.raise_for_status()
|
| 1092 |
+
logger.info(f"[WhatsJet] Media URL message sent successfully to {phone_number}")
|
| 1093 |
return True
|
| 1094 |
except Exception as e:
|
| 1095 |
+
logger.error(f"[WhatsJet] Exception sending media URL message: {e}")
|
| 1096 |
+
return False
|
| 1097 |
+
else:
|
| 1098 |
+
# Local file logic as before
|
| 1099 |
+
try:
|
| 1100 |
+
with open(media_path, 'rb') as f:
|
| 1101 |
+
media_content = f.read()
|
| 1102 |
+
media_b64 = base64.b64encode(media_content).decode('utf-8')
|
| 1103 |
+
payload = {
|
| 1104 |
+
"phone_number": phone_number,
|
| 1105 |
+
"message_body": message,
|
| 1106 |
+
'media_type': media_type,
|
| 1107 |
+
'media_content': media_b64,
|
| 1108 |
+
'media_filename': filename or os.path.basename(media_path)
|
| 1109 |
+
}
|
| 1110 |
+
try:
|
| 1111 |
+
response = httpx.post(
|
| 1112 |
+
url,
|
| 1113 |
+
json=payload,
|
| 1114 |
+
timeout=15
|
| 1115 |
+
)
|
| 1116 |
+
response.raise_for_status()
|
| 1117 |
+
logger.info(f"[WhatsJet] Media message sent successfully to {phone_number}")
|
| 1118 |
+
return True
|
| 1119 |
+
except Exception as e:
|
| 1120 |
+
logger.error(f"[WhatsJet] Exception sending media message: {e}")
|
| 1121 |
+
return False
|
| 1122 |
+
except Exception as e:
|
| 1123 |
+
logger.error(f"[WhatsJet] Exception preparing media message: {str(e)}")
|
| 1124 |
return False
|
|
|
|
|
|
|
|
|
|
| 1125 |
|
| 1126 |
# Handle text messages
|
| 1127 |
if not message.strip():
|
|
|
|
| 1130 |
for chunk in split_message_for_whatsapp(message):
|
| 1131 |
try:
|
| 1132 |
payload = {"phone_number": phone_number, "message_body": chunk}
|
|
|
|
| 1133 |
try:
|
| 1134 |
response = httpx.post(
|
| 1135 |
url,
|
|
|
|
| 1144 |
except Exception as e:
|
| 1145 |
logger.error(f"[WhatsJet] Exception preparing text chunk: {str(e)}")
|
| 1146 |
return False
|
|
|
|
| 1147 |
logger.info(f"[WhatsJet] Successfully sent complete text message to {phone_number}")
|
| 1148 |
return True
|
| 1149 |
|