Salesforce で商談の状況が変わったら LINE WORKS のトーク Bot で通知

Salesforce のレコードの登録や変化を LINE WORKS のトーク Bot API を利用して通知してみます。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/784ce3af-1bba-0f87-2910-678fbcc7c7d3.png">


##Salesforce

Microsoft Flow の Salesforce コネクタを用いて、レコードの作成や変更をトリガーに指定できます。

Salesforce は開発者サイトでサインアップすると、Developer Edition が利用できるので、テストなどには、これを利用しましょう。
https://developer.salesforce.com/ja/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/591e0997-653c-2d1d-515a-6aa62fa3d3eb.png)

Salesforce の設定や操作については、Salesforce やその他サイトの各種情報を参照しましょう。


##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 のスクリプトは、ユーザー 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 の準備

###Salesforce の "レコードが変更されたとき" をトリガーとして作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/ef0b9dfe-23ff-35df-722d-d562d831ce7e.png)

対象とする Salesforce オブジェクトの種類を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/1e5aeabe-7279-6329-70f8-95efd95d229c.png)

###Azure Automaiton をアクションとして追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/e80c4401-5abe-bd35-c89a-96463887e583.png)

ここでは、[ジョブの作成] を選択します。

サブスクリプション、リソース グループ、Automation アカウント、Automation のハイブリッド worker グループ、Runbbok 名、ジョブの待機、パラメータを指定します。Runbook Parameter でトークメッセージに含める情報を、"動的なコンテンツの追加" で選択できます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/248c5853-d08c-d7ed-69a6-bd9e5956de0b.png)

##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
- 管理者 -> 任意のメンバーを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/99b93276-1d5f-7954-38de-a4426cc2ad46.png)

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

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

##LINE WORKS 管理画面での作業
LINE WORKS の管理画面の [サービス]-[Bot] メニューで当該 Bot を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/af1994cc-d171-9088-a201-5c13652be13d.png)

追加後、Bot の詳細で、Bot の使用権限や公開設定を用途に応じて行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/c4265c0d-6f25-49c7-3263-8034f85d4c53.png)

##動作確認
Salesforce で対象となるレコードを更新します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/5bf847e7-2138-2de2-7bd7-a868a1bce5e4.png)

LINE WORKS に通知が届くことを確認します。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/45bce8f0-3e61-1da3-35c0-4983c07324d9.png">