知識創造研究室 by CRM(xRM)

CRMリーディングカンパニーである アーティサン株式会社 CRM事業部 の最先端 CRM ブログです。

Microsoft Flowを使ってDynamics CRMとつないでみよう SNS編 その3

time 2017/02/27

皆様こんばんは。
今週は土日ともに何故か仕事をしている私です(笑)
忙しさのあまりブログの更新が遅れてしまいました・・・言い訳です(笑)

さて今回は候補が2つあって悩みましたが、前々からやろうと思っていたLINEとの接続に挑戦しました!
とはいえ、Microsoft FlowではLINE用のアダプタはありませんので別の方法で通信します。他にも今回は細々新しいテクニックを使っていますのでこうご期待!!

準備

今回は色々と事前準備が必要です。必要ですが・・・ここでは全てそろっている前提で話を進めます。
必要なものは下記となります。

  • LINEのアカウント
  • LINE MESSAGE APIの有効化
  • Dynamics CRMへLINEのデータを格納する活動エンティティ
  • Dynamics CRMの取引先担当者にLINE IDを入れるフィールド

作り方

まずは定番の一から作成


ここはもう語ることは何もありませんね。作りたいなら押すしかない!

何かを要求


LINEからのPOST通知を受け取るためのURLを作成しますので「要求と応答 – 要求」を追加します。最初はURLが空ですが大丈夫です。フローを保存すればURLが作成されます。ここで作成されたURLをLINEのWebHookURLとして登録する必要があります。

スキーマの設定


「要求本文のJSONスキーマ」にLINEサーバーから送られたRequestのBodyを読み込めるようにJSONスキーマを設定します。

{
	"$schema": "http://json-schema.org/draft-04/schema#",
	"type": "object",
	"properties": {
		"events": {
			"type": "array",
			"items": {
				"type": "object",
				"properties": {
					"replyToken": {
						"type": "string"
					},
					"type": {
						"type": "string"
					},
					"timestamp": {
						"type": "integer"
					},
					"source": {
						"type": "object",
						"properties": {
							"type": {
								"type": "string"
							},
							"userId": {
								"type": "string"
							}
						},
						"required": [
							"type",
							"userId"
						]
					},
					"message": {
						"type": "object",
						"properties": {
							"id": {
								"type": "string"
							},
							"type": {
								"type": "string"
							},
							"text": {
								"type": "string"
							}
						},
						"required": [
							"id",
							"type",
							"text"
						]
					}
				},
				"required": [
					"replyToken",
					"type",
					"timestamp",
					"source",
					"message"
				]
			}
		}
	},
	"required": [
		"events"
	]
}

下記を参考にしています。

  • LINE API Reference – Messaging API内のWebhookエンドポイントを開き右側の「Webhook request bodyの例」
  • 上記のJSONをコピーしてjsonschema.net等のサイトを利用したりしてJSONスキーマを生成
帰ってくるジェイソンを定義


「JSONの解析」を追加します。先ほど作成したスキーマからデータの定義部分だけを抽出して設定します。
コンテンツ:@triggerBody()[‘events’][0]
      トリガーから送られてきたデータのeventsに入っている0番目のデータを指定しています。
スキーマ:

{
	"type": "object",
	"properties": {
		"replyToken": {
			"type": "string"
		},
		"type": {
			"type": "string"
		},
		"timestamp": {
			"type": "integer"
		},
		"source": {
			"type": "object",
			"properties": {
				"type": {
					"type": "string"
				},
				"userId": {
					"type": "string"
				}
			},
			"required": [
				"type",
				"userId"
			]
		},
		"message": {
			"type": "object",
			"properties": {
				"id": {
					"type": "string"
				},
				"type": {
					"type": "string"
				},
				"text": {
					"type": "string"
				}
			},
			"required": [
				"id",
				"type",
				"text"
			]
		}
	},
	"required": [
		"replyToken",
		"type",
		"timestamp",
		"source",
		"message"
	]
}
ここで一度保存


フロー名を入力して保存します。保存が完了すると先ほどの要求で空だったURLが作成されます。

投稿してきたユーザーの表示名を取得


