ページビューの合計

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