LINE BotでChatGPTと会話する
概要
この記事ではGoogle Apps Script(以下GAS)を用いてChatGPTとLINE Botを繋げる記事です。
それぞれのAPIの設定方法を解説をします。この記事ではソースコードの中身までは詳しく触れません。ですので、ソースコードの詳しい解説が知りたい場合にはLINE BotでChatGPTと会話する(ソースコード編)を確認してください。
シーケンス図で書くと下記のようなものです。
Google Apps Script(GAS)のセットアップ
GASのセットアップを行ってきます。今回はこのGASを中心にOpenAIやChatGPTのAPIを叩いていきます。[1]
Googleスプレッドシートにアクセスしてスプレッドシートを作ります。
ツールからApps Scriptを選択して、クリックしましょう。
このような画面になったらセットアップは完了です。
OpenAIのセットアップ
OpenAIのセットアップを行っていきます。GASとOpenAIを繋げるために、OpenaAIからAPIキーを受け取ってGAS側にAPIキーとして設定します。
OpenAIのwebサイトにアクセスします。[2]
『Create Access Key』をクリックして新しいアクセスキーを発行します。
基本的にはデフォルトの設定のままです。
発行したAPIキーをコピーしましょう。
GASにコピーしたAPIキーを貼り付けましょう。
LINEのセットアップ
LINE APIの設定を行っていきます。GASとLINEを繋げるために、LINEのWebhookにGASのURLを設定したり、LINEのチャンネルアクセストークンをGASに設定していきます。
プロバイダーのセットアップ
LINE Developers にアクセスします。[3]
プロバイダーを作成しましょう。プロバイダーというのはLINEのAPIを使うときの一つの塊のようなものです。
プロバイダーに任意の名前をつけて作成します。
『Messaging API』をクリックします。
適当にフォームの内容を入力して『作成』をクリックします。
同意して進めます。
下記のような画面が出れば作成成功です。
『Messaging API 設定』をクリックしましょう。
LINEがインストールされたスマートフォンでQRコードを読み取りましょう。友達追加ができます。
Webhookの設定
『新しいデプロイ』を選択
『Webアプリ』を選択
『アクセスを許可』を『全員』に変更してデプロイしましょう。
URLがコピーしましょう
LINE APIのWebhook URLを編集して、URLをコピーして『更新』を押しましょう。
検証を押して『成功』と出たら成功です。
Webhookの利用をオンしましょう。
『あいさつメッセージ』と『応答メッセージ』の無効化
『編集』をクリックします。
『あいさつメッセージ』と『応答メッセージ』を無効にします。
チェンネルアクセストークンの設定
チャンネルアクセストークンをコピーしましょう
『LINE_CHANNEL_ACCESS_TOKEN』をプロパティとして追加して先ほどのチャンネルアクセストークンをペーストしましょう。
ソースコードを書いてデプロイ
今回のソースコードです。ソースコードの詳細はLINE BotでChatGPTと会話する(ソースコード編)を参照してください。
const LINE_CHANNEL_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_CHANNEL_ACCESS_TOKEN');
const OPENAI_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('OPENAI_ACCESS_TOKEN');
const LINE_ENDPOINT = 'https://api.line.me/v2/bot/message/reply';
const OPENAI_API_URL = 'https://api.openai.com/v1/chat/completions';
// LINEからのPOSTリクエストを処理
function doPost(e) {
try {
const json = JSON.parse(e.postData.contents);
const replyToken = json.events[0].replyToken;
const userMessage = json.events[0].message.text;
if (typeof replyToken === 'undefined') {
throw new Error('Reply token is undefined');
}
const replyMessage = getChatGptResponse(userMessage);
sendLineReply(replyToken, replyMessage);
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
Logger.log('Error in doPost: ' + error.message);
return ContentService.createTextOutput(JSON.stringify({'content': 'error'})).setMimeType(ContentService.MimeType.JSON);
}
}
// OpenAIのChatGPTにメッセージを送信し、応答を取得
function getChatGptResponse(message) {
const messages = [{'role': 'user', 'content': message}];
const headers = {
'Authorization': 'Bearer ' + OPENAI_ACCESS_TOKEN,
'Content-type': 'application/json'
};
const options = {
'muteHttpExceptions': true,
'headers': headers,
'method': 'POST',
'payload': JSON.stringify({
'model': 'gpt-3.5-turbo',
'max_tokens': 2048,
'temperature': 0.9,
'messages': messages
})
};
try {
const response = UrlFetchApp.fetch(OPENAI_API_URL, options);
const jsonResponse = JSON.parse(response.getContentText());
return jsonResponse.choices[0].message.content;
} catch (error) {
Logger.log('Error in getChatGptResponse: ' + error.message);
return 'Sorry, I couldn\'t process your request.';
}
}
// LINEにメッセージを返信
function sendLineReply(replyToken, message) {
const payload = {
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': message
}]
};
const headers = {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN
};
const options = {
'method': 'POST',
'headers': headers,
'payload': JSON.stringify(payload)
};
try {
UrlFetchApp.fetch(LINE_ENDPOINT, options);
} catch (error) {
Logger.log('Error in sendLineReply: ' + error.message);
}
}
ソースコードをコピーアンドペーストしてデプロイします。
デプロイを管理をクリックします。
『新しいバージョン』としてデプロイします。
『アクセスを承認』というボタンが出てくるのでボタンをクリックして、Googleアカウントでログインしていきます。
途中で下記のような画面が出ると思いますが進めていきます。
このような画面になったらデプロイ完了です。
動作検証
このように動作したら完成です!!
Discussion