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 |
|