基本的な仕組み

classroomの更新は、サーバーを通ってユーザーの端末(Edge)へ通知されます。

sequenceDiagram
    participant U as Edge
    participant S as Server
    participant C as Classroom

    C->>S: classroom更新の通知
    S->>U: 通知の送信
    

また、端末(Edge)への通知は、通常のアプリでの通知(Notification)だけではなく、メールもできます。

sequenceDiagram
    participant U as Edge
    participant S as Server
    participant C as Classroom

    C->>S: classroom更新の通知
    S->>U: Mailの送信
    

まとめると、

sequenceDiagram
    participant U as Edge
    participant S as Server
    participant M as Mail-Sever
    participant C as Classroom

    U->>C: classroom更新
    C->>M: classroom更新の通知
    C->>S: classroom更新の通知
    U->>S: fetch
    U->>M: fetch
    S->>U: 通知
    M->>U: 通知
    

データは、必ずEdgeへ向かいます。

APIを使用すると、以下の様になります。

sequenceDiagram
    participant U as Edge
    participant C as Classroom

    U->>C: fetch
    C->>U: HTTP response

しかし、今回ではAPIは、使えないため、Edge上での処理になります。

説明が長くなりましたが、おおまかな仕組みはこんな感じです。

sequenceDiagram
    participant L as Line
    participant U as Edge
    participant M as Mail-Server
    participant C as Classroom
    participant A as ChatGPT

    U->>C: classroom更新リクエスト
    C->>M: classroom更新の通知
    U->>M: fetch(通知受信)
    M->>U: 通知データ返却

    U->>U: データの解析(通知本文抽出)
    U->>U: データの整形(変数分離・準備)

    U->>U: Mail→HTML変換(URL専用処理①)
    U->>U: HTML→RTF変換(URL専用処理②)
    U->>U: RTFの解析(URL専用処理③)
    U->>U: 再整形(URL専用処理④)

    U->>U: プライバシー保護処理(ChatGPT向け整形)

    U->>A: 通信を確立
    U->>A: 要約プロンプトと処理を送信
    A->>U: 要約結果の応答

    U->>U: 応答の整形
    U->>L: 整形済みデータをLineに送信

<aside> <img src="/icons/emoji-angry_gray.svg" alt="/icons/emoji-angry_gray.svg" width="40px" />

セキュリティの問題で自動で実行できなかったから、Edgeのセキュリティ下げまくった…

因みに、セキュリティの問題でurlは取得できない…

他の方法を使ってます。

MailをHTMLに変換して、HTMLからRTFに変換します。

RTFでURLを抜き出して、項目を算出して、送信時にURLを整形してから送信しています。

</aside>