Faire un rappel de garbage avec line-bot-sdk-java

Aperçu

Utilisez le SDK de l'API de messagerie LINE (pour Java) (https://github.com/line/line-bot-sdk-java) pour envoyer des rappels avant la date de récupération de place.

Concept

La partie qui répond à la réponse est réalisée par "Webhook", et la partie qui pousse le rappel est réalisée par "Messaging API".

environnement

Créer un projet

Créez un projet avec "SPRING INITIALIZR". Vérifiez "lombok" et "Devtool". L'artéfact est un "rappel de déchets".

init.png

Une fois le téléchargement terminé, ouvrez-le dans l'EDI.

Ajouter une dépendance

pom.xml


<dependency>
    <groupId>com.linecorp.bot</groupId>
    <artifactId>line-bot-spring-boot</artifactId>
    <version>1.11.0</version>
</dependency>

Ajoutez le SDK de l'API de messagerie LINE.

Propriété

application.properties


line.bot.channelSecret = XXXXX
line.bot.channelToken = XXXXX
line.bot.handler.path = /callback

Définissez les informations du canal ouvert dans LINE.

Implémentation du message push

confirm.png Utilisez les modèles de confirmation (https://developers.line.me/ja/docs/messaging-api/message-types/#confirm-template) pour confirmer que la suppression des déchets est terminée.

PushConfirmController


@Slf4j
@RestController
public class PushConfirmController {

    private final LineMessagingClient lineMessagingClient;

    ConfirmService(LineMessagingClient lineMessagingClient) {
        this.lineMessagingClient = lineMessagingClient;
    }

    //Rappels push
    @GetMapping("alarm")
    public void pushAlarm() throws URISyntaxException {

        try {
            BotApiResponse response = lineMessagingClient
                                            .pushMessage(new PushMessage("/*UserId de la personne que vous souhaitez envoyer*/",
                                                         new TemplateMessage("Demain est un jour de déchets brûlant",
                                                                 new ConfirmTemplate("Avez-vous fini de jeter les ordures?",
                                                                         new MessageAction("Oui", "Oui"),
                                                                         new MessageAction("Non", "Non")
                                                                 )
                                                         )))
                                            .get();
            log.info("Sent messages: {}", response);
        } catch (InterruptedException | ExecutionException e) {
            throw new RuntimeException(e);
        }
    }
}

Il n'est pas nécessaire d'en faire un contrôleur, mais il est plus facile de vérifier s'il peut être appelé par GET.

Vérification

notification

message

Puisque la réponse n'a pas été implémentée, il n'y a pas encore de réponse même si le bouton est enfoncé.

Mise en œuvre de la réponse

Les webhooks peuvent renvoyer une réponse lorsqu'un élément est envoyé, tel qu'un message ou un tampon. J'ai fait en sorte que "oui" ou "non" soit renvoyé dans la confirmation, j'ai donc repris ces deux mots Si "Oui", retournez "Sassuga!", Et si "Non", retournez "Jetons-le!".

Webhook


@Slf4j
@LineMessageHandler
public class WebhookController {

    //Réponse lorsque le texte est envoyé
    @EventMapping
    public void handleTextMessageEvent(MessageEvent<TextMessageContent> event) throws Exception {

        //Récupérer le texte saisi
        String text = content.getText();

        switch (text) {
            case "Oui": {
                this.reply(replyToken,
                        new TextMessage("C'est vrai!")
                );
                break;
            }
            case "Non": {
                this.reply(replyToken,
                        new TextMessage("Jetons-le!")
                );
                break;
            }
            default:
                log.info("Returns echo message {}: {}", replyToken, text);
                this.replyText(
                        replyToken,
                        text
                );
                break;
        }
    }
}

Vérification

Remarques

réponse

L'exemple renvoie du texte, mais vous pouvez avoir plusieurs messages dans un tableau.

reply


this.reply(replyToken,
            Arrays.asList(
                new StickerMessage("1", "13"),    //timbre
                new TextMessage("C'est vrai!")    //texte
            )
);

Variable d'environnement

Vous pouvez donner à heroku une variable d'environnement et faire référence à sa valeur dans le fichier de propriétés.

ss.png

application.properties


line.bot.channelSecret = ${LINE_BOT_CHANNEL_SECRET}
line.bot.channelToken = ${LINE_BOT_CHANNEL_TOKEN}
line.bot.handler.path = /callback

Planification

Une fois arrivé, il ne vous reste plus qu'à le pousser à temps! Utilisez la fonction de planification de Spring @Scheduled.

ScheduledTask


@Slf4j
@Service
public class ScheduledTaskService {

    private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(cron="/*description de cron*/", zone = "Asia/Tokyo")
    public void executeAlarm() {
        try {
            //Appelez le processus pour pousser
            pushAlarm();
        } catch (URISyntaxException e) {
            log.error("{}", e);
        }
        log.info("cron executed : " + sdf.format(new Date()));
    }
}

C'est tout ce qu'on peut en dire!

finalement

Je pense que vous pouvez vous amuser un peu à vous débarrasser des déchets que vous avez tendance à oublier (´ω` *)

L '«évier de cuisine» dans LINE Messaging API SDK (pour Java) a été très utile pour le faire. Au début, la partie qui pousse le message, je l'ai implémentée moi-même sans utiliser le SDK ... w Il est plus facile d'écrire clairement à l'aide du SDK.

Cette fois, l'alerte concerne uniquement les jours de déchets brûlés, mais vous pouvez l'étendre pour créer des jours de déchets non brûlants. Vous pouvez également augmenter le nombre de messages pour envoyer des messages au hasard ou envoyer des tampons. Veuillez faire un rappel original;)

Code source

https://github.com/aytdm/garbage-reminder-bot/tree/v.1.0 (Le message peut être en anglais ou un tampon peut être affiché, mais les bases sont les mêmes que ce qui est écrit ici)

Recommended Posts

Faire un rappel de garbage avec line-bot-sdk-java
Créez un labyrinthe de fouilles avec Ruby2D
Créer un outil de diaporama avec JavaFX
Créer une carte de liste avec LazyMap
Faites un jeu de frappe avec ruby
Faisons une carte de Noël avec Processing!
Faites une liste de choses à faire en famille avec Sinatra
Faites une liste de choses à faire en famille avec Sinatra
Créez quand même une fonction de connexion avec Rails
[docker] [nginx] Créer un ALB simple avec nginx
Faisons une fonction de recherche avec Rails (ransack)
Rendre System.out Mock avec Spock Test Framework
Exécutez Scala avec GraalVM et créez-en une image native
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
[Bases de Java] Créons un triangle avec une instruction for
[Mémo de travail de l'application personnelle] Créez un calendrier avec simple_calendar
Créer un utilitaire de réflexion ②
Créer un utilitaire de réflexion ③
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
Créer un utilitaire de réflexion ①
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ① ~ Hello World ~
Apprendre Ruby avec AtCoder 13 Comment créer un tableau à deux dimensions
Faisons une API simple avec EC2 + RDS + Spring boot ①
Créez un CRUD simple avec SpringBoot + JPA + Thymeleaf ⑤ ~ Modèle commun ~
Les microservices avec DevOps apportent des modifications
Créez un terrain de jeu avec Xcode 12
[Java] Rendez-le constant
[Rails] Faites une liste de miettes de pain
Faire un diamant en utilisant Java
Une histoire bloquée avec NotSerializableException
Créons une application Web de gestion de livres avec Spring Boot part1
Comment créer un fichier jar sans dépendances dans Maven
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application Web de gestion de livres avec Spring Boot part2
Créer un compilateur C à utiliser avec Rust x CLion avec Docker
J'ai essayé de créer une fonction de groupe (babillard) avec Rails