こんにちは、うぃむです。
さて、2025年3月31日をもって、「LINE Notify」のサービスが終了します。
個人的に「LINE Notify」を使っていました(ロドストの更新をお知らせするBOTを作ってみました #FF14)。今回は、この機能を「LINE公式アカウント」の「Messaging API」に置き換えてみました。
さらに、生成AI(Gemini)も組み込むことで、よりユーモラスなやり取りができるようにしてみました。
作成したLINE公式アカウント
LINE公式アカウント - Messaging API (Google Apps Script)
「Messaging API」を使い、Google Apps Script で以下の関数を作成しました。
> sendLINEOAMessasge( 送りたいメッセージ )
作成したGASのコード
const LINE_ACCESS_TOKEN = [チャネルアクセストークン(長期)]を設定;
/**
 * LINE公式アカウント 送信
 */
function sendLINEOAMessasge( message ) {
  
  // 最大500文字    
  const messageSize = 500;
  // 500文字を超える場合は、分割して出力
  for ( let i =0; i < message.length; i += messageSize ) {
  
    try {
      UrlFetchApp.fetch("https://api.line.me/v2/bot/message/broadcast", {
        'headers': {
          'Content-Type': 'application/json; charset=UTF-8',
          'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
        },
        'method': 'post',
        'payload': JSON.stringify({
          'messages': [{
            'type': 'text',
            'text': message.substring(i, i+messageSize)            
          }]
        })
      });
    } catch (error) {
      Logger.log("エラー発生: " + error.toString());
    }
    Utilities.sleep(1000); // 1秒 待つ
  }
}
生成AI(Gemini 2.0 Flash Lite)
ついでに、生成AIも活用できるようにしました。
例> requestGemini( 送信文章, "あなたはモーグリです。語尾にクポが付きます。" )
作成したGASのコード
const GEMINI_APIKEY = [GEMINI_APIKEY]を設定;
/**
 * Gemini 
 */
function requestGemini( userMessage, role ) {
  try {
    // Gemini 電文
    const requestOptions = {
      "headers": {
        "Content-Type": "application/json"
      },
      "method": "post",
      "payload": JSON.stringify({
        "contents": [ 
          ...(role ? [
            { "role": "model", "parts": [{ "text": role }] }] : []
          ),
          { "role": "user",
            "parts": [{ "text": userMessage }]  
          }
        ]
      })
    };
    // Gemini へ要求
    const response = UrlFetchApp.fetch("https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-lite-preview-02-05:generateContent?key=" + GEMINI_APIKEY, requestOptions);
    
    const json = JSON.parse( response.getContentText() );    
    // 応答メッセージ
    return json.candidates[0].content.parts[0].text;
  } catch (error) {
    Logger.log("エラー発生: " + error.toString());
    return "エラー発生: " + error.toString();
  }
}
実装の流れ
簡単に上記をテストしたい場合は、こんな感じのコードでできます。
/**
 * テスト
 */
function test() {
   sendLINEOAMessasge(
     requestGemini(
        "テスト、テスト、テストのメッセージです。"
      , "あなたはモーグリです。語尾には、クポが付きます。次の文章を簡潔・簡単な気の利いた言葉を添えてツイートしてください。"
     )
   );
}
現在、X(旧Twitter)で発信しているメッセージを、以下のような流れでLINE公式アカウントへ配信しています。
- 発信するメッセージを取得
 - 生成AI(Gemini)で加工
 - LINE公式アカウントで発信
 
実際に試験運用をしているので、興味のある方はぜひ試してみてください。
LINE公式アカウント:  モグミニ (非公式) ( ID:  @863cgqjm )  (未認証)
※LINE公式アカウントから  @863cgqjm  を検索してもらえれば見つかるでしょうか?
それでは、また!
0 件のコメント:
コメントを投稿