[GO] Entwickeln Sie eine Slack-App, um die Corona-Katastrophe zu überstehen und die Kommunikation zu verbessern

Was ich gemacht habe

[Die kostenlose Azure-Stufe ist plötzlich beendet, daher migrieren wir. ]]

Es ist eine Slack-App namens "comawari", die mit Cartoons anstelle von Slack-Textnachrichten kommuniziert. image.png

Sie können das Modal auf Slack öffnen und auswählen, auf welches Bild der Dialog gesetzt werden soll, und es veröffentlichen. image.png

Ab November 2020 verwenden wir Bilddaten von folgenden Websites. Gib mir einen Blackjack Gibli

Wie es funktioniert

Nach der OAuth-Authentifizierung von Slack werden wir Comics mit dem Mechanismus Slash Commands and Interactivity veröffentlichen.

OAuth Wenn Sie Slack API nach dem in der Weiterleitungs-URL übergebenen Code fragen, können Sie das Zugriffstoken abrufen und in einem sicheren Speicher speichern. image.png Die Weiterleitungs-URL kann auf dem Bildschirm zur Verwaltung der Slack-App angegeben werden.

Slash Commands Die Comawari-API, die beim Ausführen des Slash-Befehls aufgerufen wird, trifft auf Slacks API zum Öffnen des Modals. image.png

Post

Wenn der Benutzer modal auf die Schaltfläche "Senden" klickt, wird die unter "Interaktivität" im Bildschirm "Slack-Verwaltung" angegebene API aufgerufen. Verwenden Sie das von Ihnen gesendete Zugriffstoken des Benutzers und veröffentlichen Sie es, um den Cartoon im Namen des Benutzers anzuzeigen. image.png

Programm

Der Comawari-Server ist in der Sprache Go geschrieben.

API Wir erstellen eine API mit einem Framework namens Gin. https://github.com/gin-gonic/gin Es ist leicht und einfach zu bedienen.

Schlaffe Integration

Aus den von Gin empfangenen Anforderungsdaten wird eine Anforderung über http in der Golang-Standardbibliothek an die Slack-API gesendet. Der Ort, an dem Sie das Zugriffstoken erhalten, ist beispielsweise folgendermaßen.

//Konvertieren Sie den gesendeten Code in ein Zugriffstoken
values := url.Values{}
values.Set("code", code)
values.Add("client_id", SlackClientID)
values.Add("client_secret", SlackClientSecret)

req, err := http.NewRequest(
	"POST",
	"https://slack.com/api/oauth.v2.access",
	strings.NewReader(values.Encode()),
)

Bildzeichnung

Die Bildzeichnung des Kimo dieses Dienstes wird auch unter Verwendung des Bildes der Golang-Standardbibliothek gezeichnet. Obwohl es relativ einfach ist, Zeichen zu zeichnen, gibt es keine Funktion zum vertikalen Schreiben. Daher versuche ich, die Zeichen einzeln zu trennen und sie durch Angabe der X- und Y-Koordinaten zu zeichnen.

Dieses Bild ist eine Echtzeitzeichnung, kann jedoch auch mit der virtuellen Maschine von Azure mit niedriger Spezifikation mit einer Geschwindigkeit von weniger als 100 ms gezeichnet werden. image.png _ Begrüßen Sie Blackjack / Hidemine Sato _

Originalbilddaten

Wählen Sie für das Originalbild, das die Grundlage des Mangas bildet, ein Bild aus, das kostenlos verwendet werden kann, und speichern Sie es zusammen mit dem JSON, der den Textbereich definiert, in Github. Wenn Comawari gestartet wird, wird es von Github geklont und zur Verwendung in Golang On-Memory abgelegt. Unter anderem möchte ich das Repository öffnen, damit ich Bilder per Pull-Anfrage frei hinzufügen kann.

Infrastruktur

Der Server verwendet die virtuelle Maschine (Standard B1s) von Azure, um den Comawari-Dienst mit Docker zu starten. Das Dockerfile sieht so aus.

FROM golang:1.15.2

ENV TZ Asia/Tokyo

RUN go get github.com/cespare/reflex

WORKDIR /root
RUN mkdir /root/.ssh
COPY ssh /root/.ssh/
RUN chmod 600 /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts

WORKDIR /data
RUN git clone [email protected]:rspepe/comawari-data.git

WORKDIR /go/src/github.com/rspepe/comawari
COPY src .

EXPOSE 80 443

CMD ["/usr/local/go/bin/go", "run", "/go/src/github.com/rspepe/comawari/main.go"]

