IBM Cloudからの通知を生成AIを使ってわかりやすく - (1)通知の仕様編

# はじめに
※こちらはシリーズとなっており、下記ラインナップの1つ目になります。
「IBM Cloudからの通知を生成AIを使ってわかりやすく」シリーズ
- [(1)通知の仕様編](https://qiita.com/katahiro/items/b9bd400f93d328613cff) ← 今ココ
- [(2)Webhookアプリコーディング編](https://qiita.com/katahiro/items/d8048393ce42cf9c5b3b)
- [(3)デプロイ＆設定編](https://qiita.com/katahiro/items/53443fabe2980c2fba03)

AWSやAzureといったCloudベンダーが利用者に通知するメンテナスや障害に関する通知は日本語で受け取ることが可能なようですが、IBM Cloudはいつまでも英語で送られてきます。英語が読めれば良いとか、Google翻訳にかければ良いとか面倒なので何とかしたい。
そんな折に出来てきたのがChatGPTといった生成AI、これを活用して何とかできないか考えました。ただ、社内の規定でChatGPTの利用は禁止されているため、利用が許可されている `watsonx.ai` を使って、できる限り何とかしてみたいと思います。

:::note warn
本稿執筆時点でも微調整を繰り返している段階のため、参考として頂けると幸いです
:::

完成形は添付のように、IBM Cloudから送られてきた英語の通知に対して、その内容ととるべきアクションがわかるように生成AIで文章を作成してSlackに通知させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/a381676b-df18-1516-8c7a-9dbd9ab9bf50.png)

# そもそもIBM Cloudの通知設定について
IBM Cloudの通知設定は下記から設定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/532c05f6-c436-c2c8-5022-dfef5bd22127.png)

遷移した先のページ下部に、配信先リストの設定が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/5d99ff9e-74bb-ba26-980a-d562f27f59e8.png)
こちら、配信先のメールアドレス設定以外にWebhookの設定を最大10個まで指定できます。
設定画面を見ると、正確には以下が通知先として設定可能です。
- Email
- Webhook
- Slack
- Microsoft Teams
- Event Notifications

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/c0473a43-0f40-33b9-d57d-594785841114.png)

SlackやMicrosoft Teamsは、通知内容をそのまま送ってしまうだけなので、わかりやすくはならないです。`Event Notifications` はこういった通知情報を一元管理するサービスに転送することもできますが、今回は対象外ですね。自分でアレンジしたいのでWebhook一択です。

届いたメンテナンス情報をわかりやすく処理するWebhookを作成できれば、良いということになりましたので早速作っていきたいところですが、まずIBM Cloudから送られてくる通知内容を把握していきます。

# IBM Cloudから受け取る通知の種類は？
IBM Cloudの[Docs](https://cloud.ibm.com/docs/get-support?topic=get-support-viewing-notifications&locale=en#notification-types)に従うと、下記のタイプの通知があります。
|種類|説明|
|:---|:---|
|Planned maintenance|IBM Cloud プラットフォームおよびインフラストラクチャーの運用を快適な状況で維持するために必要な定期保守。|
|Security bulletins|セキュリティーの脆弱性および必要なアクションに関するお知らせ。|
|Announcements|IBM Cloud のインフラストラクチャーの最新トピックおよびサービスの更新情報。|
|Incidents|障害発生または機能制限の原因となる可能性がある、予期されない、影響の大きなイベント。|
|Account|IBM Cloud プラットフォームにユーザーを招待するための招待 E メールまたはコンソール通知。|

ただ、これ以外にもツールを少し開発して分かったのですが、通知内容がありました。
|種類|説明|
|:---|:---|
|Billing and Usage|利用料金に対して閾値を設定している場合、その情報が通知されます。|
|Resource activity|例えばDirect LinkやTransit Gatewayで外部からの接続において承認/拒否の実施が必要な場合に通知されます。|

# IBM Cloudから通知にWebhookを設定した場合に送られる内容は？
こんな感じのJSONがWebhookに渡されます
```json
{
  "account_id":"アカウントID",
  "body":[
    {
      "content-type":"text/html",
      "language":"en",
      "text":"通知本文"
    }
  ],
  "category":"Maintenance",
  "endTime":1709442000,
  "severity":"Medium Impact",
  "sourceID":"159118814",
  "startTime":1709420400,
  "state":"Planned",
  "title":[
    {
      "language":"en",
      "text":"通知タイトル"
    }
  ]
}
```
本文とタイトルの部分に `language`がありますが、あなた英語しか送らないデスヨネ・・・

|JSON Key|型|必須|説明|
|:---|:---|:---:|:---|
|accoount_id|数値|〇|アカウント識別番号|
|body|配列|〇|通知本文関連情報|
|　content-type|テキスト|〇|`text/html`固定|
|　language|テキスト|〇|`en`固定|
|　text|テキスト|〇|通知本文|
|category|テキスト|〇|把握している範囲で `Maintenance` `Announcement` `Incident` `Security Bulletin` `Account` `Billing and Usage` `Resource activity`のいずれか|
|endTime|数値||終了時刻情報(UTC) Unixtime表記<br>`Maintenance`のみのはず|
|severity|テキスト||重要度の記載、`Maintenance`か`Incident`の時に記載<br>`Maintenance`の場合:`High/Medium/Low Impact`の記載<br>`Incident`の場合 : `Severity 1/2/3`の記載|
|sourceID|テキスト|〇|送信されたイベントIDっぽい|
|startTime|数値||開始時刻情報(UTC) Unixtime表記<br>`Maintenance` `Incident` `Security Bulletin` `Resource activity`は必須で設定される<br>`Announcement`はサービスによっては設定される|
|state|テキスト||状況の記載、`Maintenance`か`Incident`の時に記載<br>`Maintenance`の場合:`Planned/In progress/Completed`の記載<br>`Incident`の場合 : `Investigating/Resolved`の記載|
|title|配列|〇|タイトル情報|
|　language|テキスト|〇|`en`固定|
|　text|テキスト|〇|通知タイトル|
|updateTime|数値||更新時刻情報(UTC) Unixtime表記<br>`Security Bulletin`は必須で設定される<br>`Maintenance` `Announcement` `Incident`は設定されるケースと設定されないケースが分かれる|

これに対応するWebhook側アプリを作れば良いですね。

# IBM Cloudの通知内容をWebhookする際のオプション
添付は通知先の設定でWebhookを指定した場合の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/89a6919a-8760-5193-9740-76d39c904d9e.png)
こちらは単純にURLを指定するだけでなく、`Add secure header`を指定することで、Bearer認証といったリクエストを投げることも可能です。Webhook側のアプリは都合インターネット上に公開する必要があるため、第3者に勝手に利用されないよう簡単なBearer認証を組み込んでおきたいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/5b1e98ef-1e45-6cfd-e878-19ec0687d753.png)

# さいごに
今回はIBM Cloudの通知を生成AIを使ってわかりやすくする前に、IBM Cloud通知の配信設定や、その通知の種類について紹介させて頂きました。
次回はWebhookアプリコーディング編を紹介します。

# シリーズのリンク

https://qiita.com/katahiro/items/b9bd400f93d328613cff

https://qiita.com/katahiro/items/d8048393ce42cf9c5b3b

https://qiita.com/katahiro/items/53443fabe2980c2fba03