見出し画像

LineとChatGPTを連携するGASコード

// 外部APIのアクセスキーを、可読性の高い変数名に変更
const LINE_ACCESS_TOKEN = 'ここに、Lineのアクセストークンを入れます';
const OPENAI_APIKEY = "ここに、OpenAI の API シークレットキーを入れます";

// POSTリクエストが送信された時に実行される関数
function doPost(e) {
  // POSTリクエストからイベント情報を取得する
  const event = JSON.parse(e.postData.contents).events[0];

  // LINEの返信先のトークンを取得する
  const replyToken = event.replyToken;
  // ユーザーからのメッセージを取得する
  let userMessage = event.message.text;
  const url = 'https://api.line.me/v2/bot/message/reply';

  // メッセージ以外(スタンプや画像など)が送信された場合は、不明なメッセージとして処理する
  if (userMessage === undefined) {
    // メッセージ以外(スタンプや画像など)が送られてきた場合
    userMessage = '???';
  }

  // OpenAIに送信する文章を生成する
  const prompt = userMessage;
  // OpenAIのAPIに送信するリクエストを作成する
  const requestOptions = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer "+ OPENAI_APIKEY
    },
    "payload": JSON.stringify({
      "model": "gpt-3.5-turbo",
      "messages": [
         {"role": "user", "content": prompt}]
    })
  }
  // OpenAIのAPIにリクエストを送信し、結果を取得する
  const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);

  // OpenAIのAPIからのレスポンスを取得する
  const responseText = response.getContentText();
  // レスポンスからテキストを取得する
  const json = JSON.parse(responseText);
  const text = json['choices'][0]['message']['content'].trim();

  // LINEに返信するリクエストを作成する
  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': text,
      }]
    })
  });
}

この記事が気に入ったらサポートをしてみませんか?