本ページでは、AIがLINEメッセージに自動で返信してくれるLINEボットの開発方法を説明しています。
動いている様子を先に見たい人は以下からLINE友達登録して簡単な質問をしてみてください。
「趣味は?」などの世間話でも結構です。
動作確認用LINEボット(是非登録して質問を送ってみて下さい)

LINEボット開発で使用するツールは以下の4つです。
- LINE公式(https://www.lycbiz.com/jp/)
- LINE Developers(https://developers.line.biz/ja/)
- GAS(Google Apps Script) (https://script.google.com/ )
- ChatGPT (https://chatgpt.com/)
アカウントをお持ちでない方は、上記リンクからそれぞれアカウント登録もできるので、登録してから進めてください。
また、手順でわからない点などがあれば、ぜひChatGPTに質問して解決策を聞いてみてください。
動画はこちら(LINE公式の作成〜アクセストークンの取得まで)
後編(AIプログラム作成)
目次
手順1.LINE公式を作成
LINE公式は、通常のLINEと違い一人で複数のアカウントを登録することができます。 主にビジネス利用を目的として用意されたLINEのサービスの1つです。 以下の手順で、LINEボット用のLINE公式アカウントを作成してください。
- LINE Official Account Manager(https://www.lycbiz.com/jp)にアクセスしてログインしてください。
- ログイン後、コンソール画面から「アカウント作成」または「新規作成」ボタンをクリックします。
- アカウント名、アイコン、業種、説明文などの必要情報を入力し、公式アカウントを作成します。 各種プロフィール項目で入力内容に悩む箇所があれば、ChatGPTに聞いてみましょう。 ChatGPTに「ビジネス用のLINEのアカウント名を考えて」 のように質問したら候補を出してくれますよ。
- 作成完了後、管理画面でアカウントの情報や友だち追加用のQRコードなどが確認できます。
アカウント認証のリクエストは後日必要に応じてリクエストしてみてください。
以下のような画面が表示されたらOKです。

手順2.Messaging APIチャネルの作成
LINE公式アカウントを作成したら、画面右上にある設定ボタンをおして、Messaging APIのページからMessaging APIを有効にして、プロバイダーの登録を済ませましょう。

プロバイダー名は何でも構いません、作成したLINE公式アカウント名と同じでもいいでしょう。

プロバイダを登録したら、LINE Developersコンソールから「チャネルアクセストークンの発行」をしていきます。
手順3.チャネルアクセストークンの取得
- LINE Developers(https://developers.line.biz/ja/)にアクセスしてログインしてください。
- 作成したチャネルの設定画面に移動し、【Messaging API設定】タブの下にある「チャネルアクセストークン」で「発行」ボタンをクリックし、生成されたアクセストークンをコピーしておきましょう。
チェック項目
- LINE公式アカウントを作成
- Messaging APIを有効にする
- LINE Developersの画面からアクセストークンをコピーしておく
手順4.Google Apps Script(GAS)にプロジェクト作成

ブラウザで https://script.google.com/homeにアクセスし、Googleアカウントでログインします。 「新規プロジェクト」をクリックして、新しいスクリプトプロジェクトを作成しましょう。
プロジェクトを作成するとコード.gsというサンプルファイルができているはずです。
このファイルを改良、編集してプログラムを完成させます。
コード.jsの編集画面。右側の編集領域がプログラムを記述する部分。

手順5.自動応答プログラムの開発(AI)
AIプログラムを動作させるためには、Open AIのAPIキーが必要です。 ChatGPTの有料プランを契約している方でも、別途料金がかかりますが、非常に低コストで運用できます。
問い合わせ内容などにもよって前後はしますが、300文字程度のメッセージ送信で1円以下です。 あくまでも目安ですが、1000回メッセージを発信した場合のモデルごとの料金を並べておきます。
1ドル=140円換算で計算しています。
| モデル | 1リクエスト($) | 1,000リクエスト($) | 約日本円(¥) |
|---|---|---|---|
| GPT-4(標準) | $0.015 | $15.00 | 約 ¥2,100 |
| GPT-4 Turbo | $0.007 | $7.00 | 約 ¥980 |
| GPT-4o mini | $0.000135 | $0.135 | 約 ¥19 |
GPT-4o miniモデルでは、1000回やり取りしても20円程度の料金ですから、非常に低コストです。 以下のページにAPIキーの取得方法をまとめていますので、こちらからご自身のAPIキーを発行してください。
本来は一番難しい、自動応答プログラム自体はAIに開発してもらいます。
以下のプロンプトをChat GPTに貼り付けてプログラムを開発させてください。
※ コード内の「OpenAIのAPIキー」と「ここにあなたのLINEのトークンをコピペ」をご自身のコードに書き換えた上で、ChatGPTにコピーしてください。
Google Apps ScriptとLINE公式を連携して、私の代わりにLINEで受信したメッセージをOpen AIのAPIを利用して自動返信するGASコードを記述してください。
私のOpenAIのAPIキーとLINEのアクセストークンは以下です。
プログラムを修正しやすいように、各種設定は冒頭にまとめてください。
また、追加命令を複数行で柔軟に変更できるように``で括った状態で冒頭にまとめてほしいです。
練習用なので、開発のしやすさを考えてAPIキーやトークンなどはコードに直書きでお願いします。
リクエストのエンドポイントとして
https://api.openai.com/v1/chat/completions
を利用してMMLはgpt-4o-miniを指定してください
#Open AIのAPIキー
ここにあなたのAPIキーをコピペ
#LINEのアクセストークン
ここにあなたのLINEのトークンをコピペ
#APIに渡す追加命令
あなたは私の代わりに質問に答える優秀な私のクローンAIです。
作成されたコードをGASに貼り付けてください。
コードを保存したら、GASのデプロイボタンから、このプログラムを「ウェブアプリ」としてデプロイします。「アクセスできるユーザー」の欄は「全員」を設定してください。

✅ 初回デプロイ時のGoogle認証について(重要)
LINEボットをGAS(Google Apps Script)で動かすために、初回のデプロイ時にはGoogleから以下のようなセキュリティ警告画面が表示されることがあります。
これはGASがまだGoogleに「信頼されたアプリ」として登録されていないために表示されるものです。 「安全なページに戻る」を押してしまうと先に進めませんので、「詳細」→「(プロジェクト名)に移動」 をクリックして進めてください。
手順6.Webhook URLの設定
GASのデプロイが完了すると表示されるURLをLINE DevelopersのWebhook URLに設定してください。
LINE Developersの【Messaging API設定】タブにある「Webhook URL」に、コピーしたGASのURLを貼り付け、「更新」ボタンをクリックします。

続いて、応答設定も変更してください。「Webhookの利用」をオンに切り替えます。チャットも有効にしておくと便利です。
手順7.LINE公式の応答設定
LINE公式側で、ユーザーからのメッセージに対してGASが応答できるように設定を変更します。
画像を参考に、チャットとwebhookの設定を有効にしてください。

これで、LINEボットがあなたの代わりに自動で応答を開始します。
手順8.動作確認
最後に、作成したLINEボットが正しく動作するかを確認します。
- LINE Official Account Managerで表示されるQRコードをスマートフォンで読み取り、ボットを友だち追加します。
- トーク画面でメッセージを送信し、AIが自動で応答するかを確認します。
以上で、LINEボットの開発は完了です。
AIに機能を追加しよう
今作ったLINEボットは、ただAIが反応するだけで機能としては何もありません。
AIに追加命令を指示して、あなただけのオリジナルAIを作ってみましょう。
GASに設置したAIプログラムコードに
「あなたは私の代わりに質問に答える優秀な私のクローンAIです。」
のような一文があるはずです。
そこに、追加指示を設定することで、AIに個性を与えて行きましょう。
例えば以下のようにプロフィール情報を追加入力すれば、AIに人格を与えることができます。

プロフィールの埋め込みには以下のAI人格メーカーを使うと便利です。
自動相談窓口LINEの作り方
スプレッドシートなどに想定質問と回答をまとめて読み込ませることで、AIによる自動顧客サポートなども実現できます。
プロンプト例
const ADDITIONAL_INSTRUCTIONS = `
あなたは私の代わりに質問に答える優秀な私のクローンAIです。
以下のスプレッドシート情報を参考に、LINEボットの開発をサポートしてください。
https://docs.google.com/spreadsheets/d/1osCeP9dFyA2Bg5cMkXylHcwv5CyvrPHU7AsU8GM_upU/edit?gid=0#gid=0
`;

※ スプレッドシートの共有設定で、リンクを知っている人全員が閲覧可能な状態にしておいてください。
その他、例えば法律の知識(六法全書)などを埋め込めば、お手軽な顧問弁護士として活躍させることもできるし、占いや相性診断などのサービスも展開できます!
動かないときは?
ChatGPTのコード生成は非常に優秀ですが、それでも時には不十分なコードが生成されるケースもあります。
再度GPTにプロンプトを貼り付けて、コードを再生成させたりすることで解決する場合もあります。
GPTと対話して問題を解決するのが一番ですが、今回は上田が実際に動作するコードを用意しました。
安定動作のためにモデルはgpt-4を指定しています。
AI LINEボットプログラムコード
/***************************************
* 【設定項目】
***************************************/
var OPENAI_API_KEY = 'OPEN AIのAPIキーをコピペ';
var LINE_ACCESS_TOKEN = 'LINEのアクセストークンをコピペ';
var OPENAI_API_URL = 'https://api.openai.com/v1/chat/completions';
var LINE_REPLY_API_URL = 'https://api.line.me/v2/bot/message/reply';
// APIに渡す追加命令(システムプロンプト)
// バッククォートで括った複数行の自然文として設定しています。
var ADDITIONAL_INSTRUCTIONS = `
あなたは私の代わりに質問に答える優秀な私のクローンAIです。
私のプロフィールは以下です。
---プロフィールここから---
あなたのプロフィールをここにコピペしよう
---プロフィールここまで---
`;
/***************************************
* 【LINE webhook エントリポイント】
***************************************/
function doPost(e) {
try {
// LINEからのPOSTデータをJSONで取得
var data = JSON.parse(e.postData.contents);
if (!data.events || data.events.length === 0) {
return ContentService.createTextOutput(JSON.stringify({status: 'no events'}));
}
// 複数イベントがある場合は、最初のイベントのみ処理
var event = data.events[0];
var replyToken = event.replyToken;
var userMessage = event.message.text;
// OpenAI APIに問い合わせて回答を取得
var replyMessage = callOpenAI(userMessage);
// 取得した回答をLINEへ返信
replyToLine(replyToken, replyMessage);
return ContentService.createTextOutput(JSON.stringify({status: 'ok'}));
} catch (err) {
console.error(err);
return ContentService.createTextOutput(JSON.stringify({status: 'error', message: err}));
}
}
/***************************************
* 【OpenAI API 呼び出し】
***************************************/
function callOpenAI(userMessage) {
var payload = {
model: 'gpt-4',
messages: [
{ role: 'system', content: ADDITIONAL_INSTRUCTIONS },
{ role: 'user', content: userMessage }
]
};
var options = {
method: 'post',
contentType: 'application/json',
headers: {
'Authorization': 'Bearer ' + OPENAI_API_KEY
},
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(OPENAI_API_URL, options);
var responseData = JSON.parse(response.getContentText());
if (response.getResponseCode() === 200 && responseData.choices && responseData.choices.length > 0) {
return responseData.choices[0].message.content;
} else {
console.error('OpenAI API error:', responseData);
return 'エラーが発生しました。';
}
}
/***************************************
* 【LINE 返信送信】
***************************************/
function replyToLine(replyToken, message) {
var payload = {
replyToken: replyToken,
messages: [
{
type: 'text',
text: message
}
]
};
var options = {
method: 'post',
contentType: 'application/json',
headers: {
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN
},
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(LINE_REPLY_API_URL, options);
}

