質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

1591閲覧

Javaでスケジュール管理をするLINE BOTを作りたいが、うまくいかない

nachu_

総合スコア3

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/09/05 14:11

編集2021/09/05 21:42

前提・実現したいこと

javaでスケジュール管理を行えるLINE BOTを作りたいと考えています。
リッチメニューの『予定追加』からスケジュールの追加(日付入力の後に予定の内容を送信する)、
『予定確認』で登録されているスケジュールを
「○/○ バイト
○/○ 課題締切」
などというように返信し、普通に文章を送信するとオウム返しをするようなものを完成形として想定しています。
しかし、予定を登録して表示させようと思っても何も反応が返ってきませんでした。(オウム返しの方だけはちゃんと返信が返ってきました)
調べて出てきたものを少しずつ改変したり応用したりするような形でコード作成をしているのですが、どうすればうまくいくかわかりません。

ソースコード

java

1package com.example.linebot.replier; 2 3import com.linecorp.bot.model.event.MessageEvent; 4import com.linecorp.bot.model.event.PostbackEvent; 5import com.linecorp.bot.model.event.message.TextMessageContent; 6import com.linecorp.bot.model.message.Message; 7import com.linecorp.bot.model.message.TextMessage; 8 9public class DialogAnswer implements Replier { 10 private PostbackEvent event; 11 public DialogAnswer(PostbackEvent event) { 12 this.event = event; 13 } 14 private MessageEvent<TextMessageContent> event1; 15 public DialogAnswer(MessageEvent<TextMessageContent> event1) { 16 this.event1 = event1; 17 } 18 @Override 19 public Message reply() { 20 String actionLabel = this.event.getPostbackContent().getData(); 21 switch (actionLabel) { 22 case "DT": 23 List list = new List(this.event.getPostbackContent().getParams().toString()); 24 TextMessageContent tmc = this.event1.getMessage(); 25 list.add(tmc); 26 return new TextMessage("予定を追加しました"); 27 } 28 return new TextMessage("?"); 29 } 30}

java

1package com.example.linebot.replier; 2 3import com.linecorp.bot.model.event.message.TextMessageContent; 4import java.util.ArrayList; 5 6// 予定追加 7public class List { 8 private String date; 9 private ArrayList<String> list = new ArrayList<>(); 10 private String scheduleList; 11 public List(String date){ 12 this.date = date; 13 this.scheduleList = ""; 14 } 15 public List(){ 16 } 17 public void add(TextMessageContent schedule){ 18 String text = String.format(date + " " + schedule + "\n"); 19 list.add(text); 20 for (String list1 : list){ 21 scheduleList = String.format(scheduleList + list1); 22 } 23 } 24 public String getScheduleList(){ 25 return scheduleList; 26 } 27}

java

1package com.example.linebot.replier; 2 3import com.linecorp.bot.model.message.Message; 4import com.linecorp.bot.model.message.TextMessage; 5 6// 予定確認 7public class Verification implements Replier { 8 @Override 9 public Message reply() { 10 List scheduleList = new List(); 11 return new TextMessage(scheduleList.getScheduleList()); 12 } 13}

jaca

