ページビューの合計

ラベル REST の投稿を表示しています。 すべての投稿を表示
ラベル REST の投稿を表示しています。 すべての投稿を表示

2022年11月4日金曜日

#Domino #Volt ( #dominovolt )で 外部 #REST #API ( #restapi )を使う

 I recently posted about the prerequisites for using an external REST API with Domino Volt.

However, I thought that this was not enough, so I created a video in which I actually implemented an application that retrieves data from an external REST API in Domino Volt in a short time and with no code.

みなさま、こんにちは。

さて先日、

#Domino #Volt ( #dominovolt )で 外部 #REST #API ( #restapi )を使う前準備

という記事を掲載しましたが、設定だけを公開しても・・・ということで、今回は実際に外部のREST APIからデータを取得する手順を短い動画にしましたので、公開致します。

こちらも先日の掲示板に張り合い?
4分20秒で完成させたスピード作になります(笑

今回の例では、ホットペッパーグルメから公開されているAPIを利用して、キーワード検索を行い、結果をVoltに表示させるという単純なものです。

ホットペッパーグルメのAPIについては、こちらをご参照ください。
(※登録して、API Keyを取得する必要があります・・・すぐに発行して頂けました)

https://webservice.recruit.co.jp/index.html

こちらのAPIリファレンスに詳しく書かれていますが、必要な項目としては、

●リクエストURL
●検索クエリ(何を検索するのか・・・今回はkeywordを利用)
●レスポンスフィールド(どの項目を表示させるか・・・今回はname,Address,station_name,closeを利用)

となります。

リファレンス内には以下のようなサンプルがあり、リンクをクリックするとブラウザに結果が得られます。

ちなみに得られた結果はこちらになります。


・・・keyが設定されていないので、あたりまえですね。
では[APIキー]を取得したキーに差し替えてみます。


実際にはもっと長いデータになりますが、無事データを取得することができました。

それでは実際にDomino Voltに設定していきましょう。
先にも書きしましたが、今回はkeywordのみを指定して検索しますので、URLの例は以下となります。

http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&keyword=秋葉原

試しにブラウザで実行してみると、

このように結果が得れることを確認しました。

それではDomino Voltに設定していきます。

・・・いきなりですが、今回のフォームは以下となります。
詳細はお手数ですが、動画をご覧ください。


それではREST APIの設定を[検索]ボタンにサービスとして追加します。

以下のようにURLを指定します。


すると・・・


なんとエラーが出てしまいました。
応答にはデータが入ってそうです。

・・・よくよく内容を確認すると・・・
そう、APIのデフォルトがXML形式で戻ってきていたのです。

現状、VoltはJSON(のみ?)でのやり取りになるため、その設定を追加してやる必要があるということです。

APIリファレンスをよく読むと・・・


ありました。
URLに"format=json"を追加してやればいいようです。

ということで、まずは以下URLをブラウザで表示させてみます。

http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&keyword=秋葉原&format=json


ごちゃごちゃした表示が戻ってきました。
さすがにこの状態ではXMLのほうが見やすいとは思いますが、関係ありません。


ということで、このURLを使い、サービスを設定していくことで、無事結果が得られました。

こちらの詳細も申し訳ございませんが、動画にてご確認ください。
今回はまったくコードを書いておりませんので、ぜひその点にもご注目ください。






2022年11月2日水曜日

#Domino #Volt ( #dominovolt )で 外部 #REST #API ( #restapi )を使う前準備

 I will be publishing an article on the prerequisites for connecting to external REST APIs with Domino Volt.

Since there are not many articles in Japanese, I would be happy if you find this article useful.

みなさま、こんにちは。
さて今回も告知からです。

#HCLAmbassador ノミネーション受付中!!

我こそは!!
少しでも思いつく方は、遠慮することなくエントリーを!


#DominoHub 2022

HCLアンバサダー主催のオンライン・オフラインイベント。
イベントの最後にはビアバッシュと大抽選会も!!
可能な方は、ぜひ現地でお会いしましょう。
もちろん難しい方は、オンラインでご視聴ください。

おまけ
12月8日はパブリックビューも開催されますので、こちらもお見逃しなく!!



さて本題です。
先にも触れましたがDomino Hub 2022で1コマ頂いており、現在その資料を作成しています。
いろいろと掘り返している中、Domino Volt のREST接続を久しぶりに実施したのですが、なんとうまくいかない・・・。

具体的にはAPIのURLを入力して進めようとすると、以下エラーが表示されるんです。


ホワイトリスト???

半日ほど調べたのですが、見つけられず。
今回もサポートを頼らせて頂きました。
特に急ぎでなかったので、"優先度:低"で送信したのですが、なんと1時間ほどで連絡が。

「Volt Configuraton Settings (VoltConfig.nsf) の以下の設定でサービスの Whitelist を設定します。」

すっかりこのDBのことを忘れてました。
実際には、以下コンフィグデータベースを開き、


以下、「servicesWhitelist.enabled」を編集します。



変更する場所は2か所

まず最初のラジオボタンを[Enable Setting]に切り替えます。


続いて、最下部の Setting Value を[false]に書き換えて保存します。


すると、先のエラーはなくなり、以下のようにサンプルの応答(JSON)に結果が表示されました。


今回はあらゆるサイトに対しての許可を与えることとなっていますが、接続可能な先も制御できるようです・・・さすがDomino!
サポートからの案内文は以下となりますので、参考まで・・・。



このあたりの情報も、なんとか日本語で検索できればいいのですが。

ということで、ここまでくれば、フィールドの割り当てなどを設定すれば、RESTで取得したデータをVoltアプリに取り込むことが可能になります。
しかもノーコードで!!

APIはいろいろと公開されていますので、社内で利用可能なものも手軽に作れるのではないでしょうか。

ということで、このような内容を12月8日に発表させて頂きますので、ぜひご視聴ください!!

2022年8月29日月曜日

#WebexTeams への通知について

I will show you an example of how I have realized sending messages from a Notes document to WebexTeams.
Messages could be sent, but there were hurdles to using it as a workflow.
I have posted this on Cisco's Ideas site and would appreciate your vote!


さて最近は簡単なコミュニケーションはメールでなくショートメッセージに変化してきておりますが、みなさまはどのアプリをお使いですか?

もちろんSametimeと言いたいのですが、弊社では現在WebexTeamsを利用しております。
O365を利用しておらず、WebmeetingにもWebexを利用していることに起因しているのですが、せっかくならNotes/Dominoからも通知を送ることができれば(ワークフローとか)と考えた次第です。

今回のイメージとしては、Notesアプリのフォームに入力した内容をWebexTeamsのスペースに投稿するというものになります。

ということで、まずはWebex側の設定を行います。

Webexアプリですと、以下アイコンをクリックして、開いたWEB画面で「Incoming Webhooks」を検索


もしくは以下URLで直接該当ページを開きます。

https://apphub.webex.com/applications/incoming-webhooks-cisco-systems-38054-23307


こちらで[Connenct]をクリックするとサインインが求められ、進めると設定画面に進みます。

設定項目は至って簡単で、以下にWebhook name(自由に決められる名前)とメッセージの送信対象となるスペースを選択し、[Add]をクリックします。


すると以下のようにWebhook URLが発行されますので、こちらを控えておきます。


続いてノーツ側の設定です。
まずは簡単なフォームを作成します。




本文(message)に送信したい文面を。
WebhookURLにWebexで設定したURLを貼り付けるだけのものです。
さらに送信ボタンに以下Lotusscriptを記述します。

Sub Click(Source As Button)

    Dim session As New NotesSession

    Dim ws As New NotesUIWorkspace

    Dim http As NotesHTTPRequest

    Dim uidoc As NotesUIDocument

    Dim TeamsURL As String, body As String, message As String, title As String

    Dim ret As Variant

    Set uidoc = ws.CurrentDocument

'入力メッセージを取得

    message = uidoc.FieldGetText("message")

'Teams webhookURLをセット

    TeamsURL = uidoc.FieldGetText("webhookurl")

'PostのBodyをセット

    Body = |{"markdown":"|+message+|"}|

'HTTP Request 生成

    Set http = session.CreateHTTPRequest()

'ヘッダーのセット

    Call http.SetHeaderField("Content-Type","application/json")

'Postリクエストの送信

    Call http.Post(TeamsURL, Body)

End Sub

※赤字部分"markdown"ですが、単なる文字列でしたら"text"で十分なのですが、今後の拡張性を考慮して、意図的に"markdown"を利用しています。

それでは一度試してみましょう。

本文(message)に「message」と入力し、Webhook URLに先に取得したアドレスを貼り付けて「送信」をクリックします。

っとここでアラートが表示されました。


但し、WebexTeamsにメッセージは送信できていることは確認できました。


アラートについてはHCL様サポートに問い合わせたところ、最終的には以下のような案内を頂きました。


どうやらSlackとは少し仕様が異なるようでした。

ご提案頂いて通り、POSTの前に

    http.Preferstrings=True  

を1行追加することで、エラーの表示はなくなりました。
今回のサポートについては、自社製品の枠を超え、SlackやWebexTeamsの仕様書を熟読頂いた上で解決に導いて頂くことができました。
今まで他社製品含め、問い合わせを依頼してきましたが、ここまで深く追求頂けたのは初めてです。
本当にありがとうございました!!


さてここまででWebexTeamsにフラットな文面を送ることが可能であることは確認できました。

ノーツとの連携ですので、やはりワークフローの送信などで利用したいと思うのは普通ではないでしょうか。
ということで、試しにノーツのリンクをメッセージに埋め込んでみました。

まずノーツ文書のURLの取得ですが、先のフォームに[Link]という計算結果フィールドを追加して、以下の式を設定します。
この式で現在開いている文書のURLが生成されます。

"Notes://" + @Name([CN];@Subset(@DbName;1))+"/"+@ReplaceSubstring(@ReplicaID; ":";"")+"/0/"+@Text(@DocumentUniqueID)


続いて「送信」ボタンのLotusscriptです。
まずは

    Dim TeamsURL As String, body As String, message As String, title As String

の部分に[Link]の宣言を追加します。

    Dim TeamsURL As String, body As String, message As String, title As String, Link As String

続いて
    message = uidoc.FieldGetText("message")
に1行追加して、
   message = uidoc.FieldGetText("message")
 Link = uidoc.FieldGetText("Link")  
[Link]の値をセットします。

さらに
    Body = |{"markdown":"|+message+|"}| 
の部分を
    Body = |{"markdown":"|+"[リンク]("+Link+")"+|"}| 

に書き換えて再度送信してみます。すると、


URLリンクの貼られたメッセージが届きました・・・が!!
「リンク」の文字にマウスカーソルを当てても、変化がなく、クリックすることができませんでした。(正しくはリンクとして判断されていないようです)

念のためhttpsの文字列で試してみます。


今度はマウスカーソルを当てるとこのようにURLが表示され、リンクも正しく動いてくれました。

Cisco社に問い合わせたところ、やはり・・・http://およびhttps://のみがリンクとして利用できるとの事でした。

ただそれだけでなく、アイデア投稿サイトの紹介が書かれておりましたので、以下登録致しました。

ぜひ皆様もこちらにVOTE頂けましたらと思い、今回の記事を終わらせて頂きます。

いつしかノーツリンクが利用できるようになり、WebexTeamsでワークフローが廻せればと願うばかりです。

https://ciscocollabcustomer.ideas.aha.io/ideas/WXCUST-I-8545





2022年7月19日火曜日

#郵便番号 から #住所 を取得しよう( #鬼わか の #REST #API を適用したサンプル)

 I am pleased to present a sample REST API application that I gave to one of you.

If you would like to learn the rudiments of LotusScript, please register for the LotusScript course on September 14 and 15.

みなさま、こんにちは。
早速ですが、まずは告知から・・・

●9月9日(金) ノーツコンソーシアム 第三回 大阪研究会(会場開催・オンライン)

今回は大阪を飛び出して、京都で開催します。
普段は関西におられないゲストが来られるかも!!
さらに・・・こんなビュー、作ってみたくないですか?


当日のセッションで教えて頂けるかも!!
きっと見逃せない研究会になるはずです。ご期待ください。

終了後は、夏の京都といえば・・・そう川床ですね。

もちろんリモート配信も行いますので、ぜひみなさまのご参加をお待ちしております。

※コロナの状況により、懇親会、オンサイト開催を見送る場合がございますので、あらかじめご了承ください。

2019年3月25日月曜日

ノーツでサーバーの #サービス監視

This time, I applied the logon management app that was created the other day, and tried to finish it as a service monitoring app for the server.

みなさま、こんにちは!!

curl にはまった筆者です。

今回は先日の「ログオン管理」を応用して、サーバーのサービス死活監視を開始致しましたので、その方法を紹介致します。

実は弊社で使用しているとあるサーバーなのですが、かなり負荷が大きいようで、時折サービスが落ちてしまうというものがあるのです。
仮想サーバーですので、リソースが潤沢にあればそちらを割り当ててやればいいのですが、導入から4年半を経過したオンプレのサーバーですので、そうもいかず・・・
ということで、根本解決には至らないのですが、サービスの死活監視を行うというものを作ってみたというのが背景になります。

取り急ぎ監視するサーバーのCドライブにcurlをインストールします。
手順はお手数ですが、先の「ログオン管理」をご確認ください。

次に監視するバッチファイルです。
対象サーバーに以下の記述を行ったバッチファイルを作成します。

その前に対象となるサービスの名前を確認しなければなりません。
対象サーバーのコマンドプロンプトで以下を実行し、名前を確認します。


 sc getkeyname **名前**


例えば"DHCP Client"ならば、


 sc getkeyname "DHCP Client"


と実行します。
すると以下のような画面が表示され、名前が"Dhcp"であることがわかります。


その名前を利用し、以下内容のバッチファイルを作成します。
申し訳ありません、コマンド内容についてはここでは触れませんので、ご了承ください。


 @ECHO OFF
 set dt=""
FOR /F "USEBACKQ" %%i IN (`sc query ^| findstr /i "名前"`) DO @SET DT=%%i
 IF %DT%=="" GOTO error
 GOTO end
 :error
 cd c:\curl\bin
 curl -i -H "Content-type: application/json" -X POST -d  "{\"creator\":\"名前\",\"stamp\":\"サーバー名\",\"time\":\"%date% %time%\"}" -u "ノーツユーザー名":ノーツパスワード
http://サーバー名/ノーツファイル名.nsf/api/data/documents?form=log
 :end


curl部分は、前回作成したバッチファイルをそのまま転用しています。
ノーツアプリケーションもコピーして少し修正して済まそうという魂胆です。
タスクスケジューラーに「名前」のタスクが実行してなければ、error処理が発生し、curl以降が実行されるというものです。

ちなみにノーツアプリケーションのフィールドには、以下内容がセットされることになります。

 creator : サービスの名前
 stamp : サーバーの名前
 time : 日時

あとはタスクスケジューラーに毎日実行するタスクとしてこのバッチファイルを登録しておきます。

続いてノーツアプリケーションです。
先の通り、「ログオン管理」をコピーして使用します。
とは言っても、先のバッチファイル側で制御していますので、コピーするだけで既にerror処理が発生すれば、文書が追加されてきますので、テストしてみてください。

あとはビューやフォームを少しさわるだけで完成しました!!

まずはビューから


すいません、サーバー名とサービス名をぼかしたので、わかりにくいですね(汗

続いてフォームです。


結構、いい感じに仕上がっているかと思います。

それでは文書が新規作成された際に、メールを飛ばすエージェントを追加します。
新規エージェント作成にて、シンプルアクションを使用します。


シンプルアクションでは、「メールメッセージの送信」を選択し、宛先・件名・文面を記述します。
また「メッセージに文書リンクを含む」にチェックしておきます。



最後にトリガーですが、シンプルアクションではイベントでの検知ができない(?)・・・詳しい方、フォローお願いします。
また今回は1日1回9時にバッチファイルを実行するイベントとして設定したため、「一日一回以上」のスケジュールとして、登録しました。


エージェントの実行間隔を23時間とし、有効時間帯を9:30~9:50としましたので、おそらくは、

 9:00 タスク実行・・・サービスが起動していない場合、ノーツデータベースに文書が追加される
 9:30 エージェント実行・・・文書が追加されていた場合、文書リンクのついたメールが送信される⇒次回起動予定は翌8:30ですが、有効時間帯の9:30を待ってエージェントが実行される

というイメージになります。

今回届いたメールは以下のような感じになります。



以上で組み込みは完了となります。

テストは9時前に意図的にタスクを落としてノーツに文書が追加され、メールが発信されるかどうかを2日続けて実施する必要があります。

なお実際の運用では、サービスダウンを検知した際に、該当のサービスを起動する記述をバッチファイルに組み込めば、検知後にサーバーにログインしてサービスを起動するという必要もなくなります。
ただ自動で再起動してしまうと、落ちていたことを知る機会がログを見なければなりませんので、このようなノーツアプリケーションへの連携は効果があると考えます。

また今回は1日1回としましたが、さらに細かく監視したいという場合もあるかと思います。
その場合はタスクスケジューラーに必要間隔で登録し、エージェントの間隔も考慮すれば、ある程度は細かく対応できるようになります。

以上、あまりにも簡単なのですが、まだまだ使い方は増えそうですよね。
また何か思いついたら紹介させて頂きます。


2019年2月13日水曜日

ノーツでログオン管理

This time I created an application to record the logon and logoff records in Notes, so I will introduce it.

みなさま、こんにちは!!
USではThink2019が盛り上がっているようですね。
参加されている皆様、ぜひ満喫してきてください。
また戻られましたら、いろいろと情報発信もお願いしますね!!
来週のIBM Notes/Domino Day 2019 Springでのフィードバックも期待してます!

さて今回はログオン・ログオフ時間をノーツアプリに収集することに成功しましたので、記事とさせて頂きます。
※弊社ではクライアントは全員VDIを使用しておりますが、こちらの環境でも使用できることは確認済です。

そもそも弊社では事務所入り口に置いた共有パソコンのブラウザでXPagesで作成したノーツアプリを使ってタイムレコーダー

【第1回】タイムレコーダーアプリ作成~アプリケーションの準備~
以降でご紹介

を打刻していたのですが、労働基準法改正に伴い、さらに管理を強化する必要があることから、何かしらシステムで受けこむよう指示が出ておりました。
もちろんクライアント管理サービスなども考慮したのですが、性能が良すぎて価格的には安価ではないというところがあり、それならばノーツで何かできないかと考えた次第です。

早速ですが、アプリのイメージです。
ノーツアプリそのものは至って簡単です。
フィールドとして、creator,stamp,timeの3項目のみのアプリになります。
timeのみ「作成時の計算結果」として@createdとしています。
残り2項目は「編集可能」になっています。


ビューは単純に日時順と氏名別を作成しています。
以下は日時順のイメージです。



今回のノーツアプリは単純にデータを受けこむだけのものを想定してあります。
文書の作成は curl コマンドから REST を利用してアプリに書き込むこととしてあります。
従いまして、ノーツアプリ側でRESTからアクセスを受け付ける設定が必要です。
こちらについては、御代チャンピオンのブログがたいへん参考になりますので、ご覧ください。

Notes/Domino でREST APIを使ってみよう-前半

curlについては、以下サイトが参考になりました。

IBM Domino REST API 利用ガイド

まずはwindowsでcurlを使えるように設定を行います。

こちらのサイトからcurlがダウンロード可能です。
筆者はWindows 32bit 版をダウンロードして使っています。

ダウンロードしたzipファイルを解凍し、フォルダを【curl】にリネームします。
このフォルダをどこでもいいのですが、今回はCドライブ直下に移動させました。

curlを利用するには、コマンドプロンプトからcurl.exeのあるディレクトリに移動させるだけで使用できます。

今回の場合ですと、


  cd C:¥curl¥bin


となります。


正しく稼動するかは、以下コマンドでHelpが表示されればOKです。


  cd C:¥curl¥help


それではバッチファイルを作成します。
私は以下[logon.bat]と[logoff.bat]を作成し、対象クライアントのC:¥BATCHフォルダに保存しました。

logon.bat

  ECOH OFF
  cd c:¥curl¥bin
  curl -i -H "Content-type: application/json" -X POST -d "{¥"creator¥":¥"%USERNAME%¥",¥"stamp¥":¥"ログオン¥"}" -u "管理者名":パスワード http://サーバーパス/アプリ名.nsf/api/data/documents?form=フォーム別名


curlのオプションについては、私自身理解しきれておりませんので、割愛させて頂きます。
要はcreatorフィールドに %USERNAME% を用いて、ログオンユーザーの名前をセット。stampフィールドに固定値としてログオンをセットするようなイメージです。
timeフィールドは作成時の計算結果フィールドですので、こちらでは操作していません。

logoff.batについては、先の「ログオン」を「ログオフ」にしただけのものを準備します。

バッチファイルの準備ができましたら、弊社ではADのグループポリシーに設定を行いました。
ログオンする全社員を対象にデータを取得することが目的であり、且つログオフ時にバッチを実行させるにはポリシーを使う必要があるためです。

新規でグループポリシーオブジェクトを作成(場所は各企業様で必要な場所へ作成してください)し、グループポリシー管理エディターにてスクリプトを割り当てます。
割り当てる場所は
[ユーザーの構成] - [ポリシー] - [Windowsの設定] - [スクリプト(ログオン/ログオフ)]です。


こちらのログオンにlogon.bat、ログオフにlogoff.batを割り当てます。


続いて、グループポリシーを即時有効にするため、コマンドプロンプトにて以下を実行します。


  geupdate /force


それでは試しにログオンしてみましょう。
ノーツアプリで日時順ビューを開いた画面です。



うーん、ふたつ問題がありますね。
ひとつはスタンプ。「ログオン」と表示して欲しかったのですが、やはり2バイト文字は制限があるようです。
さらに問題は日時。
単純にアプリから新規作成時には作成時の計算結果としてtimeの値が保存、表示されたのですが、RESTから送り込んだため計算が行われず、以下のように文書にtimeの値すらありません。


ということで、まずは簡単なstampフィールドからです。
先のバッチファイルの「ログオン」「ログオフ」を半角で「LogON」「LogOFF」にしてみました。
先のログインした端末をログオフすると、


当たり前ですが、うまく取得できました。

次に日時です。
エージェントでとも考えたのですが、もっと簡単にtimeフィールドもバッチ側から送り込む方法に変更することにしてみました。

先のバッチファイルを以下のように変更します。


  ECOH OFF
  cd c:¥curl¥bin
  curl -i -H "Content-type: application/json" -X POST -d "{¥"creator¥":¥"%USERNAME%¥",¥"stamp¥":¥"ログオン¥",¥"time¥":¥"%date% %time%¥"}" -u "管理者名":パスワード http://サーバーパス/アプリ名.nsf/api/data/documents?form=フォーム別名


念のため、ノーツアプリのtimeフィールドも作成時の計算結果から「編集可能」に変更し、ログオン/ログオフしてみました。


値が取得できました。

使わないですが、フォームです。


こちらもOKですね。
念のため、編集して保存してみたとろ、少しだけ違和感のある動きが・・・


そう、ノーツアプリ側の時刻の表示設定がフォームでは「時分」、ビューでは「一般」になっていたため、保存することで秒が切り捨てられたようです。
ですので、「時分秒」に設定しなおし、正しく得られるようになりました。

ちなみにノーツビューで「表形式でコピー」してエクセルに貼り付けたものがこちらになります。


日時の書式設定は「ユーザー定義 yyyy/m/d h:mm」と認識されているため、集計にも利用できるはずです。



いかがですか?
ログオン/ログオフスクリプトとノーツアプリだけで、ユーザーのログオン/ログオフが記録できるようになりました。

まずは今回の案件がパソコン使用時間の収集という目的であるため、弊社では本アプリを使うこととします。
弊社のような1人SEや専任者がいない会社様などですと、それなりに使えるのではないかと思います。

※¥マークは"/"に変換されるため、全角文字を使用しておりますので、ご注意ください。