in phones/models.py [0:0]
def register_with_messaging_service(client: Client, number_sid: str) -> None:
"""Register a Twilio US phone number with a Messaging Service."""
if not settings.TWILIO_MESSAGING_SERVICE_SID:
raise ValueError(
"settings.TWILIO_MESSAGING_SERVICE_SID must contain a value when calling "
"register_with_messaging_service"
)
closed_sids = CachedList("twilio_messaging_service_closed")
for service_sid in settings.TWILIO_MESSAGING_SERVICE_SID:
if service_sid in closed_sids:
continue
try:
client.messaging.v1.services(service_sid).phone_numbers.create(
phone_number_sid=number_sid
)
except TwilioRestException as err:
log_extra = {
"err_msg": err.msg,
"status": err.status,
"code": err.code,
"service_sid": service_sid,
"number_sid": number_sid,
}
if err.status == 409 and err.code == 21710:
# Log "Phone Number is already in the Messaging Service"
# https://www.twilio.com/docs/api/errors/21710
events_logger.warning("twilio_messaging_service", extra=log_extra)
return
elif err.status == 412 and err.code == 21714:
# Log "Number Pool size limit reached", continue to next service
# https://www.twilio.com/docs/api/errors/21714
closed_sids.append(service_sid)
events_logger.warning("twilio_messaging_service", extra=log_extra)
else:
# Log and re-raise other Twilio errors
events_logger.error("twilio_messaging_service", extra=log_extra)
raise
else:
return # Successfully registered with service
raise Exception("All services in TWILIO_MESSAGING_SERVICE_SID are full")