1package com.example.linebot; 2 3import com.example.linebot.replier.*; 4import com.linecorp.bot.model.event.FollowEvent; 5import com.linecorp.bot.model.message.Message; 6import com.linecorp.bot.spring.boot.annotation.EventMapping; 7import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; 8import org.slf4j.Logger; 9import org.slf4j.LoggerFactory; 10import com.linecorp.bot.model.event.message.TextMessageContent; 11import com.linecorp.bot.model.event.MessageEvent; 12import com.linecorp.bot.model.event.PostbackEvent; 13 14@LineMessageHandler 15public class Callback { 16 private static final Logger log = LoggerFactory.getLogger(Callback.class); 17 18 @EventMapping 19 public Message handleFollow(FollowEvent event) { 20 Follow follow = new Follow(event); 21 return follow.reply(); 22 } 23 24 @EventMapping 25 public Message handleMessage(MessageEvent<TextMessageContent> event) { 26 TextMessageContent tmc = event.getMessage(); 27 String text = tmc.getText(); 28 switch (text) { 29 case "予定確認": 30 // リッチメニューから送信 31 Verification verification = new Verification(); 32 return verification.reply(); 33 default: 34 //オウム返し 35 Parrot parrot = new Parrot(event); 36 return parrot.reply(); 37 } 38 } 39 40 // PostBackEventに対応する 41 @EventMapping 42 public Message handlePostBack(PostbackEvent event) { 43 DialogAnswer dialogAnswer = new DialogAnswer(event); 44 return dialogAnswer.reply(); 45 } 46 47}

java

1package com.example.linebot; 2 3import com.linecorp.bot.client.LineBlobClient; 4import com.linecorp.bot.client.LineMessagingClient; 5import com.linecorp.bot.model.action.DatetimePickerAction; 6import com.linecorp.bot.model.action.MessageAction; 7import com.linecorp.bot.model.response.BotApiResponse; 8import com.linecorp.bot.model.richmenu.*; 9import org.slf4j.Logger; 10import org.slf4j.LoggerFactory; 11import org.springframework.beans.factory.annotation.Autowired; 12import org.springframework.core.io.ClassPathResource; 13import org.springframework.web.bind.annotation.GetMapping; 14import org.springframework.web.bind.annotation.RestController; 15import java.io.IOException; 16import java.nio.file.Files; 17import java.time.LocalDateTime; 18import java.util.ArrayList; 19import java.util.List; 20import java.util.concurrent.ExecutionException; 21 22@RestController 23public class RichMenuController { 24 private static final Logger log = LoggerFactory.getLogger(Push.class); 25 26 // push先のユーザID(本来は、友達登録をした瞬間にDBなどに格納しておく) 27 private String userId = "xxxxx"; 28  // 伏せてありますが、ここにはMessaging APIのチャネル基本設定にある「あなたのユーザーID」を入れています 29 30 private final LineMessagingClient messagingClient; 31 private final LineBlobClient blobClient; 32 @Autowired 33 public RichMenuController(LineMessagingClient lineMessagingClient, LineBlobClient blobClient) { 34 this.messagingClient = lineMessagingClient; 35 this.blobClient = blobClient; 36 } 37 @GetMapping("addRich") 38 public String addRichMenu() { 39 String text = "リッチメニューを作成し、ユーザーに紐付けます"; 40 RichMenu richMenu = RichMenu.builder() 41 .name("リッチメニュー1") 42 .chatBarText("コントローラー") 43 .areas(makeRichMenuAreas()) 44 .selected(true) 45 .size(RichMenuSize.FULL) 46 .build(); 47 try { 48 RichMenuIdResponse resp1 = messagingClient.createRichMenu(richMenu).get(); 49 log.info("create richmenu:{}", resp1); 50 51 ClassPathResource cpr = new ClassPathResource("/img/RichMenu.png"); 52 byte[] fileContent = Files.readAllBytes(cpr.getFile().toPath()); 53 BotApiResponse resp2 = blobClient.setRichMenuImage(resp1.getRichMenuId(), "image/jpeg", fileContent).get(); 54 log.info("set richmenu image:{}", resp2); 55 56 BotApiResponse resp3 = messagingClient.linkRichMenuIdToUser(userId, resp1.getRichMenuId()).get(); 57 log.info("link richmenu:{}", resp3); 58 59 } catch (InterruptedException | ExecutionException | IOException e) { 60 throw new RuntimeException(e); 61 } 62 return text; 63 } 64 @GetMapping("delRich") 65 public String delRichMenu() { 66 String text = "リッチメニューをすべて削除します"; 67 try { 68 messagingClient.unlinkRichMenuIdFromUser(userId); 69 70 RichMenuListResponse resp4 = messagingClient.getRichMenuList().get(); 71 log.info("get richmenus:{}", resp4); 72 73 resp4.getRichMenus().stream() 74 .forEach(r -> messagingClient.deleteRichMenu(r.getRichMenuId())); 75 76 } catch (InterruptedException | ExecutionException e) { 77 throw new RuntimeException(e); 78 } 79 return text; 80 } 81 private List<RichMenuArea> makeRichMenuAreas() { 82 final ArrayList<RichMenuArea> richMenuAreas = new ArrayList<>(); 83 richMenuAreas.add(makeDateTimeAction(0, 0, 1250, 1686, "予定追加")); 84 richMenuAreas.add(makeMessageAction(1250, 0, 1250, 1686, "予定確認")); 85 return richMenuAreas; 86 } 87 private RichMenuArea makeMessageAction(int x, int y, int w, int h, String label) { 88 return new RichMenuArea(new RichMenuBounds(x, y, w, h), 89 new MessageAction(label, label)); 90 } 91 private RichMenuArea makeDateTimeAction(int x, int y, int w, int h, String label) { 92 return new RichMenuArea(new RichMenuBounds(x, y, w, h), 93 DatetimePickerAction.OfLocalDatetime.builder() 94 .label(label) 95 .data("DT") 96 .initial(LocalDateTime.now()) 97 .min(LocalDateTime.now().minusYears(10l)) 98 .max(LocalDateTime.now().plusYears(10l)) 99 .build()); 100 } 101}

java

1package com.example.linebot.replier; 2import com.linecorp.bot.model.event.FollowEvent; 3import com.linecorp.bot.model.message.Message; 4import com.linecorp.bot.model.message.TextMessage; 5import java.util.ArrayList; 6 7// フォローされた時用の返信クラス 8public class Follow implements Replier { 9 private FollowEvent event; 10 public Follow(FollowEvent event) { 11 this.event = event; 12 } 13 @Override 14 public Message reply() { 15 String userId = this.event.getSource().getUserId(); 16 //ユーザーID記録 17 ArrayList<String> userid = new ArrayList<>(); 18 userid.add(userId); 19 String text = String.format( 20 "こんにちは!\n" + 21 "スケジュール管理をするBotです。\n" + 22 "\n" + 23 "「予定登録」で予定を登録します。\n" + 24 "「予定確認」で登録されたスケジュールを確認できます。"); 25 return new TextMessage(text); 26 } 27}

java

1package com.example.linebot.replier; 2import com.linecorp.bot.model.message.Message; 3public interface Replier { 4 Message reply(); 5}

java

1package com.example.linebot; 2import org.springframework.boot.SpringApplication; 3import org.springframework.boot.autoconfigure.SpringBootApplication; 4import org.springframework.scheduling.annotation.EnableScheduling; 5@SpringBootApplication 6@EnableScheduling 7public class LinebotApplication { 8 public static void main(String[] args) { 9 SpringApplication.run(LinebotApplication.class, args); 10 } 11}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問