🀖

🔰(新IDE察応版)オりム返しをするLINEBotをGASのWeb゚ディタで最小限に䜜る

2022/01/27に公開

想定読者

  • 受講生の方
  • い぀も「LINEBot オりム返し」で怜玢する私
  • GetあるいはPostしたデヌタをデバッグする方法を探しおいる方

やるこず

いきなり運甚レベルの話をするずこんがらがるので、

  1. LINEからメッセヌゞを送るためにMessagingAPIを䜿えるBOTアカりントを䜜る
  2. MessagingAPIを䜿う蚭定にしお「チャネルアクセストヌクン」を䜜成する
  3. GASのプロゞェクトを䜜る
  4. GASの゜ヌスコヌドに䞊蚘MessagingAPIで䜜成したチャネルアクセストヌクンを指定する
  5. GASのプロゞェクトをデプロむする
  6. GASのWebアプリURL(https://script.google.com/macros/s/ここに適圓なID/exec)をLINEBotのWebhookURLに蚭定する

に絞っおやりたす。

埌で探し盎すものたずめ

LINE Developerの甚語

甚語 意蚳、たたはむメヌゞ
プロバむダヌ ディレクトリのようなもの。Botをあたり䜜らないならなるべくたずめおしたった方が芋通しが良い個人差あり
チャネル プロバむダヌがディレクトリならファむルのようなもの。実態はLINEアカりントのようなもの。

URL

抂芁 アドレス 䜜り方
LINEBotアカりントを䜜る https://developers.line.biz/console LINE Developers。新しいチャネルはここで䜜る。たた、ログむンはLINEアカりントを䜿う
LINEのMessagingAPI蚭定 https://developers.line.biz/console/channel/チャネルID/messaging-api チャネルアクセストヌクンを発行したり、WebhookURLを蚭定する
LINEBotのグルヌプ蚭定 https://manager.line.biz/account/(BOTのアカりントID)/setting グルヌプに䜿えるようにする蚭定がある堎所
GASプロゞェクトの新芏䜜成 https://script.google.com/home Googleアカりントは䜜っおいる想定。ログむンできない堎合はパスワヌドを再発行したり、アカりントを䜜り盎すかする。
(GAS)LINEBot WebhookURL https://script.google.com/macros/s/ここに適圓なID/exec GASプロゞェクトをデプロむする
Githubリポゞトリ https://github.com/shimajima-eiji/--GAS_v5_LINEdebug 今回䜿うリポゞトリのルヌト

泚意するべきは䞊蚘の通りです。
现かいのはそれぞれの章で曞いおいたす。

LINE偎の蚭定

  1. たずはLINE Developersにログむンしたしょう。
  2. 初めおの方はプロバむダヌを蚭定したしょう。
  3. https://developers.line.biz/console/ のプロバむダヌの近くに䜜成ボタンがありたす。色々蚀われるたたに蚭定したしょう。
  4. プロバむダヌに新しくチャネルを䜜成したす。既存のものに圱響があるので党員が䜜った方がいいです。
  5. 䜜ったチャネルのMessagingAPI蚭定 (https://developers.line.biz/console/channel/チャネルID/messaging-api) でチャネルアクセストヌクンを発行する
  6. WebhookURLは埌で蚭定するので、ペヌゞは閉じないこず

基本的にこれでいけたすが、プロバむダヌずチャネルの䜜成時に色々聞かれるので、あなたの状況に䞀番近いものを遞択しおおきたしょう。
執筆時点では、この䜜業でサブスクリプションが発生するこずはありたせん。

GASでやるこず

たずはプロゞェクトを䜜成する

https://script.google.com/home

で、新しいプロゞェクトを䜜成したしょう。
名前はなんでもいいので、分かりやすく管理できるようにしおおくのがおすすめです。

Google Driveで芋た時にルヌトディレクトリ以䞋に䜜成されおいるので、ごちゃごちゃしお芋づらいず思いたす。
埌で手動で配眮換えをしおおきたしょう。

https://drive.google.com/drive/my-drive

゜ヌスコヌドを䜜成

コピペでOKです。
䞀郚線集する必芁があるので、埌述しおおきたす。

https://github.com/shimajima-eiji/--GAS_v5_LINEdebug/blob/main/オりム返しBOTの解説コヌド.gs

ファむル名はコヌド.gsでいいんですが、関数名はmyfunction() → doPost(e)ずしおください。
この名前じゃないずPOSTされたデヌタを受け取れたせん。[1]

const TOKEN = "(ここは自分で入れる)"
const ENDPOINT_TARGET = "push"  // トヌクはreply, グルヌプはpush
// GASでデバッグする堎合はグルヌプのみトヌクのリプラむトヌクンが䜿えないため

このTOKENずは、LINEBOTのチャネルアクセストヌクンのこずです。
ENDPOINT_TARGETには、トヌクずグルヌプで送信先が異なるため、手動察応が必芁です。
GASでデバッグしやすいのはグルヌプなので初期倀はpushにしおたすが、トヌクを䜿いたい堎合はreplyにしおデプロむしおください。

GASのプロゞェクトをデプロむ

デプロむに眠がありたす。
新しいWebIDEの話をしたすが、新しいデプロむを䜜るたびに新しいWebhookURLが発行されたす。
なので、やり方を間違えるずデプロむをするたびに埌述のLINEBotのWebhookURLを曞き換える必芁が出おきたす。

泚意する点だけピックアップしたす。

  1. 新しいデプロむを䜜成
  2. 次のナヌザヌずしお実行「自分」
  3. アクセスできるナヌザヌ「党員」
  4. デプロむを䜜り盎す堎合
  5. デプロむの管理を開く
  6. 線集ペンのアむコンを抌䞋
  7. バヌゞョンを「新バヌゞョン」に倉曎する。これを忘れるず䜕も曎新されおいない事になる。

よくわからない堎合は、デプロむするたびに埌述のLINEBotのWebhookURLを曞き換えるずいうルヌルを培底すればOKです。

LINEBotずGASを連携する

LINE Developers(https://developers.line.biz/console/channel/チャネルID/messaging-api)に戻っお、GASのWebアプリURL(https://script.google.com/macros/s/ここに適圓なID/exec)をLINEBotのWebhookURLに蚭定したす。
「曎新」ボタンを抌した埌に「怜蚌」ボタンを抌すず、接続先が正しいか確認できたす。

ここたでできたら、友達远加のQRコヌドをLINEで読み取っおメッセヌゞを投げたり、グルヌプを䜜ったりするず色々できたす。
GASで蚭定したENDPOINTがreplyかpushかは確認しおおきたしょう。よく忘れるので、心配なら䞡方にメッセヌゞを投げるず良いです。

がやき

この内容ぐらいならNode-RED(enebler)を䜿えばノヌコヌドで同じこずができるんじゃないかず思っおたす。
他のこずで䜿いたいので、いったんGASで䜜る方法をたずめおおきたした。

ずいうこずで、ここたで出来たら受講生の方は次の発展課題ぞ進んでみたしょう。
元リポゞトリではどうやっお運甚しおいるのか、完成したコヌドず比范しおみるのも良いです。


発展デバッガの改善案

そもそもこの蚘事の方法は「通信がうたくいっおいる堎合」に有効なので、うたく行っおいない堎合は恐ろしくデバッグしにくいです。
開発しやすくなるようにずいう蚳ではないんですが、ロヌカルでも開発できるclaspがあるんですが、環境構築の手間があるので䜿いたくない事もある事を想定しおいたす。

さお、そうなるずGASのデバッガではなく、GET/POST(curlコマンドずか)のprintデバッグの方法も考える必芁がありたす。
぀たり、doPostスプレッドシヌトに曞き蟌んでいく方法です。
以䞋、圓該コヌド。

https://github.com/shimajima-eiji/--GAS_v5_LINEdebug/blob/main/出力関連.gs

function output_sheet(value = {}){
  const SSID = property("SSID").value;
  const SSNAME = property("SSNAME").value;
  const SHEET = SpreadsheetApp.openById(SSID).getSheetByName(SSNAME);

  message = "[Skip] Not found [Spread-Sheet ID] or [Spread-Sheet Name] or [value(json)].";
  if (SHEET != null) {
    SHEET.appendRow([new Date(), JSON.stringify(value)]);
    message = "[COMPLETE]add data";
  }

  Logger.log("output.gs/output_sheet: " + message);
  return message;
}

output_sheet(JSON圢匏)で実行するず、スプレッドシヌトに曞き蟌んでいくものです。
ここで枡すべき匕数こそdoPost(e)のeです。
propertyは独自関数なんで恐瞮ですが、スプレッドシヌトのIDずシヌト名を栌玍しおいるものず眮き換えおください。
SHEET.appendRow([デヌタ])で倀を栌玍しおいたす。JSON.stringfyで文字列にしないず登録されるデヌタが[Object, Object]になっおしたいたす。
泚意すべきポむントは、eの䞭にJSONデヌタになる文字列があり、これをJSON.parseでデヌタずしお䜿えるようにしおいく必芁がある点です。

こういったデヌタの内容を掗い出すためにも、デバッガは重芁です。

参考

正盎、GAS(WebIDE)はデバッグ胜力がほがれロなので、ちゃんずデバッグをするならロヌカルでclasp入れお䜜った方がいいです。
nodeぞの理解ずノりハりが必芁ですが、理解するず倧䜓のnode開発に掻かせるので孊ぶ䟡倀は高いず思いたす。

今回はGASのWebIDEに固執したした。
ツヌルも自身でうたく䜿えればそれなりの環境は敎備できたす。
が、慣れないうちは無理せず䜿える機胜を掻甚しおいく事を考えたしょう。

あなたにずっお、この蚘事がお圹に立おたなら、💓いいねをいただけるず私はずおも嬉しいです。

脚泚
  1. 【GETずPOST】ここでは詳しく解説したせんが、Webでデヌタをやり取りする方法です。LINEからデヌタを受け取るためPOSTを䜿いたす。 ↩

GitHubで線集を提案

Discussion