2025/01/07

作ってみよう:#20)スマート名刺管理 - GTP4o API リクエストの作成 ④

これまでに完成した部分のテストを行います。

テストするために必要なエージェントなどの機能を追加します。テスト後も使用する機能となるので、作業をパスせず作成してください。


エージェントの作成

作成した関数をコールするエージェントを作成します。

名前 (ReadNameCard)
別名 ReadNameCard
トリガー イベント - エージェントリストの選択
対象 なし

Option Declare
Use "lsReadNameCard"

Private xns As NotesSession
Private xndb As NotesDatabase

Sub Initialize
   Dim nuiw As New NotesUIWorkspace
   Dim nuid As NotesUIDocument
   Dim nd As NotesDocument
   Dim sID As String

   Set xns = New NotesSession
   Set xndb = xns.CurrentDatabase

   'UI 文書を保存(リッチテキストを保存)
   Set nuid = nuiw.CurrentDocument
   Call nuid.Save()

   'ID 取得
   Set nd = nuid.Document
   sID = nd.Noteid

   'UI 文書を閉じる
   Set nd = Nothing '一旦文書開放
   Call nuid.Close(True)

   '保存した文書を再表示
   Set nd = xndb.GetDocumentByID(sID)

   'AI で名刺を読み込み
   Call ReadNameCard(nd)

   '名刺管理管理フィールドセット
   nd.ExchangeDate = Today
   nd.Status = "3"   '3 = AI 問い合わせ完了

   '文書の保存と画面の表示
   Call nd.Save(True, False)
   Set nuid = nuiw.Editdocument(True, nd)
End Sub

このエージェントでは、入力中の文書に貼り付けられた画像(リッチテキスト)をライブラリ内でバックエンド文書として確実に取得するため、UI からいったん保存して、UI を閉じたうえで、バックエンド文書を再取得しています。


名刺読込ボタン作成

名刺管理フォームを開き、[名刺読込]ボタンを追加します。

ボタン名 Click 補足
名刺読込 @Command([ToolsRunMacro];"(ReadNameCard)") 編集時と Status が 0 の時のみ表示
---
!(Status="0")


JSON 確認フィールドの追加

名刺管理フォームの管理者用セクションに JSON 確認用フィールドを作成します。

項目 フィールド名 種類 補足
認識した
名刺情報
JSON_NameCard リッチテキスト 編集可能
レスポンス JSON_Responce
リクエスト JSON_Request

ライブラリの調整

テスト実行のため送信する JSON を作成する部分だけ実行するように調整します。スクリプトライブラリを開き、現時点で完成していない部分をコメントアウトします。

Public Function ReadNameCard(vnd As NotesDocument) As Boolean
   Dim jnavRequest As NotesJSONNavigator
   Dim jnavResponce As NotesJSONNavigator
   Dim jnavNameCard As NotesJSONNavigator

   '1. API リクエスト時に送信する JSON を作成
   Set jnavRequest = xMakeRequest(vnd)
   Call xSetRT(vnd, "JSON_Request", jnavRequest.Stringify)

   '2. API をコールし、結果の JSON を取得
   'Set jnavResponce = xCallWebAPI(jnavRequest)
   'Call xSetRT(vnd, "JSON_Responce", jnavResponce.Stringify)

   '3. 結果の JSON 内から名刺情報部分だけの JSON を取得
   'Set jnavNameCard = xGetNameCard(jnavResponce)
   'Call xSetRT(vnd, "JSON_NameCard", jnavNameCard.Stringify)

   '4. 名刺情報を文書に保存
   'Call xSaveNameCard(jnavNameCard , vnd)

End Function

そして、作成した JSON をリッチテキストに出力する関数 xSetRT を有効化します。この関数はまだ作成していなかったので、ライブラリに追加します。

Private Function xSetRT(vnd As NotesDocument, ByVal vsFld As String, ByVal vsVal As String)
   Dim nrti As NotesRichTextItem

   Call vnd.RemoveItem(vsFld)
   Set nrti = vnd.CreateRichTextItem(vsFld)

   Call nrti.AppendText(vsVal)
End Function


動作検証

ノーツから文書を作成し、名刺の画像を添付し、[名刺読込] ボタンをクリックします。


クリック後、JSON が記録されていたら成功です。

画像データ(Base64 の文字列)が生成されていること、添付ファイルでもインラインイメージでも出力されていることを確認しましょう。

なお、確認が終われば xSetRT 関数のコールはコメントアウトしておきましょう。管理者用セクションの開閉が遅くなりますので...


◇ 『文書は保存されていません。』エラー

[名刺読込] ボタンをクリックすると、いきなり下記のエラーが表示されることがあります。エージェントのコードでは、Save メソッドで保存しているので、意味が分かりにくいですよね。

このエラーの原因はエージェントの設定です。対象が『すべての選択文書』などになっていると思います。これを『なし』にすると改善します。


次回の予定

今回でリクエストの作成部分は終了です。次回からは WebAPI をコールする部分を作成します。


前回 作ってみよう 次回


0 件のコメント:

コメントを投稿