見出し画像

GPT-4より優秀なClaude APIで LINEbotをGAS (Google Apps Script) で作る方法

話題のClaude3にもAPIがあったので、LINEボットを作ってみました! 誰でも簡単に無料で(しかもクレジットカード登録なしで)作れると思います。
ぜひ挑戦してみてください!

◆ 作成したLINEボット

「Claude3くん」というのを作成したので、友だち登録して何か送ってみてください。

※無料で使える5ドル分を使い切ったら動かなくなると思います。悪しからず。

◆ プログラム

// LINE developersのメッセージ送受信設定に記載のアクセストークン
const LINE_TOKEN = ''; // Messaging API設定の一番下で発行できるLINE Botのアクセストークン(Channel Secretはいらないみたいです。)
const LINE_URL = 'https://api.line.me/v2/bot/message/reply';

//postリクエストを受取ったときに発火する関数
function doPost(e) {
  
  // 応答用Tokenを取得
  const replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
  // メッセージを取得
  const userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  // クロードの返答を取得
  const claudeMessage = callClaude(userMessage);
  
  // 返答用メッセージを作成
  // スタンプのリスト -> https://developers.line.biz/en/docs/messaging-api/sticker-list/
  const messages = []
  
  // ***************************
  // スプレットシートからデータを抽出
  // ***************************
  // 1. 今開いている(紐付いている)スプレッドシートを定義
  const sheet     = SpreadsheetApp.getActiveSpreadsheet();
  // 2. ここでは、デフォルトの「シート1」の名前が書かれているシートを呼び出し
  const listSheet = sheet.getSheetByName("シート1");
  
  // ***************************
  // スプレッドシートにデータを入力
  // ***************************
  // 最終列にデータを新しく入力
  listSheet.appendRow([userMessage, claudeMessage])
  
  // 返答用メッセージを追加
  const after_msg = {
    'type': 'text',
    'text': claudeMessage,
  }
  messages.push(after_msg);
  
  // lineで返答する
  UrlFetchApp.fetch(LINE_URL, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': `Bearer ${LINE_TOKEN}`,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': messages,
    }),
  });
  
  ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
  
}

function callClaude(message) {
  const apiKey = '';
  const model = 'claude-3-opus-20240229';
  const maxTokens = 1024;
  const messages = [{ role: 'user', content: message }];
  
  const url = 'https://api.anthropic.com/v1/messages';
  const payload = {
    model: model,
    max_tokens: maxTokens,
    messages: messages,
  };
  
  const options = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': apiKey,
      'anthropic-version': '2023-06-01',
    },
    payload: JSON.stringify(payload),
  };
  
  try {
    const response = UrlFetchApp.fetch(url, options);
    const responseText = response.getContentText();
    const json = JSON.parse(responseText);
    console.log(json);
    console.log(json.content[0].text)
    return json.content[0].text;
  } catch (error) {
    console.log('Error:', error);
    return error;
  }
  
}

◆ 参考資料

◆ Claude 公式チャットページ

◆ Claude3 API 発行ページ

◆ Claudeのモデルの概要

プログラム内で使用しているモデルは「claude-3-opus-20240229」です。

◆ LINE Developers

◆ PR(Udemy 講座)

◆ YouTube チャンネル登録

この記事が参加している募集

仕事について話そう

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