summaryrefslogtreecommitdiff
path: root/jimbrella
diff options
context:
space:
mode:
Diffstat (limited to 'jimbrella')
-rw-r--r--jimbrella/sms.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/jimbrella/sms.py b/jimbrella/sms.py
new file mode 100644
index 0000000..e83dc54
--- /dev/null
+++ b/jimbrella/sms.py
@@ -0,0 +1,45 @@
+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
+ remind a tenant to return their overdue umbrella.
+ """
+
+ 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_numbers: str,
+ sign_name: str,
+ template_code: str,
+ template_param: dict,
+ ):
+ """Call API to send generic SMS"""
+ req = dysmsapi_models.SendSmsRequest(
+ phone_numbers=phone_numbers,
+ sign_name=sign_name,
+ 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", phone_numbers
+ )
+
+ def remind_overdue(self, tenant_phone: str, tenant_name: str, key: int):
+ self._send(tenant_phone, "TBD", "TBD", {"name": tenant_name, "key": key})