こんにちは!アナログな町内会運営を変えるべく、「GASで機能拡張した町内会公式LINE」を作りました。たくさんの記事を参考にしながら、オープンソースの文化に触れる中で、助け合いの大切さを実感しつつ、ようやく完成させることができました。
Pay forwardの精神で、これから町内会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ドライブやカレンダーにアクセスする方法は、それぞれ共有の設定が必要でちょっと説明が長くなります。
なので別の記事にアップしたいと思います。どうぞお楽しみに!