エムオーテックス株式会社が運営するテックブログです。

お知らせ情報 APIを公開しました! (活用例のご紹介)

はじめに

こんにちは、エムオーテックスAPI開発チームの小久保です。
テックブログならびに本記事を閲覧いただき、ありがとうございます。

今回は自分が開発に携わりましたお知らせ情報 APIについて、ご紹介をかねて実際の活用イメージをお届けします。

内容の紹介

このたび LANSCOPE エンドポイントマネージャー クラウド版(以後: クラウド版)を対象に公開しております
お知らせ情報(通常のお知らせおよび障害情報) について、APIで取得できるようにいたしました!

※クラウド版 API は、利用申請ユーザー様のみへの限定公開となっており、お客様専用サイト(LANSCOPE PORTAL)からお問い合わせが可能です。

お知らせ情報とは、コンソール画面にアクセスした際右上に表示されるベルのマークと警告マークの内容を指します。

お知らせ情報

開発の経緯

お知らせ情報 API公開前では、情報の把握はコンソール画面やお客様向け専用サイト、その他メールなど限られた手段のみとなっておりました。
ここに対して、エムオーテックスがイベント参加した際やお客様に向けてヒアリングを実施した際に
「能動的に管理コンソールを見に行かずとも、新規公開されたお知らせ情報に気づきたい」というようなご意見をいただきました。
開発チームの方でもいただいたご意見は大切にしたいという思いと、より製品をご活用いただくために今回はお知らせ情報 APIの公開にいたりました。
お知らせ情報 APIをご活用いただくことにより、任意のプログラムやノーコードでAPIを実行できるサービスで情報を取得して、外部サービス(例:チャットサービス)と連携を行うことが可能となります。

活用例

ここではPythonのプログラムコードを用いた利用の例とMicrosoftが提供するPower Automateを利用してチャットサービスに内容を通知するサンプルをご紹介します。

powerautomate.microsoft.com

いずれも下のような通知を行うイメージとなります。

通知のイメージ

1時間に1回、プログラムを実行するようなタスクスケジューラーを設定して、直近1時間以内に更新のあったお知らせを通知する想定です。 今回はチャットワークに通知するサンプルをご提示します。

Pythonのプログラムコードの例

# -*- coding: utf-8 -*-

import requests
from datetime import datetime as dt, timedelta
from dateutil.parser import parse
from dateutil import tz

# 変数の宣言
## お客様設定箇所: LANSCOPE EM クラウド版のAPIトークンの値を入れる
API_KEY = '...'
## お客様設定箇所: Chatworkのメッセージ投稿用のAPIトークンの値を入れる
CHATWORK_API_TOKEN = '...'
## お客様設定箇所: Chatworkのメッセージ投稿を行うルームIDの値を入れる
CHATWORK_ROOM_ID = '...'
## お客様設定箇所: 何時間前のデータを通知するか値を入れる(通知の間隔にあわせてください)
SET_HOUR = 1

# 固定値(基本的には変更しないでください)
HEADERS = {'Authorization': 'Bearer ' + API_KEY}
URL = 'https://api.lanscopean.com/v1/notifications'

