J'ai créé un LineBot qui renvoie un perroquet de Nginx + SpringBoot dans un environnement VPS.
・ VPS: Conoha (https://www.conoha.jp/) ・ Système d'exploitation: CentOS7 ・ Certificat SSL: Let's Encrypt ・ Nginx 1.12.2 ・ SpringBoot 2.1.6
Les webhooks LineBot ne sont valides que pour les URL https. VPS est Conoha, et mon propre domaine a été acquis à partir d'un autre site de domaine. Ici, nous omettons la méthode d'acquisition et la méthode de paramétrage du domaine d'origine.
J'ai obtenu le certificat SSL en me référant à ce qui suit. J'ai également installé Nginx dans l'article ci-dessous.
** Publiez un site Web sécurisé avec le certificat SSL Let's Encrypt ** https://knowledge.sakura.ad.jp/5573/
Ouvrez les paramètres de base du canal dans Line Developers et configurez les paramètres tels que WebHook. Notez le secret du canal, car vous l'utiliserez ultérieurement.
Réémettez le jeton d'accès et notez le jeton d'accès affiché pour une utilisation ultérieure. La transmission Webhook a été remplacée par "utiliser" Veuillez spécifier le nom de domaine acquis dans la partie grisée de l'URL du Webhook.
Sélectionnez "Ne pas utiliser" pour le message de réponse automatique. Veuillez sélectionner "Ne pas utiliser" pour le message d'accueil lors de l'ajout d'un ami.
Créez un projet avec Spring Initializr https://start.spring.io/ ・ Projet: Projet Gradle ・ Langue: Java ・ Botte de printemps: 2.1.6 ・ Métadonnées du projet ・ Groupe: com.example ・ Artefact: linebot
Importez le projet créé avec STS et [line-bot-java sample (echo)](https://github.com/line/line-bot-sdk-java/blob/master/sample- Copiez spring-boot-echo / src / main / java / com / example / bot / spring / echo / EchoApplication.java) dans LinebotApplication.java. À ce stade, la bibliothèque linebot n'est pas incluse, donc une erreur de compilation se produira, qui sera résolue dans une étape ultérieure.
com/example/linebot/LinebotApplication.java
@SpringBootApplication
@LineMessageHandler
public class LinebotApplication {
public static void main(String[] args) {
SpringApplication.run(LinebotApplication.class, args);
}
@EventMapping
public Message handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
System.out.println("event: " + event);
final String originalMessageText = event.getMessage().getText();
return new TextMessage(originalMessageText);
}
@EventMapping
public void handleDefaultMessageEvent(Event event) {
System.out.println("event: " + event);
}
}
build.gradle
plugins {
id 'org.springframework.boot' version '2.1.6.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compile 'com.linecorp.bot:line-bot-spring-boot:2.7.0'
}
jar {
manifest {
attributes 'Main-Class': 'LinebotApplication'
}
}
Faites un clic droit sur le projet-> Gradle-> Refresh Gradle Project
src/main/resources/application.properties
line.bot.channelSecret =XXX (Channnel Secret of Line Developers)
line.bot.channelToken =XXX (jeton d'accès des développeurs de ligne)
line.bot.handler.path = /callback
L'étape suivante "Lier Nginx et Spring Boot" éditera également application.properties, donc il ne sera pas encore construit.
Fonctionne avec Nginx et Spring Boot. J'ai évoqué ce qui suit pour la méthode de coopération.
** Utilisez nginx pour activer SSL (HTTPS) dans Spring Boot ** https://qiita.com/keigohtr/items/5b2b423fe0e9da027db6
/etc/nginx/conf.d/ssl.conf
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
upstream spring-boot {
server 127.0.0.1:8443;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl on;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
resolver 8.8.8.8;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
server_name example.com;
location / {
proxy_pass http://spring-boot;
}
}
src/main/resources/application.properties
line.bot.channelSecret = XXX
line.bot.channelToken = XXX
line.bot.handler.path = /callback
server.port=8443
#server.ssl.key-store=keystore.p12
#server.ssl.key-store-password=mypassword
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=tomcat
endpoints.enabled=false
management.add-application-context-header=false
Cliquez avec le bouton droit sur le projet-> Exécuter en tant que-> Gradle Build n'a pas pu être fait, j'ai donc construit de STS à Jar par la méthode suivante
1 Faites un clic droit sur le projet -> Exécuter en tant que -> Exécuter la configuration ...
Double-cliquez sur Projet Gradle-> Sélectionnez New_configration, entrez "build" dans Gradle Tasks:, cliquez sur Workspalce ...
Sélectionnez le projet à construire avec Select Project
Cliquez sur Exécuter lorsque le chemin est défini dans le répertoire de travail
Si la construction réussit, un fichier jar sera généré dans build / libs.
Téléchargez le fichier jar créé dans le répertoire utilisateur (/ home / [nom d'utilisateur]) en tant qu'emplacement du serveur et exécutez la commande suivante pour démarrer Spring Boot.
sudo java -jar linebot-0.0.1-SNAPSHOT.jar
Spring Boot est à l'état démarré avec le message suivant affiché.
Vérifiez la connexion de l'URL Webhook définie dans Line Developers. Si le message «Successful» s'affiche, les réglages ont été effectués correctement jusqu'à présent et la connexion entre LineBot et VPS a été établie.
Lorsque vous envoyez un message à un canal créé à partir de l'application Line, le même message que vous avez envoyé sera renvoyé. Vous avez maintenant un robot de retour de perroquet.
Recommended Posts