やっと触れましたLINE Messaging API。やばい、なにこれめっちゃ楽しい。
上のは完全に遊びですが、仕事でも真面目に検討してもいいのかもって今更ながら真面目に思い始めました。QRコードから簡単に友だち追加できるので、何かと初速が速いなぁと。とりあえずスマホだけあれば良いわけですし。と当たり前なことを今更言ってしまうぐらい楽しいです。
Javaな方々は公式からThe Messaging API SDK for Javaが出てるので、これで簡単に始められます。
github.com
ドキュメントは以下参照。
LINE API Reference
line-bot-spring-boot moduleもあるのでSpring Bootの勉強がてら始めるのもホントおすすめです(自分は完全にそんな感じ)
GitHubのページにサンプルコードありますが、単純に送ったメッセージをやまびこのようにブーメランするだけなら
package com.example.bot.spring.echo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.linecorp.bot.model.event.Event;
import com.linecorp.bot.model.event.MessageEvent;
import com.linecorp.bot.model.event.message.TextMessageContent;
import com.linecorp.bot.model.message.TextMessage;
import com.linecorp.bot.spring.boot.annotation.EventMapping;
import com.linecorp.bot.spring.boot.annotation.LineMessageHandler;
@SpringBootApplication
@LineMessageHandler
public class EchoApplication {
public static void main(String[] args) {
SpringApplication.run(EchoApplication.class, args);
}
@EventMapping
public TextMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
System.out.println("event: " + event);
return new TextMessage(event.getMessage().getText());
}
@EventMapping
public void handleDefaultMessageEvent(Event event) {
System.out.println("event: " + event);
}
}
で作れます。便利すぎる(^^;
誰でも簡単に、って感じなのだと思いますが、知ってると便利かなと思うことをまとめたいと思います。
設定まわり URLにcallback
Webhookを登録したとき、Verifyがうまくいかない、と最初ちょっとハマってました。Spring Boot利用したとき、デフォルトでは先ほどのキャプチャにあるように「https://hogehoge.ngrok.io/callback」のような形で「callback」と入れてあげる必要があります。GitHubのConfigurationに、デフォルトが「callback」になっていることが書いてあるのですが最初気づかなくて、ハマってました。
あくまでデフォなので、変えてしまうのもありです。
設定まわり 自動応答メッセージ
ちゃんとドキュメント読めって感じなのですが、最初、WebhookのVerifyが成功してローカルPCにもデータ飛ぶのに、LINEから話かけると常に以下の「メッセージありがとうございます 申し訳ありませんが、このアカウントでは個別のご返信ができないのです 次回の配信をお楽しみに」と出てしまって、わからんーってなってました(^^;
LINE@Managerで「アカウント設定」->「Bot設定」の「詳細設定」->「自動応答メッセージ」を「利用しない」にするだけです。
herokuでhttps
ここまででローカル開発環境で色々遊べるのですが、最後はやっぱり公開してみたい、ということがあると思います。証明書は安いものを取るか、Let's Encryptなど使うか、など選択肢があるかと思いますが、それなりに手間だなぁと。で、探してたらHerokuのAdd-onでFixieを使うと簡単とのこと。
qiita.com
実際に試したらホント簡単でした(^^;
画像や動画、スタンプの認識
最後におまけですが、冒頭に出したサンプルコードはテキストメッセージをやまびこするものでしたが、画像とか動画、スタンプが送られてきた場合、どうフックするのかなーと思ったのですが、@EventMapping使って以下のように定義すれば、そのままフックされました。
@EventMapping
public Message handleStickerMessage(MessageEvent<StickerMessageContent> event) {
return new TextMessage("スタンプ送信ありがとうございます!");
}
@EventMapping
public Message handleImageMessage(MessageEvent<ImageMessageContent> event) {
return new TextMessage("画像送信ありがとうございます!");
}
@EventMapping
public Message handleVideoMessage(MessageEvent<VideoMessageContent> event) {
return new TextMessage("動画送信ありがとうございます!");
}
@EventMapping
public Message handleAudioMessage(MessageEvent<AudioMessageContent> event) {
return new TextMessage("音声送信ありがとうございます!");
}
@EventMapping
public Message handleFollowEvent(FollowEvent event) {
return new TextMessage("友達追加ありがとうございます!");
}
Herokuの環境変数利用
LINEのChannelSecretやTokenはコードに埋め込んだり、設定ファイルでGitHubなどにアップするわけにはいかないので、Herokuなどでは環境変数を利用するのが良いかと思います。で、gradleを利用してる場合は
sample-spring-boot-echoのREADMEにあるように
github.com
../gradlew bootRun -Dline.bot.channelToken=YOUR_CHANNEL_TOKEN \
-Dline.bot.channelSecret=YOUR_CHANNEL_SECRET
みたいに指定するようです。自分はMaven使ってたのと、application.propertiesを上手く使えないかなぁと思って調べたら
line.bot.channelSecret = ${CHANNEL_SECRET}
line.bot.channelToken = ${CHANNEL_TOKEN}
というように定義することができました。ほえー便利。
ということで、Spring Bootの勉強を楽しみながらするのにもおススメなLINE Messaging APIでした!
すごい面白いのができたらAwardsに出して1000万狙うしかない!(無理
botawards.line.me