File size: 3,098 Bytes
052e52f
 
 
 
cbda7a6
 
052e52f
 
cbda7a6
 
 
052e52f
cbda7a6
052e52f
 
 
 
 
 
 
cbda7a6
 
 
 
 
 
 
 
 
052e52f
f586e58
052e52f
 
 
cbda7a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
052e52f
 
 
 
 
 
 
 
cbda7a6
 
052e52f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cbda7a6
052e52f
 
 
 
 
 
d173c0d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
from twilio.rest import Client
import os
from PIL import Image
import io

app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

# Initialize the Flask app
account_sid = os.environ.get('TWILIO_ACCOUNT_SID')
auth_token = os.environ.get('TWILIO_AUTH_TOKEN')
client = Client(account_sid, auth_token)

# WhatsApp number to send messages from (your Twilio number)
from_whatsapp_number = 'whatsapp:+14155238886'

# Placeholder functions for image classification
def classify_pest(image):
    # Implement pest classification model here
    return "Detected Pest: [Pest Name]"

def classify_disease(image):
    # Implement disease classification model here
    return "Detected Disease: [Disease Name]"

@app.route('/whatsapp', methods=['POST'])
def whatsapp_webhook():
    incoming_msg = request.values.get('Body', '').lower()
    sender = request.values.get('From')
    
    # Check if an image is attached
    num_media = int(request.values.get('NumMedia', 0))
    
    if num_media > 0:
        media_url = request.values.get('MediaUrl0')
        content_type = request.values.get('MediaContentType0')
        
        if content_type.startswith('image/'):
            # Download and process the image
            image_data = client.request(media_url)
            image = Image.open(io.BytesIO(image_data.content))
            
            if 'pest' in incoming_msg:
                response_text = classify_pest(image)
            elif 'disease' in incoming_msg:
                response_text = classify_disease(image)
            else:
                response_text = "Please specify if you want to detect a pest or a disease."
        else:
            response_text = "The attached file is not an image. Please send an image for classification."
    elif 'bookkeeping' in incoming_msg:
        response_text = "Please provide the details you'd like to record."
    else:
        response_text = get_agricultural_insights(incoming_msg)
    
    send_message(sender, response_text)
    return '', 204  # Return an empty response to Twilio

def get_agricultural_insights(query):
    # Implement your agricultural insights logic here
    return query

def send_message(to, body):
    try:
        message = client.messages.create(
            from_=from_whatsapp_number,
            body=body,
            to=to
        )
        print(f"Message sent with SID: {message.sid}")
    except Exception as e:
        print(f"Error sending message: {e}")

# Function to send an initial message
def send_initial_message(to_number):
    send_message(
        f'whatsapp:{to_number}',
        'Welcome to the Agri AI Chatbot! How can I assist you today? You can send an image with "pest" or "disease" to classify it.'
    )

if __name__ == '__main__':
    # Send an initial message when the script starts
    send_initial_message('916382792828')  # Replace with the recipient's number
    # Start the Flask server
    app.run(host='0.0.0.0', port=7860)