こんにちは!アナログな町内会運営を変えるべく、「GASで機能拡張した町内会公式LINE」を作りました。たくさんの記事を参考にしながら、オープンソースの文化に触れる中で、助け合いの大切さを実感しつつ、ようやく完成させることができました。
Pay forwardの精神で、これから町内会LINEに追加した機能をシリーズで紹介していきます。初心者なので完璧なコードではないかもしれませんが、少しでも役に立てば嬉しいです!
なお、ブログ通りに作業してもうまく動かない方のために、「ココナラ」でサポートを提供しています。良かったらご覧くださいね♪
今回は自動返信機能の実装の基本について紹介します。
正直、自動返信機能とリッチメニューがあれば、出来ることがかなり増えると思います。
是非トライしてください♪
自治会運営におけるLINE自動返信機能の5つのメリット
自動返信機能を町内会・自治会の公式チャネルに実装した場合のメリットと、その具体的な事例を挙げてみます。
1. 24時間対応と迅速な対応(即時対応)
自動返信機能により、住民の問い合わせに対して即座に対応できるため、時間帯に関係なく情報を提供できます。
具体的な事例:深夜に住民から「明日のゴミ出しは何ですか?」と問い合わせがあった場合、自動返信機能で即座に「明日は可燃ゴミの日です」と回答できます。これにより、担当者が対応できない時間帯でも住民は必要な情報を得ることができます。また、大規模な停電が発生した際に「現在、地域一帯で停電が発生しています。最新情報は随時お知らせします」と自動で通知することで、住民に素早く情報を提供できます。
2. 業務の効率化
よくある質問や簡単な問い合わせを自動返信で対応することで、担当者の負担を軽減し、他の重要な業務に集中できます。
具体的な事例:「次の自治会の集会はいつですか?」という質問に対して、自動的に「次回の集会は8月15日午後2時からです」と返信することで、同じ質問に何度も対応する手間を省けます。
3. 一貫性のある対応
事前に設定された自動返信メッセージにより、全ての住民に対して一貫した情報を提供できます。
具体的な事例:「夏祭りの詳細を教えてください」という質問に対して、毎回「夏祭りは8月20日午後5時から公園で開催されます。詳細は自治会のホームページをご覧ください」と自動返信することで、一貫性のある情報を提供し、誤解や情報のばらつきを防ぐことができます。
4. コスト削減
自動返信機能を導入することで、運営にかかる手間を削減できます。
具体的な事例:毎日多くの問い合わせに対して、担当者が手動で対応する必要がなくなるため、その分の手間を節約できます。また、対応の効率化により、他の重要な業務に時間を割くことができます。
5. データの収集と分析
自動返信機能を通じて、住民の関心やよくある質問をデータとして収集し、分析することでサービスの改善に役立てることもできます。
具体的な事例:自動返信のやり取りを通じて、「夏祭りの参加方法」や「自治会費の支払い方法」に関する質問が多いことがわかった場合、それらの情報をより分かりやすく提供するための改善策を講じることができます。
これらのメリットを活用することで、LINEの自動返信機能は自治会運営をより効率的かつ効果的にサポートし、住民の利便性向上にも寄与できると考えます。
【基本編】自動でオウム返しするbotを作る
自動返信機能は、いろんな条件に応じて場合分けが可能です。
ひとまず、ユーザーのコメントをそのままオウム返しするコードを作ってみましょう。
新しいスクリプトを作成する
では、さっそく自動返信用に新たにスクリプトを作成します。
今回は分かりやすいように「自動返信.gs」という名前で作ってみることとします。
以下の2つのコードをコピー&ペーストしてください。
function doPost(e) {
var event = JSON.parse(e.postData.contents).events[0];
if(event.type == "message") {
if(event.message.type == "text"){
reply_Message(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 = [];
//------------------------------------------
messages.push({ 'type': 'text', 'text': userMessage});
//------------------------------------------
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にリクエストし、返答する
}
ウェブアプリとして反映させるために、デプロイを更新することを忘れずに。
LINEに反映されたか確認する
さて、公式チャネルに戻り何かメッセージを送ってみましょう。
リッチメニューのボタンを押してみても同じ内容がオウム返しされることを確認してください。
今回は、関数の実行は不要です。というか、実行してもエラーになってしまいます。
これは、doPost(e)が、ユーザーからイベントが送られた時しか機能しないためです。
GAS側で実行しても「イベントデータがないよ」とエラーになってしまいます。
コードの簡単な解説
コードの内容をざっくり説明すると、doPost(e)で、ユーザーからのイベント(メッセージやフォロー開始・ブロックなど)を取得しています。このイベントの分類が「message」かつその形式が「text」のときに、reply_Message()を実行する、という内容です。
reply_Message(e)は、ユーザーが投稿したメッセージを「userMessage」として取得して、その内容をそのまま返信メッセージとしています。
アンダーラインをひいた部分ですね。messages_pushのカッコ内が返信内容です。
もし、一番最後に記載されているuserMessageを 「”こんにちは”」 と書き換えると、どんなメッセージに対しても 「こんにちは」と返信されるようになりますよ。練習だと思ってやってみてください。
まとめ
今回は、ユーザーが投稿したメッセージを自動でオウム返しする方法を紹介しました。
次回は応用編として個別のメッセージに対応した返信内容をご紹介します。
お楽しみに!