Der Server ist seit einigen Wochen betriebsbereit und läuft daher kostenlos. Selbst wenn die kostenlose Stufe vorbei ist, scheint das Taschengeld ziemlich gut zu sein, aber wenn der Verkehr zunimmt und Sie sich die Kosten nicht leisten können, werden Sie in Schwierigkeiten geraten.

Lokale Entwicklung

Ich verwende ngrok, um einen lokalen Computer von Slack abzurufen. Für die Verwendung habe ich auf den Artikel einer anderen Person verwiesen. https://qiita.com/mininobu/items/b45dbc70faedf30f484e

Slack Bewertung

Um es als Slack-App zu veröffentlichen, muss es auf die gleiche Weise wie der Apple Store überprüft werden. Es war ziemlich schwierig, weil ich eine Landing Page erstellen und über Datenschutzrichtlinienerklärungen und Benutzerunterstützung nachdenken musste.

Punkte, auf die hingewiesen werden muss

Zu viele Slack-Berechtigungen sind für OAuth erforderlich

Entfernen Sie Berechtigungen, die nicht zum Realisieren des Dienstes erforderlich sind, aus den Anforderungsberechtigungen.

Ermöglichen, dass Benutzer Zugriffstoken löschen

Befehl / deauth_coma hinzugefügt, um das Zugriffstoken bei Ausführung zu löschen. Weil das Risiko einer Deauthorisierung besteht, wenn vorgetäuscht wird, eine E-Mail-Antwort zu sein.

Benutzer-Support

Ein neuer Befehl / support_coma wurde hinzugefügt, um einen Mechanismus zum Senden von Nachrichten an mich zu erstellen. Wenn Sie uns per E-Mail kontaktieren, wird dies möglicherweise als Spam behandelt und übersehen.

Verbleibende Probleme

Kosten

Da ich einen unterhaltsamen Dienst erstellt habe, möchte ich ihn so weit wie möglich warten, aber es scheint schwierig zu werden, ihn zu warten, wenn die Betriebskosten des Servers hoch werden. In diesem Fall sollten Sie auch die Monetarisierung in Betracht ziehen. Da es in einem Docker-Container ausgeführt wird, können Sie es in einer billigen Umgebung, in der Docker ausgeführt wird, überall hin mitnehmen.

Unterstützt Klammern

Klammern wie "" und [] werden nicht unterstützt. Es scheint, dass es nicht notwendig ist, damit umzugehen, weil es nicht in den Comic-Frames erscheint, aber ich überlege, ob es einen guten Weg gibt, damit umzugehen.

Schriftart

Sprachen wie Arabisch und Chinesisch werden nicht unterstützt, und die Zeichen werden zu Tofu. Ich möchte eine kostenlose Schriftart finden und verbessern, damit sie auf verschiedene Arten verwendet werden kann.

Übersee-Export

Obwohl es nur auf Japanisch verfügbar ist, wird Slack auf der ganzen Welt verwendet, daher möchte ich, dass auch Leute aus Übersee es verwenden. Es scheint in Bezug auf das Urheberrecht schwierig zu sein, aber ich wünschte, ich könnte so etwas wie Iron Man machen.

Impressionen

Ich wollte diesen Dienst für ein paar Jahre machen, deshalb ist es ein großartiges Erfolgserlebnis. Zuvor habe ich bei einer Herausforderung HTML und JS verwendet, um Text vertikal über das Bild zu schreiben. Es war erfolgreich, die Entwicklungsfähigkeit von Golang und einem hervorragenden Kommunikationswerkzeug namens Slack stetig zu verbessern. Wir werden uns weiterentwickeln und glauben, dass wir uns nach und nach verbessern und bessere Dinge machen können.

Vielen Dank

Wir möchten Herrn Hidemine Sato (der zum Zeitpunkt der Veröffentlichung dieses Artikels berichtet wurde), der die sekundäre Verwendung bei der Erstellung dieses Dienstes zugelassen hat, und Herrn Studio Ghibli, der die Verwendung im Rahmen des gesunden Menschenverstandes gestattet hat, danken. Vielen Dank.

Recommended Posts

Entwickeln Sie eine Slack-App, um die Corona-Katastrophe zu überstehen und die Kommunikation zu verbessern
So entwickeln Sie eine Cart-App mit Django
[Python] Wirf eine Nachricht an den Slack-Kanal
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows
[Rails 6] Betten Sie Google Map in die App ein und fügen Sie der eingegebenen Adresse einen Marker hinzu. [Bestätigung der Details]