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

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

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

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

Q&A

解決済

1回答

1962閲覧

LINE APIでデータの受け渡し方がわからない

Nero1129

総合スコア130

LINE Messaging API

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

0グッド

0クリップ

投稿2020/10/24 16:22

編集2020/10/25 01:38

前提・実現したいこと

今、LINE BOTを用いた予約アプリを開発しようとしています。

Webアプリケーションなどであれば、formの内容などは一括で送信され、取得できるのでそんなに難しく思わなかったのですが、LINE BOTの場合、対話型のアプリケーションなので、飛んでくるデータが分割されていて、どこで一時的に保持してくべきなのかがわかりません。

今、想像している対話の流れを書きます。イメージは個人病院の予約システムです。先生は2人居ます。

  1. 一定のキーワード、例えば「予約」などで、処理が開始する。
  2. 予約日時を選択する。
  3. 先生を選択する。
  4. ここで、空いてる時間があるかをDBに照会。
  5. 空いてる時間の一覧を送り、選択。
  6. 今までの選択を、最終確認で送る。
  7. ユーザーからの承諾を得られれば、DBに保存。

というようなシナリオを想像しています。
ここで、2,3,5番の日時、先生、時間の選択をどのように保持していればいいのかがわかりません。
このような場合、どのようにしてデータを1時保管すべきなのでしょうか?

ご教示、よろしくお願い致します。

勝手な考察

今考えているのは、予めクラスを作成し、内容が来るたびにセッターでデータを保持。了承が得られれば、そのままDBへ保存して、ガベージコレクションをかけるのがいいのかなとは考えています。未検証です。
このとき、一番不安なのは、複数のユーザーが同時に使用した場合、クラス内のデータが違うユーザに上書きされるのでは?と思っているのですが、この辺が理解が曖昧で、自分でもよくわかっていません。ここら辺の参考になる記事などを教えていただけると幸いです。

使用環境

  • Python3.7
  • LINE SDK

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

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

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

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

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

guest

回答1

0

ベストアンサー

一回の会話(複数回の対話のやり取り)をセッションと考え、
Redis等のNOSQLで管理するのが一般的だとは思いますが、
お医者さん2人の規模の病院でしたらおっしゃっている通りソフトウェア上のオンメモリで管理するのも十分ありの範囲だと思います。

やり方としては、シングルトンインスタンスに状態をもたせる事でGCに殺されないようにします。

具体的なやり方はこちらのサイトが参考になるかも(Javaの例)
https://qiita.com/kyabetsuda/items/e570bdb61b1345f5f5a8

投稿2020/10/24 16:46

編集2020/10/24 17:18
kou0179

総合スコア304

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

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

Nero1129

2020/10/25 01:41

ご回答ありがとうございます。 NoSQLで、ユーザIDなどを主キーにして、一時的に保存みたいな感じってことであってますか? この場合、ユーザーが途中で処理を終了した場合、NoSQL上に中途半端なデータが残らないように、10分置きなどにデータを削除するなどの処理を行った方がいいんでしょうか? シングルトンインスタンスは初めて聞いたので、ちょっと調べてみます。
kou0179

2020/10/25 03:02

> この場合、ユーザーが途中で処理を終了した場合、NoSQL上に中途半端なデータが残らないように、10分置きなどにデータを削除するなどの処理を行った方がいいんでしょうか? この機能が標準搭載されているのがNoSQLの強みですよ。 ちなみにですが、開発言語は何だったのでしょうか?
Nero1129

2020/10/25 12:54

NoSQLにそんな機能あったんですね。びっくりです。 聞かれると思ったので追記しておきましたが、pythonです。nosqlにはtinydbを使用しようと思っています。
kou0179

2020/10/26 06:26

@Nero1129さん 本当にすみません,,,嘘を書きました。 キーの有効期限を設定できるのはNoSQLの強みではなく,Redisの強みであるそうです。 まあでもNoSQLでセッション管理するのが妥当なラインではあると思いますので,tinydbを使うならばdailyのBatchで一定以上完了していないセッション(会話)を削除するは容易に可能だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問