in api/views/phones.py [0:0]
def inbound_sms_iq(request: Request) -> response.Response:
"""Handle an inbound SMS message sent by Inteliquent."""
incr_if_enabled("phones_inbound_sms_iq")
_validate_iq_request(request)
inbound_body = request.data.get("text", None)
inbound_from = request.data.get("from", None)
inbound_to = request.data.get("to", None)
if inbound_body is None or inbound_from is None or inbound_to is None:
raise exceptions.ValidationError("Request missing from, to, or text.")
from_num = phonenumbers.format_number(
phonenumbers.parse(inbound_from, DEFAULT_REGION),
phonenumbers.PhoneNumberFormat.E164,
)
single_num = inbound_to[0]
relay_num = phonenumbers.format_number(
phonenumbers.parse(single_num, DEFAULT_REGION),
phonenumbers.PhoneNumberFormat.E164,
)
relay_number, real_phone = _get_phone_objects(relay_num)
_check_remaining(relay_number, "texts")
if from_num == real_phone.number:
try:
relay_number, destination_number, body = _prepare_sms_reply(
relay_number, inbound_body
)
send_iq_sms(destination_number, relay_number.number, body)
relay_number.remaining_texts -= 1
relay_number.texts_forwarded += 1
relay_number.save()
incr_if_enabled("phones_send_sms_reply_iq")
except RelaySMSException as sms_exception:
_log_sms_exception("iq", real_phone, sms_exception)
user_error_message = _get_user_error_message(real_phone, sms_exception)
send_iq_sms(real_phone.number, relay_number.number, user_error_message)
if sms_exception.status_code >= 400:
raise
return response.Response(
status=200,
template_name="twiml_empty_response.xml",
)
number_disabled = _check_disabled(relay_number, "texts")
if number_disabled:
return response.Response(status=200)
inbound_contact = _get_inbound_contact(relay_number, from_num)
if inbound_contact:
_check_and_update_contact(inbound_contact, "texts", relay_number)
text = message_body(inbound_from, inbound_body)
send_iq_sms(real_phone.number, relay_number.number, text)
relay_number.remaining_texts -= 1
relay_number.texts_forwarded += 1
relay_number.save()
return response.Response(status=200)