@sandoraki (John)

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!

LINEbotでメッセージ送信処理をdoPost関数と別の関数に書く場合どうすればいいのか

解決したいこと

GASでLINEbotを作っていて行き詰った際に一つ気になったことがありました。
ポピュラーなオウム返しbotなどではLINEからメッセージを受信した際に実行されるdoPost関数の中にメッセージを送信する処理を行うコードを書いているのですが、僕がやりたいことの都合上、メッセージ送信処理のコードはdoPost関数とは別の関数として定義してdoPost関数の中で呼び出して実行するという風にしています。
しかしそうした場合うまくいかなくなります。
例えばオウム返しbotにてdoPost関数内でメッセージ送信処理を行っている場合はちゃんとメッセージがちゃんと帰ってくるのですが、試しにそれを別の関数に分けてやってみたところ帰ってこなくなりました。

僕が気になったことというのがメッセージ送信処理を別の関数で定義して呼び出す場合、うまくいくようにするにはどういうコードで書けばいいのか?(どのように変わるのか?)ということです。

オウム返しbotの例(他サイトを参考に作成しました)

// LINE developersのメッセージ送受信設定に記載のアクセストークン
const LINE_TOKEN = '----------'; // Messaging API設定の一番下で発行できるLINE Botのアクセストークン
const LINE_URL = 'https://api.line.me/v2/bot/message/reply';

//ユーザーがメッセージを送信した時に下記を実行する
function doPost(e){
  var json = JSON.parse(e.postData.contents);
  //投稿されたtextデータ(e.postData.contents)をJSON形式の値に変換する
  
  //返信するためのトークン取得
  var reply_token=json.events[0].replyToken;
  //replyToken…イベントへの応答に使用するトークン(Messaging APIリファレンス)
  
  if(typeof reply_token === 'underfined'){
    //未定義の変数 typeof…オペランド(対象となる変数等のこと)の型を示す文字列を返す
    return;
  }
  
  //送られたメッセージ内容を取得
  var message = json.events[0].message.text;
  
  
  //メッセージを返信
  UrlFetchApp.fetch(LINE_URL, {
    'headers':{
      'Content-Type':'application/json; charset=UTF-8',
      'Authorization':'Bearer '+ LINE_TOKEN,
    },
    'method':'post',
    'payload':JSON.stringify({
      'replyToken':reply_token,
      'messages':[{
        'type':'text',
        'text':message,
      }],
    }),
  });
  return ContentService.createTextOutput(JSON.stringify({'content':'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

別の関数に書き換えたもの(帰ってこなかった方)

// LINE developersのメッセージ送受信設定に記載のアクセストークン
const LINE_TOKEN = '/WM34bGLHY59faZA43XDG340n//plq+YKCC/M6vr4HN97DTu/EGSWRnOSrdeRFZKa+f+9P5jMOJXbltkP9X+/bizNS7hMo5fH8BOeDBA3Wm+/NnDUzL3bUxQVgxK/d6LNV/npXVnYSVVq2MmWA8bWgdB04t89/1O/w1cDnyilFU='; // Messaging API設定の一番下で発行できるLINE Botのアクセストークン
const LINE_URL = 'https://api.line.me/v2/bot/message/reply';
var reply_token = 0;
var message = 0;

//ユーザーがメッセージを送信した時に下記を実行する
function doPost(e){
  var json = JSON.parse(e.postData.contents);
  //投稿されたtextデータ(e.postData.contents)をJSON形式の値に変換する
  
  //返信するためのトークン取得
  reply_token=json.events[0].replyToken;
  //replyToken…イベントへの応答に使用するトークン(Messaging APIリファレンス)
  
  if(typeof reply_token === 'underfined'){
    //未定義の変数 typeof…オペランド(対象となる変数等のこと)の型を示す文字列を返す
    return;
  }
  
  //送られたメッセージ内容を取得
  message = json.events[0].message.text;
  
  
  function send(){
      //メッセージを返信
    UrlFetchApp.fetch(LINE_URL, {
      'headers':{
        'Content-Type':'application/json; charset=UTF-8',
        'Authorization':'Bearer '+ LINE_TOKEN,
      },
      'method':'post',
      'payload':JSON.stringify({
        'replyToken':reply_token,
        'messages':[{
          'type':'text',
          'text':message,
        }],
      }),
    });
    return ContentService.createTextOutput(JSON.stringify({'content':'post ok'})).setMimeType(ContentService.MimeType.JSON);
  }
}
  

↑予め「replt_token」と「body」関数を外で定義しておくことで、doPost内で書き換えられたのちにメッセージ送信処理関数が実行されうまくいくのではと思いました。

分かる方いましたら返信お願い致します。

0 likes

1Answer

Your answer might help someone💌