ヘルプデスク作業を無人化できないかと調べていて実験で作りました。
LINEで質問されたらメッセージをGASに受け渡し、メッセージにあった内容をLINEに返信します。
返信する内容はメンテナンスしやすいようにスプレッドシートで管理します。
LINEはメッセージ送信は一定量を超えると有料ですが、受け取ったメッセージに対する返信は無料です。
GASも無料で使用できるので全て無料で作成できます。
以下のように「選択」形式で選択させるメッセージを送信したり、通常のメッセージも送信できます。
(1)LINE側作業
LINE Developersにログインします。LINEアカウントがあればログインできます
https://developers.line.biz/ja/
プロバイダーの「作成」ボタンを押下
プロバイダー名を入力。
※プロバイダー名はLINEのやりとり上に表示されません。
チャネルを追加します。
LINEのメッセージを送信したいのでMessageingAPIを選択
新規チャネルの内容を入力
チャネル名はLINEで友達追加される相手に見える名称になるので、その想定でつけてください。
チャネルが作成できたら「MessageingAPI設定」をクリックし
下のほうにあるChannel access tokenで「issue」をクリック
以下のようなトークンが発行されます。
※このトークンは後で使用するのでコピーして残しておいてください。
後ほどでてくるプログラムの①で使用します。
(2)スプレッドシート作成
googleのアカウントを事前に作成しておき、ドライブにアクセスします
https://drive.google.com/drive/my-drive?hl=ja
以下の「新規」をクリックし
Googleスプレッドシートを選択
ファイルが作成されるので
「無題のスプレッドシート」をクリックして名称は何かわかりやすい名称に変更してください。
内容は以下を参考に自分にあった内容を記入してください。
画像だと見ずらい場合、以下を右クリックして保存してください。
・A列はLINEで受け取ったメッセージと一致する内容を記載
・B列は返信するメッセージの形式「選択」「メッセージ」どちらかを記載
・C列は返信するメッセージ内容を記載
・D列~H列は「選択」形式の選択内容を記載
受け取ったメッセージで一致する内容がA列に存在しない場合は一番上の2行目の内容を返信します。
「あ」とメッセージしたら該当するメッセージが存在しないため、以下のようになります。
スプレッドシートのURL以下/id/から/editまでのスプレッドIDは後でプログラムで使用するのでコピーしておいてください。後ほどでてくるプログラムの②で使用します。
(3)GASでプログラム作成
スプレッドシートの「拡張機能」から「AppsScript」を選択
以下のような画面が表示されるのでプログラムを記入します
プログラムは以下です。
GASのコードに以下を張り付けてください。
①と②の部分は自分で作成したコピーしておいたものを使用してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
//★★LINE Messaging APIのチャネルアクセストークン★★ var LINE_ACCESS_TOKEN = "①xxxxxここにLINE Developersで作成したトークンを張り付けてください"; //★★スプレッドシートID★★ var ss = SpreadsheetApp.openById("②xxxxここにスプレッドシートIDを張り付けてください"); //★★送信用シート名★★ var sh_send = ss.getSheetByName("質疑応答"); //////////////////////////////////////////////////////// //LINE Messaging APIからPOST送信を受けたときに起動する //////////////////////////////////////////////////////// function doPost(e){ console.log("開始"); if (typeof e === "undefined"){ console.log("undefined"); //動作を終了する return; } else { console.log("JSON開始"); //jsonに格納する var jsonData = JSON.parse(e.postData.contents); //json解析 jsonAnalysis(jsonData); } } //////////////////////////////////////////////////////// //json解析 //////////////////////////////////////////////////////// function jsonAnalysis(data) { console.log("jsonAnalysis"); //受信したメッセージ情報を変数に格納する var replyToken = data.events[0].replyToken; var messageText = data.events[0].message.text; var userId = data.events[0].source.userId; console.log("トークン"); console.log(replyToken); console.log("受信テキスト"); console.log(messageText); console.log("userId"); console.log(userId); //応答メッセージ作成 var replyMessageArray = createMessage(messageText); //メッセージ送信 sendMessage(replyToken,userId,replyMessageArray); } //////////////////////////////////////////////////////// //応答メッセージ作成 //////////////////////////////////////////////////////// function createMessage(messageText) { console.log("createMessage"); //messageText = "テスト" //シートの最終行を取得する var lastRow = sh_send.getLastRow(); var textRow = 0; //シートの語句を配列で取得する(2行目の1列から最終行の7列目まで取得) var wordList = sh_send.getRange(2,1,lastRow,7).getValues(); console.log(wordList); //受信した語句と一致する行を取得 for(var i = 1; i < wordList.length; i++) { console.log(wordList[i][0]); if(wordList[i][0] == messageText) { console.log("一致テキスト:" & wordList[i][0]); textRow = i; } } var messageArray = []; //スプレッドシート2列目が「選択」の場合は選択形式、以外はメッセージ形式 console.log(wordList[textRow][1]); if(wordList[textRow][1] == "選択") { //選択形式 //選択形式メッセージ配列作成 messageArray = createSelectMessageArray(wordList,textRow); }else{ //メッセージ形式 //メッセージ配列作成 messageArray = createMessageArray(wordList,textRow); } console.log("messageArrayの内容"); console.log(messageArray); return messageArray; } //////////////////////////////////////////////////////// //選択形式メッセージ配列作成 //////////////////////////////////////////////////////// function createSelectMessageArray(wordList,textRow) { console.log("createSelectMessageArray"); var selectMessageArray = wordList[textRow]; console.log(selectMessageArray); //返信メッセージ //スプレッドシート3列目が選択形式の質問文章 var selectMessage = selectMessageArray[2]; console.log("selectMessage" & selectMessage); var lineMessageArray = []; //選択メッセージを作成 //スプレッドシート4列目以降が選択形式の回答文章 for(var i = 3; i < selectMessageArray.length; i++) { if(selectMessageArray[i] != ""){ //空白以外の場合、配列に格納する console.log(selectMessageArray[i]); lineMessageArray.push( { "type": "message", "label": selectMessageArray[i], "text": selectMessageArray[i] } ); } } //JSON変換 var lineMessageJsonString = JSON.stringify(lineMessageArray); var lineMessageJson = JSON.parse(lineMessageJsonString); console.log("lineMessageJson"); console.log(lineMessageJson); //LINE用メッセージ作成 var messageArray = []; messageArray = [ { "type": "template", "altText": "message", "template": { "type": "buttons", "title": "選択してください", "text": selectMessage, "actions": lineMessageJson } } ]; return messageArray; } //////////////////////////////////////////////////////// //メッセージ配列作成 //////////////////////////////////////////////////////// function createMessageArray(wordList,textRow) { console.log("createMessageArray"); var messageArray = []; //スプレッドシートからテキストを取得してLINE用メッセージ作成(スプレッドシート該当行の3列目から取得) messageArray.push({"type": "text", "text": wordList[textRow][2]}); return messageArray; } //////////////////////////////////////////////////////// //LINEメッセージ送信 //////////////////////////////////////////////////////// function sendMessage(replyToken,userId,replyMessageArray) { //返信先URL var replyUrl = "https://api.line.me/v2/bot/message/reply"; var headers = { "Content-Type": "application/json; charset=UTF-8", "Authorization": "Bearer " + LINE_ACCESS_TOKEN, }; var postData = { "to": userId, "replyToken": replyToken, "messages": replyMessageArray }; var options = { "method" : "post", "headers" : headers, "payload" : JSON.stringify(postData) }; //LINE Messaging APIにデータを送信する console.log("LINE送信"); UrlFetchApp.fetch(replyUrl, options); } |
コードを変更したら毎回以下のようにプロジェクトを保存を押下してプログラムを保存してください。
保存した後はLINE側で使用できるように以下の「新しいデプロイ」をクリック
アクセスの承認を行う
許可してください
下側URLのほうをコピーしておいてください。
後ほどLINE設定の③で使用します
プログラムを変更した場合は、毎回保存からデプロイまで行う必要があります。
(4)LINE側設定
LINE DevelopersのMessagingAPI設定をクリック
下にさがっていくとWebhookURLがあるのでここにGASでデプロイした値を張り付けます。
※この張り付けはデプロイするたびに行う必要があります
Webhookの利用もオンに変更してください
上のほうにスクロールし、「チャネル基本設定」をクリックし、
さらに「LINE Official Account Manager」をクリック
左側「応答設定」をクリックし応答モードをbot、あいさつメッセージをオフにします。
※あいさつメッセージは友達登録されたときにメッセージされる内容であるため、
オンのままで「あいさつメッセージ設定」を正しく入力するのもよいかと思います。
応答メッセージはオフ
※プログラムで応答するため、ここがオンだと余計なメッセージが送信されます。
プログラムを使用するのでWebhookはオンにしてください。
LINE DevelopersのMessagingAPI設定から下にさがっていくと
以下のようなQRコードがあるため、このQRコードからLINEで友達追加し何かメッセージを送信してください。
以下のように表示されると成功です。
LINEの応答メッセージ設定にはAI応答メッセージがあるため、単純な応答であればプログラムは必要ありませんが、今回のようにプログラムにしておけば、さらに改良を行いメッセージのやりとりを残していくようにしたり、いろいろできると思います。
メッセージのやり取り記録を追加しました。こちら「LINEとGASでつくる無料ヘルプデスクbot(メッセージ記録追加)」も見てもらえればと思います。