# Chatworkにメッセージを投稿する関数
def send_chatwork(message):
    print('Chatに投稿します')
    url = f'https://api.chatwork.com/v2/rooms/{CHATWORK_ROOM_ID}/messages'
    headers = {
        'X-ChatWorkToken': CHATWORK_API_TOKEN,
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    params = {'body': message}
    response = requests.post(url, headers=headers, data=params)
    print(response.text)

# 指定した時間以内のデータのみにフィルタリングする関数
def filter_data(data):
    now = dt.now(tz.tzlocal())
    one_hour_ago = now - timedelta(hours=SET_HOUR)
    return [item for item in data['data'] if parse(item.get('updated_at')) > one_hour_ago]

# UTCの時刻をJSTに変換する関数
def convert_to_jst(utc_str):
    utc_format = "%Y-%m-%dT%H:%M:%S.%fZ"
    jst_format = "%Y-%m-%d %H:%M:%S"
    utc_dt = dt.strptime(utc_str, utc_format)
    jst_dt = utc_dt + timedelta(hours=9)
    return jst_dt.strftime(jst_format)

# フィルタリングされたデータからメッセージを作成する関数
def create_message(filtered_data):
    message = 'LANSCOPE EM クラウド版 お知らせ情報通知'
    for r in filtered_data:
        information = r['information']
        url = r['url']
        body = r.get('body', '')
        updated_at = convert_to_jst(r['updated_at'])
        detail = f'[info][title]{information}[/title]{body}\n{url}\n{updated_at}[/info]'
        message += detail
    return message

# メイン処理
def main(URL, HEADERS):
    response = requests.get(URL, headers=HEADERS)

    if response.status_code == 200:
        data = response.json()
        filtered_data = filter_data(data)

        if filtered_data:
            message = create_message(filtered_data)
            print(message)
            send_chatwork(message)
        else:
            print('過去1時間以内の通知はありません')
    else:
        print(f'Error: {response.status_code}')

# スクリプトのエントリーポイント
if __name__ == "__main__":
    main(URL, HEADERS)

上記のPythonコードで必要な部分にトークンなどを差し替えて実行することで通知が行われます。

Power Automateの例

Power Automateは、トリガーとアクションと呼ばれるパーツを組み合わせることでプログラミングのコードを書かずに様々な操作が可能です。 こちらでもPythonと同様の内容を実現するサンプルをご提示します。

Power Automate フロー全体

各パーツの詳細についてです。

■トリガーの設定です、定期実行のパーツを今回選択し、1時間単位で実行するようにしています

フローの詳細 定期実行設定
※コネクター名は スケジュール です

■APIの実行のための設定です、APIトークン情報はクラウド版のAPI連携用画面から取得してください

フローの詳細 APIの実行
※コネクター名は HTTP です

■APIを実行したデータを加工するための前処理です、下に記載している内容を入力してください

フローの詳細 JSON の解析
※コネクター名は データオペレーション です

入力する内容

{
    "type": "object",
    "properties": {
        "data": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "notification_id": {
                        "type": "string"
                    },
                    "information": {
                        "type": "string"
                    },
                    "category": {
                        "type": "string"
                    },
                    "created_at": {
                        "type": "string"
                    },
                    "updated_at": {
                        "type": "string"
                    },
                    "url": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    }
                },
                "required": [
                    "notification_id",
                    "information",
                    "category",
                    "created_at",
                    "updated_at"
                ]
            }
        }
    }
}

■通知用のメッセージを保持する変数を宣言しています

フローの詳細 通知メッセージの初期化
※コネクター名は 変数 です

■取得したメッセージの数だけ判定を繰り返すための設定です

フローの詳細 取得したメッセージの数だけ繰り返す
※コネクター名は コントロール です

■過去1時間以内の更新であるかを判定する条件文です

フローの詳細 過去1時間の更新を通知
※コネクター名は コントロール です

■チャットへの通知メッセージの生成です

フローの詳細 通知メッセージに追加
※コネクター名は 変数 です

お知らせの投稿時間については、つぎのような関数で日本時間に変換を行っています

addHours(items('取得したメッセージの数だけ繰り返す')?['updated_at'], 9, 'yyyy/MM/dd HH:mm:ss')

■通知対象のメッセージがあるかを判定しています

フローの詳細 通知のメッセージがあるか判定
※コネクター名は コントロール です

■最後にチャットワークへの通知の設定です、各通知先の設定に準じてください

フローの詳細 チャットワーク通知
※コネクター名は HTTP です

上記のような設定を行うことで、クラウド版のお知らせ情報を普段お使いのコミュニケーションツールなどで確認が可能となります。
これにより通知が目に留まる機会が増えるかと思いますので、ご活用いただければ幸いです。

おわりに

ここまでお読みいただきありがとうございました、本記事がお役に立てば幸いです。
今後もお客様のご要望やニーズに合わせた機能の開発・改善も行ってまいりますので、ご期待ください。

APIについては過去にいくつか記事を投稿しておりますので、ご興味がございましたらぜひそちらもご覧下さい。

LANSCOPE における API とその活用例
LANSCOPE API と Power Automate を連携して、デバイス利用許可申請ワークフローを自動化してみた(準備編)
LANSCOPE クラウド版 API と Power Automate を連携した活用事例
LANSCOPE API と Power Automate を連携して、デバイス利用許可申請ワークフローを自動化してみた(フロー作成編)
【LANSCOPE エンドポイントマネージャー クラウド版API活用例】ライセンスの枯渇検知の方法(PowerAutomate)
API開発Working Groupの活動について

またエムオーテックスでは自分たちで考えて提案し、実際に開発するという活動を行うことができます。
ご興味あれば採用サイトのほうもぜひご確認ください。

www.motex.co.jp