[Le niveau gratuit d'Azure a soudainement pris fin, nous procédons donc à la migration. ]
Il s'agit d'une application Slack appelée "comawari" qui communique avec des dessins animés au lieu de messages texte Slack.
Vous pouvez ouvrir le modal sur Slack et sélectionner l'image sur laquelle mettre le dialogue et le publier.
Depuis novembre 2020, nous utilisons les données d'image des sites suivants. Donnez-moi un blackjack Gibli
Après l'authentification OAuth de Slack, nous publierons des bandes dessinées en utilisant le mécanisme appelé Commandes Slash et Interactivité.
OAuth Si vous demandez à API Slack le code transmis dans l'URL de redirection, vous pouvez obtenir le jeton d'accès, alors enregistrez-le dans un stockage sécurisé. L'URL de redirection peut être spécifiée sur l'écran de gestion de l'application Slack.
Slash Commands L'API de Comawari, qui est activée lorsque la commande Slash est exécutée, atteint l'API de Slack pour ouvrir le mode modal.
Lorsque l'utilisateur clique sur le bouton d'envoi de manière modale, l'API spécifiée dans Interactivité sur l'écran de gestion Slack est activée. Utilisez le jeton d'accès de l'utilisateur que vous avez envoyé et publiez pour afficher le dessin animé au nom de l'utilisateur.
Le serveur comawari est écrit en langage Go.
API Nous construisons une API en utilisant un framework appelé Gin. https://github.com/gin-gonic/gin Il est léger et facile à utiliser.
À partir des données de requête reçues par Gin, une requête est envoyée à l'API Slack via http dans la bibliothèque standard de golang. Par exemple, l'endroit pour obtenir le jeton d'accès est comme ceci.
//Convertissez le code envoyé en jeton d'accès
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()),
)
Le dessin d'image du kimo de ce service est également dessiné à l'aide de l'image de la bibliothèque standard golang. Bien qu'il soit relativement facile de dessiner des caractères, il n'y a pas de fonction pour écrire verticalement, donc j'essaye de séparer les caractères un par un et de les dessiner en spécifiant les coordonnées X et Y.
Cette image est un dessin en temps réel, mais elle peut être dessinée à une vitesse inférieure à 100 ms, même avec la machine virtuelle à faible spécification d'Azure. _ Dites bonjour au Blackjack / Hidemine Sato _
Pour l'image originale qui est à la base du manga, sélectionnez une image qui peut être utilisée gratuitement et enregistrez-la dans github avec le JSON qui définit la zone de texte. Lorsque comawari est lancé, il est cloné à partir de github et placé dans golang en mémoire pour être utilisé. Parmi eux, j'aimerais ouvrir le référentiel afin de pouvoir ajouter librement des images par pull request.
Le serveur utilise la machine virtuelle (B1 standard) d'Azure pour lancer le service comawari avec Docker. Le Dockerfile ressemble à ceci.
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"]
Le serveur est opérationnel depuis quelques semaines, il fonctionne donc gratuitement. Même si le niveau gratuit est terminé, il semble que l'argent de poche soit assez bon, mais si le trafic augmente et que vous ne pouvez pas vous permettre le coût, vous aurez des ennuis.
J'utilise ngrok pour obtenir une machine locale appelée depuis Slack. Pour savoir comment l'utiliser, je me suis référé à l'article d'une autre personne. https://qiita.com/mininobu/items/b45dbc70faedf30f484e
Pour la publier en tant qu'application Slack, elle doit être revue de la même manière que l'Apple Store. C'était assez difficile car je devais créer une page de destination et réfléchir aux déclarations de politique de confidentialité et au support utilisateur.
Supprimez les autorisations qui ne sont pas nécessaires pour réaliser le service des autorisations de demande.
Ajout de la commande / deauth_coma pour supprimer le jeton d'accès lors de son exécution. Parce qu'il y a un risque de désautorisation en faisant semblant d'être une réponse par e-mail.
Une nouvelle commande / support_coma a été ajoutée pour créer un mécanisme pour m'envoyer des messages. Si vous nous contactez par e-mail, cela peut être traité comme du spam et ignoré.
Puisque j'ai créé un service amusant, j'aimerais le maintenir autant que possible, mais il semble qu'il deviendra difficile à maintenir à mesure que le coût d'exploitation du serveur augmentera. Si cela se produit, vous devriez également envisager la monétisation. Puisqu'il s'exécute dans un conteneur Docker, vous pouvez l'emporter n'importe où dans un environnement bon marché où Docker s'exécute.
Il ne prend pas en charge les parenthèses telles que "" et []. Il semble qu'il ne soit pas nécessaire de le traiter car il n'apparaît pas dans les cadres de la bande dessinée, mais je me demande s'il existe une bonne façon de le gérer.
Il ne prend pas en charge les langues telles que l'arabe et le chinois, et les caractères deviennent du tofu. Je souhaite trouver une police gratuite et l'améliorer afin qu'elle puisse être utilisée de différentes manières.
Bien qu'il ne soit disponible qu'en japonais, Slack est utilisé partout dans le monde, donc j'aimerais que les étrangers l'utilisent également. Cela semble difficile en termes de droits d'auteur, mais j'aimerais pouvoir faire quelque chose comme Iron Man.
Je voulais faire ce service depuis quelques années, c'est donc un grand sentiment d'accomplissement. Auparavant, lorsque je contestais, j'utilisais HTML et JS pour écrire du texte verticalement au-dessus de l'image. Il a réussi à améliorer régulièrement la capacité de développement du golang et d'un excellent outil de communication appelé Slack. Nous continuerons à nous développer, convaincus que nous pouvons continuer à nous améliorer petit à petit et à faire de meilleures choses.
Nous tenons à remercier Hidemine Sato (signalé après coup au moment de la publication de cet article) pour avoir autorisé une utilisation secondaire dans la création de ce service, et Studio Ghibli pour nous avoir permis de l'utiliser dans les limites du bon sens. Merci beaucoup.