複数メンバーに個別に同報メッセージを送る LINE WORKS Bot

ちょっと邪道ネタですが、LINE WORKS で複数のメンバーに個別にメッセージを送る Bot を作ってみます。

##Azure Automation

以下の記事で、Microsoft Flow で何かしらのトリガーを基に、定型のメッセージを送る LINE WORKS BOT の作成方法を説明しました。

TITLE: LINE WORKS + Azure Automation + Microsoft Flow で LINE WORKS Bot からトークメッセージ送信
URL: https://qiita.com/iwaohig/items/3056b95597772061d17b

上述の記事の説明に沿って、Azure Automation の設定を行ってください。
ただし、PowerShell のスクリプトは、Bot no. やユーザー ID とメッセージの内容をパラメータで受け取るために、以下のものを利用してください。

Bot No. 、API 認証関連の値は、後ほど LINE WORKS の Developer Console を参照してく入力しなおしてください。Bot No. は Bot 登録時に生成されます。

```
Param
(
  [Parameter (Mandatory= $true)]
  [string] $botNo,

  [Parameter (Mandatory= $true)]
  [string] $accountid,

  [Parameter (Mandatory= $true)]
  [string] $Message
)

$header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$header.Add("Content-Type","application/json; charset=UTF-8")
$header.Add("consumerKey","<Server API Consumer Key>")
$header.Add("Authorization","Bearer <Server Token>")
$header.Add("Cache-Control","no-cache")

$json = @"
{
    "botNo": $botno,
    "accountId": "$accountId",
    "content": {
        "type": "text",
        "text": "$message"
    }
}
"@

$Body = [System.Text.Encoding]::UTF8.GetBytes($json)
$Uri = "https://apis.worksmobile.com/<API ID>/message/sendMessage/v2"
Invoke-RestMethod -Uri $Uri -Method Post -Header $header -Body $Body
```
Azure Automation の Runbook でのパラメータの利用は、こちらの記事で説明されています。

TITLE: Runbook の入力パラメーター
URL: https://docs.microsoft.com/ja-jp/azure/automation/runbook-input-parameters

##Microsoft Flow の準備

フローのトリガーとして [HTTP 要求の受信時] を用います。これにより、ユーザーから送信されたメッセージを解析し、受信者への転送メッセージの処理を行います。

[要求本文の JSON スキーマ] を [サンプルのペイロードを使用してスキーマを生成する] を利用して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/0a88a8de-2d3f-ccb2-a9e0-e6623df248d1.png)


サンプルの JSON ペイロードは LINE WORKS の Developers サイトの "メッセージ受信 - Callback 形式 (message)" の記事中の Request Example として掲載された以下を用います。

https://developers.worksmobile.com/jp/document/100500901?lang=ja

```
{
  "type": "message",
  "source": {
    "accountId": "admin@example.com",
    "roomId": "12345"
  },
  "createdTime": 1470902041851,
  "content": {
    "type": "text",
    "text": "hello"
  }
}
```

Microsoft Flow がサンプル ペイロードを解析してスキーマを生成してくれます。スバラシイ!!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/3534239b-0692-6904-5686-1cb4bd7225f8.png)

[method] は "POST" を指定します。

なお、Flow の保存時に、この Http 要求の受信用の URL が生成され、これを LINE WORKS の Developer Console で Callback URL として利用します。

次に同報送信先の ID 入力用に "データ操作" の "作成" アクションを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/814e9733-04c3-7735-9186-5d9b29c260dd.png)

"入力" でスクリーンショットのように、配信先の ID を記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/fefcf2f1-8084-e631-1c86-af154bd9c7b0.png)

続けて、"条件" - "Apply to each" を指定し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/d548b457-5276-89f5-ebd5-910d4792c0dd.png)

"以前の手順から出力を選択" で "出力" を指定します。これにより、データ操作で入力した送信先ごとに LINE WORKS の API を実行できます。

続けて Azure Automation のジョブを作成します。Message パラメータ内は任意の記述としてください。
スクリーンショットの例では、送信元の ID や、返信のため送信者との 1:1 トークルームへ遷移するための URL スキームを記述しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/3c5f5567-8b92-a385-17a5-73231093b39c.png)


LINE WORKS の URL スキームはこちらの情報を参照。
TITLE: URL スキームを使用する
URL: https://developers.worksmobile.com/jp/document/10017001?lang=ja

##LINE WORKS Developer Console の準備

LINE WORKS でトークボット API を利用するため、LINE WORKS の Developer Console で、以下の作業を行います。

###API 認証の準備
- API ID 発行
- サーバー API のコンシューマーキー発行
- サーバー API の Server Token

手順はこちらのページの情報を参照します。
https://developers.worksmobile.com/jp/document/1002002?lang=ja

###Bot 登録
Bot メニューで [登録] ボタンをクリックし、以下の項目を入力し、保存をクリック
- Bot名 -> 任意の名前
- 「説明」-> 任意の説明文
- Callback URL -> Microsoft Flow の Http 受信時の要求で生成された URL
- 複数人のトークルームに招待可 -> off
- 管理者 -> 任意のメンバーを指定

登録すると Bot No. が生成されます。

API 認証の情報と、Bot No. を Runbook のスクリプトに記述します。

なお、同報用のメッセージを受け付けるボットと、配信を行うボットは別にした方が利用者側で混乱しづらいかもです。お好みに応じて工夫してください。配信専用のボットを別にする場合は、そちらは Callback URL の設定は不要です。

##LINE WORKS 管理画面での作業
LINE WORKS の管理画面の [サービス]-[Bot] メニューで当該 Bot を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/88b61306-a9d3-d7a1-192d-df77d9b985fe.png)

##動作確認
LINE WORKS でメッセージ受付 Bot にメッセージを送ると、配信 Bot から受信者向けに個別のトーク メッセージが送られることを確認します。