記事内に広告が含まれています。

ノンプログラマーが作る【GASでLINE構築】公式アカウント⑧自動返信機能を実装しよう応用編

【GAS・LINE】自治会・町内会編

こんにちは!アナログな町内会運営を変えるべく、「GASで機能拡張した町内会公式LINE」を作りました。たくさんの記事を参考にしながら、オープンソースの文化に触れる中で、助け合いの大切さを実感しつつ、ようやく完成させることができました。

Pay forwardの精神で、これから町内会LINEに追加した機能をシリーズで紹介していきます。初心者なので完璧なコードではないかもしれませんが、少しでも役に立てば嬉しいです!

なお、ブログ通りに作業してもうまく動かない方のために、「ココナラ」でサポートを提供しています。良かったらご覧くださいね♪

GASを用いたLINE構築のサポートをします ブログの説明だけではうまくいかない人向け

今回は自動返信機能の応用編です。

スポンサーリンク

【実用編】指定されたキーワードに応じた返信を設定する

今回は、例としてリッチメニューAの項目に自動返信を設定するという想定で、汎用性の高い以下のコードを紹介します。

・キーワードに応じて固定のメッセージを返す

・キーワードに応じて特定のHPにアクセスする

・キーワードに応じてGoogleフォームにアクセスする

・キーワードに応じてGoogleドライブにアクセスする

・キーワードに応じてGoogleカレンダーにアクセスする

キーワードに応じて固定のメッセージを返す

「つかいかた」とメッセージが来た場合、「こちらは○○町内会の公式LINEです。メニュー内の知りたい情報をタップすると、自動で項目内容に応じた返信をします。」と返信するように設定してみましょう。

また、キーワード以外のメッセージが来た場合は「こちらは自動返信専用です。個別のメッセージには対応できません。」と一律返信するように設定してみましょう。

前編で紹介したコードの中で、replyMessage(e)中頃にある以下の部分を書き換えます。

//------------------------------------------
  messages.push({ 'type': 'text', 'text': userMessage});
//------------------------------------------  

↓上書きします↓

//------------------------------------------
    switch(userMessage){
      case 'つかいかた':
        messages.push({ 'type': 'text', 'text': "こちらは○○町内会の公式LINEです。メニュー内の知りたい情報をタップすると、自動で項目内容に応じた返信をします。"});
        break; 

      default:
        messages.push({ 'type': 'text', 'text': "こちらは自動返信専用です。個別のメッセージには対応できません。" });
      break;
    }
//------------------------------------------

くどいようですが、内容を変更したのをLINEに反映させたかったら「デプロイ」更新ですよ!

今後はお知らせしませんが、忘れないでくださいね。

いい感じになりましたね。

キーワードに応じて特定のHPにアクセスする

では、リッチメニューの項目をタップしたら指定のHPにアクセスするようなコードを紹介します。

現在、リッチメニューの設定で、「ゴミ収集」項目をタップすると「ごみ収集日一覧」とメッセージを送るように設定されていますのでそのキーワードに反応する内容を指示します。

先ほどのコードの 中ごろ

   break;

default:

の間に、以下のコードを挿入してください。

      case 'ごみ収集日一覧':
        messages.push({ 'type': 'text', 'text':"○○のサイトに移動します" + "https://www...アクセスしたいサイト..."});
        break;

今回は例として適当なURLがなかったので、町内会LINE紹介動画のURLを返信するように書いてます。

実際は黄マーカー部分をそれぞれ書き換えてくれたらOKです。

ここまできて気づいたのですが、私、オウム返しの指示コードを上書きしてと言っておきながら自分は消さずにいたようです。

上書きしていれば返信の一言目(オウム返し)は出てきません。

キーワードに応じてGoogleフォームに誘導する

Googleフォームを作ろう

出欠確認やアンケート等に便利なGoogleフォームへのアクセスをリッチメニューに組み込んでおけば、集計に便利です。

Googleドライブから、新規にGoogleフォームを作成します。

作り終わったら、フォームのタブ→回答 で、「スプレッドシートにリンク」をクリック

既存のシートにリンクさせ、LINE構築用のスプレッドシートを選択すると、スプレッドシートに新たなタブが作られます。

GoogleフォームのURLを貼ろう

前項同様、replyMessage(e)コードの 中ごろ

 break;

default:

の間に、以下のコードを挿入してください。

      case 'アンケート':
        messages.push({ 'type': 'text', 'text': 'アンケートのご協力ありがとうございます!こちらから回答してください。' + "Googleフォームのリンク"});
        break;

Googleフォームのリンクを取得します。

フォーム右上の送信 → 送信方法でリンクを選択

長いリンクが表示されるのでそのままコピーしてもよし、短縮してもよし。

このコピーしたリンクを先ほどのコードの該当箇所に貼り付けます。

フォームに回答してみよう

フォームの回答を送信すると、スプレッドシートに回答が反映されます。

これで集計作業が捗りますね。

まとめ

最後に、今回紹介したコードを全て実装した場合のreplyMessage(e)の全容を以下に紹介します。

function reply_Message(e) {
   const channel_token = PropertiesService.getScriptProperties().getProperty('LINEb_TOKEN');
   const url = 'https://api.line.me/v2/bot/message/reply'; // 応答メッセージ用のAPI URLを定義
  const event = JSON.parse(e.postData.contents).events[0];// Webhookで取得したJSONデータをオブジェクト化し、取得
  const reply_token = event.replyToken;    //取得したデータから、応答用のトークンを取得
  const userMessage = event.message.text;  //ユーザーが投稿したメッセージを取得
  const messages = [];

//------------------------------------------
    switch(userMessage){
      case 'つかいかた':
        messages.push({ 'type': 'text', 'text': "こちらは○○町内会の公式LINEです。メニュー内の知りたい情報をタップすると、自動で項目内容に応じた返信をします。"});
        break; 

      case 'ごみ収集日一覧':
        messages.push({ 'type': 'text', 'text':"○○に移動します" + "サイトのURL"});
        break;

      case 'アンケート':
        messages.push({ 'type': 'text', 'text': 'アンケートのご協力ありがとうございます!こちらから回答してください。' + "Googleフォームのリンク"});
        break;

      default:
        messages.push({ 'type': 'text', 'text': "こちらは自動返信専用です。個別のメッセージには対応できません。" });
      break;
    }
//------------------------------------------

  const payload = {                 //APIリクエスト時にセットするペイロード値を設定する
    'replyToken': reply_token,
    'messages': messages
  }
  const options = {                 //HTTPSのPOST時のオプションパラメータを設定する
    'payload': JSON.stringify(payload),
    'method': 'POST',
    'headers': { "Authorization": "Bearer " + channel_token },
    'contentType': 'application/json'
  }
  UrlFetchApp.fetch(url, options);   //LINE Messaging APIにリクエストし、返答する
}

今回は、自動応答の応用編として特定のキーワードに応じた返信内容の設定を行いました。

Googleドライブやカレンダーにアクセスする方法は、それぞれ共有の設定が必要でちょっと説明が長くなります。

なので別の記事にアップしたいと思います。どうぞお楽しみに!