Dieser Artikel stammt aus dem JSL \ (Nippon System Giken ) Adventskalender 2019 \ -Qiita am 6. Dezember. Der Kalender des letzten Jahres ist hier! !!
TL;DR
@ hier
usergroups.users.update
von Slack zu verwenden?Chalice
(Python) und AWS Lambda
tunObwohl wir eine lange Geschichte haben, sind wir ein Unternehmen, das freie Arbeitsstile verkauft, die "volle Flex- und Remote-Arbeit ohne Kernzeit empfehlen". Die Zeit, um zur Arbeit zu gehen, ist anders, und etwa 30% sind Fernarbeiter. Daher kommt selten jeder, der ein Büro hat, zur Arbeit.
Wenn sich jedoch die Arbeitsweise ändert, gibt es ** gute und schlechte Dinge zu besprechen und Probleme zu lösen **. In diesem Artikel wird versucht, das Problem der Remote-Arbeit zu lösen.
Vor kurzem sehe ich das Thema Slack-Betrieb jedes Unternehmens wie "@ hier", "@ Kanal" -Verbot. Benachrichtigungen sind nützlich, können aber auch den Programmierer ablenken.
In der Zwischenzeit gab es in unserem Slack eine solche "@ here" -Erwähnung (mein Beitrag ...)
Wie wär es damit? Was die Situation betrifft, "ein wenig Eile" und "Ich möchte nur aktive Benutzer benachrichtigen", daher denke ich, dass es sich um eine allgemeine Verwendung von "@ hier" handelt.
Aber was ist mit Fernarbeitern? Für Remote-Mitarbeiter sollte es kein Problem sein, wenn der Nutzungsstatus des Besprechungs- und Empfangsraums des Firmengebäudes nicht geteilt wird.
Remote-Mitarbeiter benötigen diese Benachrichtigung also nicht.
Natürlich kann es Ihnen leid tun, dass nicht nur die Benachrichtigungsseite, sondern auch die Benachrichtigungsseite mit "@ hier" die Benachrichtigung an die entfernte Arbeitsperson überspringt.
Wenn es sich um ein Unternehmen handelt, das "Remote-Arbeit empfiehlt ... aber ich werde Ihnen viele unabhängige Benachrichtigungen geben !!", ist es keine komfortable Umgebung für Programmierer ...?
Wie Sie sehen, wird es mit zunehmender Anzahl von Remote-Mitarbeitern wichtig, ** Benachrichtigungsziele für Chats ** zu entwerfen.
Also dachte ich über ** dynamische Erwähnung ** nach. Ich dachte, dass dieses Problem gelöst werden könnte, wenn es Erwähnungen gäbe, die nur Benutzern mitgeteilt wurden, die bestimmte Bedingungen erfüllten.
In diesem Beispiel wären es ** "Erwähnungen, die nur denen mitgeteilt werden, die heute arbeiten" **.
Übrigens ist "@ hier" auch eine dynamische Erwähnung in dem Sinne, dass es nur die aktiven Benutzer im Kanal benachrichtigt.
Wir haben eine interne Zielplatine und deren REST-API. Wenn Sie dies verwenden, können Sie eine Liste der Personen abrufen, die im Büro sind. Es wäre also schön, wenn ich Slack irgendwie in Bezug auf die Liste der Leute erwähnen könnte, die im Büro sind.
Als ich nach einer netten API auf der Slack-Seite suchte, fand ich eine API namens "usergroups.users.update".
usergroups.users.update method | Slack
Sie können Benutzer in einer Benutzergruppe aktualisieren, indem Sie die Gruppen-ID an die Benutzergruppe und ein Array von Benutzer-IDs an Benutzer übergeben.
Damit
Es scheint, dass wir in der Lage sein sollten zu realisieren!
Also habe ich mich für AWS Lambda entschieden.
Mit Lambda, auch wenn es an Wochentagen (20 Tage) + 1 Stunde vorher und nachher (10 Stunden) wie eine Minute funktioniert 20 * 10 * 60 = 12,000 Ich kann es mir also leisten, das kostenlose Kontingent von 1.000.000 Anfragen pro Monat zu erfüllen.
Ich habe auch "Kelch" verwendet, um Lambda einzusetzen
aws/chalice: Python Serverless Microframework for AWS
chalice
ist ein Framework, mit dem Sie Lambda basierend auf einem Flask
-ähnlichen Dekorateur schreiben und sogar periphere Dienste erstellen (löschen) können.
Wenn Sie HTTP (s) empfangen möchten, ist Lambda problematisch, da es mit "APIGateway" zusammenarbeiten muss, sich aber um diesen Bereich kümmert.
Zum Beispiel ist es möglich, die periodische Ausführung, die diesmal erforderlich ist, mit der Syntax von "Kelch" zu schreiben.
Beispiel für eine regelmäßige Ausführung alle 5 Minuten
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"}
Der endgültige Code lautet wie folgt (der Teil, der die API des Unternehmens verwendet, wird weggelassen).
src/update_usergroup.py
@app.schedule(Cron('0', '23-9', '?', '*', 'SUN-THU', '*'))
def update_in_office_usergroup(event):
OAUTH_TOKEN = 'token_xxxx_xxxx'
#Vorab erstellte Benutzergruppen-UID
in_office_usergroup_uid = 'some_usergorup_uid'
#~ Abkürzung ~
#Liste der Slack-IDs von Benutzern im Büro, die über die API abgerufen wurden
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}
Da ich Lambda verwende, verwende ich "urllib" ohne externe Pakete.
Zusätzlich wird die Cron-Formel um 9 Stunden verschoben, indem die UTC auf Sonntag-Donnerstag 23-9 Uhr (Montag-Freitag 9-18 Uhr in japanischer Zeit) eingestellt wird. (Ist das nicht ein guter Weg?)
Ich nannte es "@ in_office" und veröffentlichte es mit einem doy Gesicht.
Es gibt jedoch Berichte, dass solche Benachrichtigungen häufig auftreten. ..
Anscheinend werden beim Hinzufügen / Entfernen von Benutzergruppen Benachrichtigungen von Slackbot gesendet. Ich habe es gemacht, um unnötige Benachrichtigungen zu reduzieren, aber im Gegenteil, die Anzahl der Benachrichtigungen hat zugenommen. Das ist nutzlos ...
Ich dachte: "Gibt es eine Option zum Deaktivieren von Benachrichtigungen über die API?" Und ich habe nachgeschlagen, aber es schien nicht da zu sein.
Ich blieb hier stecken und obwohl es eine Funktion war, die ich gemacht habe, hörte ich auf, sie zu benutzen. Dies ist der ursprüngliche Baum Ami.
Der Hauptgrund ist das Fehlen einer technischen Überprüfung.
Ich fing an zu laufen, als ich bekam "Ich habe eine API! Ich habe eine Idee! Ich denke, ich kann es schaffen!" Und versuchte es nicht einmal mit einem kleinen Code. Kann die ausgewählte Technologie das Problem lösen? Ist es ein geeignetes Mittel zur Lösung des Problems? Es ist wichtig zu berücksichtigen.
Andererseits finde ich die Idee, Chat-Benachrichtigungen zu entwerfen, gut.
Nun, es ist eine persönliche Entwicklung, also ist es ein Haken, den ich nicht bestanden habe, und dies ist auch Teil der technischen Überprüfung!
Dynamische Erwähnung Ich denke, das ist eine ziemlich gute Idee. .. Wenn jemand, der diesen Artikel gelesen hat, es merkt, lassen Sie es mich bitte wissen.
Als ich eine offizielle Anfrage in schlechtem Englisch stellte, erhielt ich eine höfliche Antwort. Die aktuelle Benutzergruppen-API (Oktober 2019 zum Zeitpunkt der Anfrage) kann Benachrichtigungen nicht deaktivieren, er möchte jedoch das Feedback-Team informieren, damit er dies in Zukunft tun kann.
Ich möchte noch einmal herausfordern, sobald es implementiert ist!