Merge pull request #3492 from alphagov/reach-basics-181665654

Add boilerplate for Reach SMS callbacks
This commit is contained in:
Ben Thorner
2022-03-29 16:32:12 +01:00
committed by GitHub
8 changed files with 179 additions and 118 deletions

View File

@@ -8,6 +8,7 @@ from app import notify_celery, statsd_client
from app.clients import ClientException
from app.clients.sms.firetext import get_firetext_responses
from app.clients.sms.mmg import get_mmg_responses
from app.clients.sms.reach import get_reach_responses
from app.dao import notifications_dao
from app.dao.templates_dao import dao_get_template_by_id
from app.models import NOTIFICATION_PENDING
@@ -17,7 +18,8 @@ from app.notifications.notifications_ses_callback import (
sms_response_mapper = {
'MMG': get_mmg_responses,
'Firetext': get_firetext_responses
'Firetext': get_firetext_responses,
'Reach': get_reach_responses
}

25
app/clients/sms/reach.py Normal file
View File

@@ -0,0 +1,25 @@
from app.clients.sms import SmsClient, SmsClientResponseException
def get_reach_responses(status, detailed_status_code=None):
if status == 'TODO-d':
return ("delivered", "TODO: Delivered")
elif status == 'TODO-tf':
return ("temporary-failure", "TODO: Temporary failure")
elif status == 'TODO-pf':
return ("permanent-failure", "TODO: Permanent failure")
else:
raise KeyError
class ReachClientResponseException(SmsClientResponseException):
pass # TODO (custom exception for errors)
class ReachClient(SmsClient):
def get_name(self):
pass # TODO
def send_sms(self, to, content, reference, international, multi=True, sender=None):
pass # TODO

View File

@@ -1,4 +1,4 @@
from flask import Blueprint, current_app, json, jsonify, request
from flask import Blueprint, json, jsonify, request
from app.celery.process_sms_client_response_tasks import (
process_sms_client_response,
@@ -30,12 +30,6 @@ def process_mmg_response():
queue=QueueNames.SMS_CALLBACKS,
)
safe_to_log = data.copy()
safe_to_log.pop("MSISDN")
current_app.logger.debug(
f"Full delivery response from {client_name} for notification: {provider_reference}\n{safe_to_log}"
)
return jsonify(result='success'), 200
@@ -52,12 +46,28 @@ def process_firetext_response():
detailed_status_code = request.form.get('code')
provider_reference = request.form.get('reference')
safe_to_log = dict(request.form).copy()
safe_to_log.pop('mobile')
current_app.logger.debug(
f"Full delivery response from {client_name} for notification: {provider_reference}\n{safe_to_log}"
process_sms_client_response.apply_async(
[status, provider_reference, client_name, detailed_status_code],
queue=QueueNames.SMS_CALLBACKS,
)
return jsonify(result='success'), 200
@sms_callback_blueprint.route('/reach', methods=['POST'])
def process_reach_response():
client_name = 'Reach'
# TODO: validate request
errors = None
if errors:
raise InvalidRequest(errors, status_code=400)
status = 'TODO-d' # TODO
detailed_status_code = 'something' # TODO
provider_reference = 'notification_id' # TODO
process_sms_client_response.apply_async(
[status, provider_reference, client_name, detailed_status_code],
queue=QueueNames.SMS_CALLBACKS,