GASでLINEのbotを作る際の初心者あるあるエラー

雑記

TypeError: Cannot read properties of undefined (reading ‘postData’)

ChatGPT API×LINE botでチャットボットを作成する方法【Google Apps Script】
ChatGPT APIを使ってLINE botでChatGPTを利用する方法を解説します。GASのサンプルコードと詳しい手順を載せていますので初心者の方でも実践できる内容となっています。

上記ブログを参考にChatGPTをLINEで利用できる機能をGAS(Google Apps Script)で作ろうとをしたところ以下のエラーが出ました。

TypeError: Cannot read properties of undefined (reading 'postData')
doPost	@ コード.gs:13

エラー元のコードは以下。

const json = JSON.parse(e.postData.contents);

せっかくなのでchatGPTでエラーを聞いてみたところ解決せず。ここで逆にこじらせてしまった(ここまで自分でほぼコード読んでいない)

結論

GAS上で「実行」をしたときに出るエラーで、実装したら普通に動くので問題なし。

なんで?

まず大前提としてネット上にあるLINE返信botのコードは多くの場合「LINEで投稿されたタイミングで発動」するように書かれています。

const json = JSON.parse(e.postData.contents);

上記のエラー元のコードはLINE上で投稿された際の「投稿内容」に対する処理を行うコードなんですが、GAS上で「実行」だけしても肝心の投稿が存在しないので投稿内容が読み取れませんというエラーでした。

つまり上記のコードのままでも他のコードや設定が合っていれば、実装時には「投稿しさえすれば」問題なく動作します。

補足。毎回デプロイしよう

他に私がミスった個所は、GASのデプロイのし忘れ。またデプロイ後のURLをLINEのMessaging API設定に更新し忘れです。

コードを変えたら必ずデプロイしましょう。

デプロイしたらURLが新しくなるので、毎回Messaging APIに設定し直しましょう。

ChatGPTは過去の会話を記憶していますが、ChatGPTのAPI(GPT3.5)は会話の履歴を記憶しないのでとてもかわいいです。

記憶してほしい場合は以下のようにGAS上でその仕組みを書かなければいけません。実際には今までの会話の履歴をプロンプトに入れ込むという形式になるので、基本的にはトークンは増えます。

ChatGPT APIを使ったLINE botに記憶を持たせる - Qiita
書いてるうちにN番煎じなネタになった気がしないでもないけど投稿しちゃう 更新履歴 2023/3/11 バグ修正等に伴いソースコードに変更を加えました (コメントでご指摘いただいた@gemini66さん、ありがとうございました!) B...

反省

エラーの内容をChatGPTに聞いたところ「ああ、それね。ここが間違ってるよ」(実際には間違っていない)とか指摘されてから逆に難航したので、やはり万能ではありませんね。(まずは自分でコード読め)

タイトルとURLをコピーしました