import logging import json from alibabacloud_dysmsapi20170525.client import Client as DysmsapiClient from alibabacloud_dysmsapi20170525 import models as dysmsapi_models from alibabacloud_tea_openapi import models as open_api_models from .config import config class SMS: """SMS notification client. This client talks to Aliyun's shit-in-a-box API when JImbrella needs to notify a tenant of some significant event. """ def __init__(self): """Initialize Aliyun client""" self.config = open_api_models.Config( access_key_id=config.get("sms", "access_key_id"), access_key_secret=config.get("sms", "access_key_secret"), ) self.client = DysmsapiClient(self.config) def _send( self, phone_number: str, template_code: str, template_param: dict, ): """Call API to send generic SMS""" req = dysmsapi_models.SendSmsRequest( phone_numbers=phone_number, sign_name="JIBelief", template_code=template_code, template_param=json.dumps(template_param), ) resp = self.client.send_sms(req) if resp.body.code != "OK": logging.warning( "API call to send SMS notification to %s failed (%s: %s)", phone_number, resp.body.code, resp.body.message, ) def borrow_success(self, phone: str, name: str, date: str, umbid: int): """Current template: jimbrella_takeaway_0 ${name}同学,您已于${date}成功借用${umbid}号信用伞,请在三日内归还 """ self._send( phone, "SMS_234140902", {"name": name, "date": date, "umbid": umbid} ) def remind_overdue(self, phone: str, name: str, date: str, umbid: int): self._send(phone, "TBD", {"name": name, "date": date, "umbid": umbid})