Cet article est tiré du JSL \ (Nippon System Giken ) Advent Calendar 2019 \ -Qiita le 6 décembre. Le calendrier de l'année dernière est ici! !!
TL;DR
@ here
Chalice
(Python) et ʻAWS Lambda`Bien que nous ayons une longue histoire, nous sommes une entreprise qui vend des styles de travail gratuits qui "recommandent un travail flexible et à distance sans temps de base". Tout le temps pour aller travailler est différent et environ 30% sont des travailleurs à distance. Par conséquent, il est rare que tous ceux qui ont un bureau viennent travailler.
Cependant, lorsque la façon de travailler change, il y a ** de bonnes et de mauvaises choses à discuter et des problèmes à résoudre **. Cet article tente de résoudre le problème du travail à distance.
Récemment, je vois le sujet du fonctionnement Slack de chaque entreprise tel que l'interdiction «@ here», «@ channel». Les notifications sont utiles, mais elles peuvent aussi distraire le programmeur.
Pendant ce temps, il y avait une telle mention @ here
dans notre Slack (mon post ...)
Et ça? Pour ce qui est de la situation, "un peu pressé" et "je veux avertir uniquement les utilisateurs actifs", donc je pense que c'est un usage général de «@ here».
Mais qu'en est-il des travailleurs à distance? Pour les travailleurs à distance, cela ne devrait pas poser de problème si l'état d'utilisation de la salle de réunion et de la salle de réception du bâtiment de l'entreprise n'est pas partagé.
Les télétravailleurs n'ont donc pas besoin de cette notification.
Bien sûr, vous pouvez vous sentir désolé non seulement pour le côté notification, mais aussi pour le côté notification avec @ here
pour ignorer la notification à la personne travaillant à distance.
Si c'est une entreprise qui "recommande le travail à distance ... mais je vous donnerai beaucoup de notifications non pertinentes !!"
Comme vous pouvez le constater, à mesure que le nombre de travailleurs distants augmente, il devient important de concevoir des ** destinations de notification pour les chats **.
J'ai donc pensé à la ** mention dynamique **. Je pensais que ce problème pouvait être résolu s'il y avait des mentions qui n'étaient notifiées qu'aux utilisateurs qui remplissaient certaines conditions.
Dans cet exemple, il s'agirait de ** "mentions notifiées uniquement à ceux qui sont au travail aujourd'hui" **.
À propos, «@ here» est également une mention dynamique dans le sens où il ne notifie que les utilisateurs actifs du canal.
Nous avons un tableau de destination en interne et son API REST. Si vous l'utilisez, vous pouvez obtenir une liste des personnes qui sont au bureau. Ce serait donc bien si je pouvais en quelque sorte mentionner Slack dans la liste des personnes qui sont au bureau.
Quand je cherchais une belle API côté Slack, j'ai trouvé une API appelée ʻusergroups.users.update`.
usergroups.users.update method | Slack
Vous pouvez mettre à jour les utilisateurs d'un groupe d'utilisateurs en transmettant l'ID de groupe au groupe d'utilisateurs et un tableau d'ID utilisateur aux utilisateurs.
Alors
Il semble que nous devrions pouvoir le réaliser!
J'ai donc décidé d'utiliser ʻAWS Lambda`.
Avec Lambda, même si cela fonctionne comme une minute en semaine (20 jours) + 1 heure avant et après (10 heures) 20 * 10 * 60 = 12,000 Je peux donc me permettre d’intégrer le quota gratuit de 1 000 000 demandes par mois,
J'ai également utilisé calice
pour déployer Lambda
aws/chalice: Python Serverless Microframework for AWS
calice
est un framework qui vous permet d'écrire Lambda basé sur un décorateur de type Flask
et même de créer (supprimer) des services périphériques.
Si vous voulez recevoir des Http (s), Lambda est gênant car il doit coopérer avec ʻAPIGateway`, mais il s'occupe de ce domaine.
Par exemple, il est possible d'écrire l'exécution périodique, qui est l'exigence cette fois, avec la syntaxe de «calice».
Exemple d'exécution périodique toutes les 5 minutes
from chalice import Chalice, Rate
app = Chalice(app_name="helloworld")
# Automatically runs every 5 minutes
@app.schedule(Rate(5, unit=Rate.MINUTES))
def periodic_task(event):
return {"hello": "world"}
Le code final est le suivant (la partie qui utilise l'API de l'entreprise est omise)
src/update_usergroup.py
@app.schedule(Cron('0', '23-9', '?', '*', 'SUN-THU', '*'))
def update_in_office_usergroup(event):
OAUTH_TOKEN = 'token_xxxx_xxxx'
#UID de groupe d'utilisateurs pré-créé
in_office_usergroup_uid = 'some_usergorup_uid'
#~ abrégé ~
#Liste des identifiants Slack des utilisateurs qui sont dans le bureau obtenue à partir de l'API
office_user_slack_ids = ['some', 'user', 'uids']
try:
data = urllib.parse.urlencode(
(
("token", OAUTH_TOKEN),
("usergroup", in_office_usergroup_uid),
("users", ','.join(office_user_slack_ids)),
)
)
data = data.encode("ascii")
request = urllib.request.Request(
"https://slack.com/api/usergroups.users.update",
data=data,
method="POST"
)
request.add_header(
"Content-Type",
"application/x-www-form-urlencoded"
)
with urllib.request.urlopen(request) as r:
resp = json.loads(r.read())
logger.info(resp)
return {'ok': True}
except Exception as e:
logger.error(e)
return {'ok': False}
Depuis que j'utilise Lambda, j'utilise ʻurllib` sans aucun paquet externe.
De plus, la formule cron est décalée de 9 heures en ajustant l'UTC pour qu'elle soit du dimanche au jeudi de 23 à 9 heures (du lundi au vendredi de 9 à 18 heures en heure japonaise). (N'est-ce pas un bon moyen?)
Je l'ai nommé @ in_office
et l'ai sorti avec un visage de doy.
Cependant, certains rapports indiquent que de telles notifications sont fréquentes. ..
Apparemment, lorsque j'ajoute / supprime des groupes d'utilisateurs, les notifications volent de Slackbot. Je l'ai fait dans le but de réduire les notifications inutiles, mais au contraire, le nombre de notifications a augmenté. Cela ne sert à rien ...
J'ai pensé: "Y a-t-il une option pour désactiver les notifications via l'API?", Et je l'ai recherchée, mais elle ne semblait pas être là.
Je suis resté coincé ici, et bien que ce soit une fonction que j'ai créée, j'ai arrêté de l'utiliser. C'est l'arbre original Ami.
La raison principale est le manque de vérification technique.
J'ai commencé à courir quand j'ai eu "J'ai une API! J'ai une idée! Je pense que je peux le faire!" Et je ne l'ai même pas essayée avec un petit code. La technologie choisie peut-elle résoudre le problème? Est-ce un moyen approprié pour résoudre le problème? Il est important d'en tenir compte.
D'un autre côté, je pense que l'idée de concevoir des notifications de chat était bonne.
Eh bien, c'est un développement personnel, donc c'est un hic que j'ai échoué, et cela fait aussi partie de la vérification technique!
Mention dynamique Je pense que c'est une très bonne idée. .. Si quelqu'un qui a lu cet article s'en rend compte, faites-le moi savoir.
Lorsque j'ai fait une enquête officielle dans un anglais médiocre, j'ai reçu une réponse polie. L'API actuelle du groupe d'utilisateurs (octobre 2019 au moment de l'enquête) ne peut pas désactiver les notifications, mais il souhaite informer l'équipe de rétroaction afin qu'elle puisse le faire à l'avenir.
Je voudrais contester à nouveau une fois qu'il sera mis en œuvre!