Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,15 @@

api_bp_v1 = Blueprint("api", __name__, url_prefix="/v1")

"""
gateway_server_urls = (
f"{GATEWAY_SERVER_HOST}:{GATEWAY_SERVER_PORT}/sms/platform/twilio",
)
"""

gateway_server_urls = (
f"{GATEWAY_SERVER_HOST}:{GATEWAY_SERVER_PORT}/v3/publish",
)


def gateway_server_request(url, payload):
Expand Down Expand Up @@ -44,6 +50,41 @@ def gateway_server_request(url, payload):
return None


@api_bp_v1.route("/messagebird-sms", methods=["GET", "POST"])
def messagebird_incoming_sms():
"""
Endpoint to handle incoming messages from Twilio.
"""
try:
data = request.form.to_dict()
app.logger.debug("Received data from Twilio: %s", data)

if not data.get("originator"):
app.logger.error("Missing required field: 'originator'")
return jsonify({"error": "Missing required field: 'originator'"}), 400

if not data.get("payload"):
app.logger.error("Missing required field: 'payload'")
return jsonify({"error": "Missing required field: 'payload'"}), 400

publish_payload = {"address": data["originator"], "text": data["payload"]}
app.logger.info("Publish payload: %s", publish_payload)

with ThreadPoolExecutor(max_workers=len(gateway_server_urls)) as executor:
executor.map(
lambda url: gateway_server_request(url, publish_payload),
gateway_server_urls,
)

return str(resp)

except Exception as e:
app.logger.exception("Error processing incoming Twilio SMS: %s", e)
return (
jsonify({"error": "Oops! Something went wrong. Please try again later."}),
500,
)

@api_bp_v1.route("/twilio-sms", methods=["GET", "POST"])
def twilio_incoming_sms():
"""
Expand Down