@ibarakitarou123456

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

1分後に会話終了の通知がくるチャットボットを作成したい

解決したいこと

会話開始とLINEで送ると「会話を開始するよー」と返信が返ってきて、1分後したら「会話を終了するよー」と返信が返ってくるプログラムを作成したいが返信が返ってこない。なお1分間の間は自由に会話してもよい。

発生している問題・エラー

>会話開始
>>会話開始するよー
    ・
      ・
       ・
>>(会話終了がかえってこない)
### 該当するソースコード
GAS
var conversationStartTime;

function doPost(e) {
  try {
    var lineData = JSON.parse(e.postData.contents);
    var userMessage = lineData.events[0].message.text;

    // LINEからのメッセージをログに出力
    Logger.log('LINE Message Received:', JSON.stringify(lineData));

    // りんな へのリクエストと LINE への応答
    var chitchatResponse;

    if (userMessage.includes("会話開始")) {
      // ユーザーが「会話開始」と入力した場合、会話を開始
      conversationStartTime = new Date().getTime();
      replyLine(lineData.events[0].replyToken, "会話を開始するよー。");
    } else {
      // 通常の会話が可能な場合
      chitchatResponse = generateChitchatResponse(userMessage);

      // 1分経過したら会話を終了
      if (conversationStartTime && new Date().getTime() - conversationStartTime >= 1 * 60 * 1000) {
        replyLine(lineData.events[0].replyToken, "会話を終了するよー。");
        conversationStartTime = null; // 会話開始時刻をリセット
        return;
      }
    }

    // 通常の会話応答
    if (chitchatResponse) {
      replyLine(lineData.events[0].replyToken, chitchatResponse);
    }
  } catch (error) {
    Logger.log('doPostでエラーが発生しました:', error.message);
    console.log(error.message);
  }
}



  function replyLine(replyToken, replyMessage) {
    var url = "https://api.line.me/v2/bot/message/reply";
    var headers = {
      "Content-Type": "application/json",
      "Authorization": "*******"
    };

    var data = {
      "replyToken": replyToken,
      "messages": [
        {
          "type": "text",
          "text": replyMessage
        }
      ]
    };

    var options = {
      "method": "post",
      "headers": headers,
      "payload": JSON.stringify(data)
    };

    UrlFetchApp.fetch(url, options);
  }

  function generateChitchatResponse(userMessage) {
    var url = "https://api.rinna.co.jp/models/chitchat-generation";
    var headers = {
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": "*****"
      
      c" // ご自身のRinna APIのサブスクリプションキーに置き換えてください
    };

    var dialogHistory = [
      "おはよう",
      "朝からおはようございます!",
      "元気ですか?",
      "元気です!笑",
      userMessage
    ];

    var data = {
      "dialogHistory": dialogHistory
    };

    var options = {
      "method": "post",
      "headers": headers,
      "payload": JSON.stringify(data),
      "muteHttpExceptions": true
    };

    var response = UrlFetchApp.fetch(url, options);

    if (response.getResponseCode() == 200) {
      var responseData = JSON.parse(response.getContentText());
      return responseData.response;
    } else {
      console.error("Error " + response.getResponseCode() + ": " + response.getContentText());
      return "エラーが発生しました。";
    }
  }


0 likes

2Answer

GASを触ったことがないので間違っていたらすいませんが、doPost(a)はどのようなタイミングで実行されますでしょうか?
もしユーザーがLINEで何か送った時にdoPost(a)が実行されるのであれば、ユーザーがLINEを送らない限りはそもそも「1分経過したかどうか」のチェックが走らず、結果的に1分経過しても「会話を終了するよー」の返信は返ってこないと思われます。

0Like

Comments

if (conversationStartTime && new Date().getTime() - conversationStartTime >= 1 * 60 * 1000)が無意味です。

変数conversationStartTimeには何も代入してないのですから何かしらで時刻情報を保持するコードを書き足す必要があります。

0Like

Comments

  1. 返信ありがとうございます、行ってみます

Your answer might help someone💌