REST APIを使用してLINEサーバーにユーザー情報を問合せします。ここでは設置したアクションの名前を「HTTP」から「LINEユーザーの表示名を取得」に変更しています。このように名前を付けることでそれぞれの出力が分かりやすくなるのでオススメです。
方法:GET
URI:https://api.line.me/v2/bot/profile/[JSONの解析からuseridを指定]
   これまでは動的な値を単純に指定するだけでしたが、このように文字列と組み合わせて使う事もできます。
ヘッダー:{ “Authorization”: “Bearer [Channel Access Token]” }
     LINE MESSAGE APIで指定されているTokenを指定します。

再びジェイソン登場


コンテンツ:「LINEユーザーの表示名を取得から本文」を選択
スキーマ:

{
	"type": "object",
	"properties": {
		"displayName": {
			"type": "string"
		}
	}
}
取引先担当者から投稿者を検索


LINEユーザーがすでに登録済みかどうかを調べるために検索処理を行います。
組織名:アーティサン株式会社
    ここは契約中の組織名になります
エンティティ名:取引先担当者
        LINEユーザーを保存する(している)エンティティを指定します
フィルタークエリ:blog_lineid eq ‘「JSONの解析からuseridを選択」’
最大取得数:1
      最初の1件のみ取得します

投稿者の有無によって処理を分岐


上で取得したレコードの件数をカウントしてデータの有無を調べます
条件:@greaterOrEquals(length(body(‘取引先担当者を検索’)?[‘value’]), 1)
   カウント結果が1以上かを判定します。lengthでレコード数をカウントしています。

担当者がないなら作ればいいじゃない


判定の結果いいえの場合(1ではなかった)の処理を作成します。
まずは新しく取引先担当者を作成します。
組織名:アーティサン株式会社
    ここは契約中の組織名になります
エンティティ名:取引先担当者
        LINEユーザーを保存する(している)エンティティを指定します
性:「JSONの解析2からdisplayNameを設定」
  LINEユーザーの表示名を設定します
LINE ID:「JSONの解析からuseridを設定」
     次回から既存ユーザーかどうかを判定するためにLINEのユーザーIDを取得します


上で作成したユーザーに関連付ける形でLINEの投稿データを保存します
組織名:アーティサン株式会社
    ここは契約中の組織名になります
エンティティ名:LINE
        LINE投稿データを保存する(している)エンティティを指定します
件名:「JSONの解析からtextを選択」
   投稿されたメッセージを設定します
関連:「取引先担当者を作成から取引先担当者を選択」
   上で作成したデータのGUIDを設定します
関連type:contacts
     取引先担当者と関連付けます

既存の担当者に投稿を紐づけ


判定の結果はいの場合(1以上だった)の処理を作成します。
Dynamics CRMから検索してきたデータは配列になっているため、データの作成を設置し必要な項目を読み込みます。
入力:@body(‘取引先担当者を検索’)?[‘value’][0].contacted

検索で見つかった取引先担当者に関連付ける形でLINEの投稿データを保存します
組織名:アーティサン株式会社
    ここは契約中の組織名になります
エンティティ名:LINE
        LINE投稿データを保存する(している)エンティティを指定します
件名:「JSONの解析からtextを選択」
   投稿されたメッセージを設定します
関連:「取引先担当者のIDを取得から出力を選択」
   上で検索したデータのGUIDを設定します
関連type:contacts
     取引先担当者と関連付けます

画面で確認


実際にラインからメッセージを投稿してみましょう。初めて投稿する場合は新たに取引先担当者が作成され、活動にLINEメッセージが登録されます。2回目以降は取引先担当者は既存のものにLINEメッセージが追加されていきます。

最後に

今回はFunctionや配列、HTTP通信やJSONリクエスト等これまでになく小難しい印象があると思いますが、このあたりが分かってくるとMicrosoft Flowでできる事もグッと広がってきますので恐れずに使ってみましょう!

次回は今回とは逆にDynamics CRMからLINEにデータを送る部分を作ってみたいと思います!!

The following two tabs change content below.
地方企業での十数年の下積みでプログラミング、ネットワーク、インフラ、サーバー、保守、運用、営業、提案等と一通りの経験を積み広くそんなに深くなくIT関連の知識と業務経験を得て、現在はDynamics CRMを主体に様々なサービスを使ってお客様を満足させるべく日々奮闘しています。 最近では玉子が先かニワトリが先かという永遠のテーマと奮闘しています。モバイルゲーム制作にもちょっとずつお触り中!

最新記事 by Hiroaki Sakurada (全て見る)

down

コメントする