rairo commited on
Commit
19eff26
·
verified ·
1 Parent(s): 7cade13

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +34 -29
main.py CHANGED
@@ -1,5 +1,6 @@
1
  import os
2
  import logging
 
3
  import requests
4
  import dns.resolver
5
  from heyoo import WhatsApp
@@ -20,39 +21,39 @@ logger = logging.getLogger(__name__)
20
  load_dotenv()
21
 
22
  # Configure DNS resolver with environment variables from Spaces
23
- nameserver1 = os.getenv('nameserver1', '8.8.8.8') # Google DNS as fallback
24
- nameserver2 = os.getenv('nameserver2', '8.8.4.4') # Google DNS as fallback
25
-
26
- resolver = dns.resolver.Resolver()
27
- resolver.nameservers = [nameserver1, nameserver2]
28
-
29
- # Custom session for requests with DNS configuration
30
- class CustomSession(requests.Session):
31
- def resolve_dns(self, hostname):
 
 
 
32
  try:
33
- answer = resolver.resolve(hostname, 'A')
34
- return str(answer[0])
 
 
 
35
  except Exception as e:
36
- logger.error(f"DNS resolution failed for {hostname}: {e}")
37
- raise
38
-
39
- def send(self, request, **kwargs):
40
- if 'graph.facebook.com' in request.url:
41
- try:
42
- ip = self.resolve_dns('graph.facebook.com')
43
- request.url = request.url.replace('graph.facebook.com', ip)
44
- request.headers['Host'] = 'graph.facebook.com'
45
- except Exception as e:
46
- logger.error(f"DNS resolution failed: {e}")
47
- return super().send(request, **kwargs)
48
-
49
- # Initialize WhatsApp with custom session
50
  try:
51
- session = CustomSession()
52
  messenger = WhatsApp(
53
  os.getenv("whatsapp_token"),
54
- phone_number_id=os.getenv("phone_number_id"),
55
- session=session
56
  )
57
  if not os.getenv("whatsapp_token") or not os.getenv("phone_number_id"):
58
  raise ValueError("Missing required environment variables")
@@ -66,6 +67,8 @@ VERIFY_TOKEN = "30cca545-3838-48b2-80a7-9e43b1ae8ce4"
66
  def health_check():
67
  """Health check endpoint to verify DNS resolution"""
68
  try:
 
 
69
  ip = resolver.resolve('graph.facebook.com', 'A')[0]
70
  return {
71
  "status": "healthy",
@@ -184,10 +187,12 @@ def handle_media_message(messenger, data, message_type, mobile):
184
  def test_connection():
185
  """Test DNS resolution and connection to Graph API"""
186
  try:
 
 
187
  ip = resolver.resolve('graph.facebook.com', 'A')[0]
188
  logger.info(f"DNS Resolution successful: {ip}")
189
 
190
- response = session.get('https://graph.facebook.com')
191
  logger.info(f"HTTPS Connection successful: {response.status_code}")
192
 
193
  except Exception as e:
 
1
  import os
2
  import logging
3
+ import socket
4
  import requests
5
  import dns.resolver
6
  from heyoo import WhatsApp
 
21
  load_dotenv()
22
 
23
  # Configure DNS resolver with environment variables from Spaces
24
+ nameserver1 = os.getenv('nameserver1', '8.8.8.8')
25
+ nameserver2 = os.getenv('nameserver2', '8.8.4.4')
26
+
27
+ # Configure global DNS resolution
28
+ def setup_dns():
29
+ """Configure DNS resolution globally"""
30
+ resolver = dns.resolver.Resolver()
31
+ resolver.nameservers = [nameserver1, nameserver2]
32
+
33
+ # Create a custom getaddrinfo function
34
+ _orig_getaddrinfo = socket.getaddrinfo
35
+ def new_getaddrinfo(*args, **kwargs):
36
  try:
37
+ # If the host is graph.facebook.com, use our custom resolver
38
+ if args and args[0] == 'graph.facebook.com':
39
+ answers = resolver.resolve('graph.facebook.com', 'A')
40
+ ip = str(answers[0])
41
+ return _orig_getaddrinfo(ip, *args[1:], **kwargs)
42
  except Exception as e:
43
+ logger.error(f"DNS resolution failed: {e}")
44
+ return _orig_getaddrinfo(*args, **kwargs)
45
+
46
+ # Replace the global getaddrinfo function
47
+ socket.getaddrinfo = new_getaddrinfo
48
+
49
+ # Setup DNS resolution
50
+ setup_dns()
51
+
52
+ # Initialize WhatsApp
 
 
 
 
53
  try:
 
54
  messenger = WhatsApp(
55
  os.getenv("whatsapp_token"),
56
+ phone_number_id=os.getenv("phone_number_id")
 
57
  )
58
  if not os.getenv("whatsapp_token") or not os.getenv("phone_number_id"):
59
  raise ValueError("Missing required environment variables")
 
67
  def health_check():
68
  """Health check endpoint to verify DNS resolution"""
69
  try:
70
+ resolver = dns.resolver.Resolver()
71
+ resolver.nameservers = [nameserver1, nameserver2]
72
  ip = resolver.resolve('graph.facebook.com', 'A')[0]
73
  return {
74
  "status": "healthy",
 
187
  def test_connection():
188
  """Test DNS resolution and connection to Graph API"""
189
  try:
190
+ resolver = dns.resolver.Resolver()
191
+ resolver.nameservers = [nameserver1, nameserver2]
192
  ip = resolver.resolve('graph.facebook.com', 'A')[0]
193
  logger.info(f"DNS Resolution successful: {ip}")
194
 
195
+ response = requests.get('https://graph.facebook.com')
196
  logger.info(f"HTTPS Connection successful: {response.status_code}")
197
 
198
  except Exception as e: