directのAPIでチャット内容を取得したり自動投稿してみた

# はじめに
こんにちは、すぎもんです:grinning:

近年、建設業を中心に[direct](https://direct4b.com/ja/)がビジネスチャットのツールとして普及しています。directはフィールドワークに最適化されており、現場の声を反映した機能を多数搭載しています。様々な現場での利用が進む中、自動化のニーズも高まっています。この記事ではHULFT SquareとdirectのAPIを用いて、チャットの内容を自動的に取得したり、自動投稿を行う方法を紹介します。この方法を実践することでdirectのチャット内容を生成AIの元データとして活用したり、別のシステムからの出力をdirect上へ自動で投稿することができます。

# 今回やること
### A．direct上のチャット内容を取得
directのAPIを使ってHULFT Squareでチャット内容を取得します。direct上でやり取りしているチャット内容を汎用的に扱いやすいCSV形式のファイルで出力する処理を作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c122709a-0f32-e9a4-8645-739dcc6b3598.png)

### B．別システムから受け取った情報をdirectに自動投稿
同じくdirectのAPIを使って、他システムからデータ受け取ったことを検知して、内容をdirect上に投稿します。今回は他システム出力結果をCSVファイルとし、その内容をdirect上に投稿します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bb793fc8-d631-528f-16e4-fcdfc3d20b06.png)


# directとの連携をするために必要な設定
### direct側の作業
１．direct上でアプリケーションを登録
２．アクセストークンの取得
### HULFT Square側の作業
３．コネクションの設定
４．チャット内容取得
５．チャット自動投稿

# direct側での作業
### １．direct上でアプリケーションを登録
API を利用するのに必要なクライアント ID とクライアントシークレットを払い出すためのアプリを登録します。
directアプリケーション登録画面のURLに関しましては、direct REST API 仕様をご確認ください。
「アプリケーション名」、「サイトURL」、「リダイレクトURL」に適当なものを設定します。この設定項目は今回は使用しません。特に希望が無ければ画像と同じものを設定ください。「アプリケーション連携サービス」ご利用にあたっての注意事項をよく読んで登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6291aa5b-e1b7-1d98-f776-46458f0eccd3.png)
登録すると「Client ID」、「Client Secret」が払い出されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/79272ad5-6273-328e-abe1-accb6f359148.png)

:::note info
ここで登録/取得した「Client ID」、「Client Secret」は後にアクセストークンを取得する際につかいます
:::

### ２．アクセストークンの取得

directから提供されるアクセストークン発行のためのシステムにて「１．direct上でアプリケーションを登録」で取得した「Client ID」、「Client Secret」を使ってアクセストークンを発行します。アクセストークン発行のためのシステムについては、directにお問い合わせください。

# HULFT Square側の作業

### ３．コネクションの設定
directのAPIをコールするためのURLを設定します。
RESTコネクターを選択して下記の内容を登録します。
| 設定項目 |  設定値 |
|:-----------|:------------:|
| 名前       |  direct接続検証        |
| URL    | `<エンドポイントURL>`|

エンドポイントURLに関しましては、direct REST API 仕様をご確認ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2f9a1181-6670-ac00-d953-ba41bbf98993.png)


### ４．チャット内容取得
ここからはHULFT Squareのデザイナー画面を開き作成します。まずはチャットの内容を取得します。
#### 4-1.GET実行処理(メッセージ一覧取得)
ここではメッセージ一覧を取得するアイコンを配置します。
まずは、**GET実行アイコン**を配置します
「ツールパレット > ネットワーク > REST > GET実行アイコン」をドラッグ＆ドロップするとポップアップが出てきます。
➀「必須設定」タブ
接続先：`direct接続検証　※「3.コネクションの設定」` 
パス：`<メッセージ一覧取得APIのリクエストURL>`

メッセージ一覧取得APIのリクエストURLはdirect REST API 仕様をご確認いただきます。その中にございます`<TALK_ID>`は取得したいdirectトークのURLから確認可能です。下記のようにURL末尾についている数字列が`<TALK_ID>`です。
`https://direct4b.com/home#/<DOMAIN_ID>/talks/<TALK_ID>`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d42f7a5d-5b71-043f-4e5e-7be43ee69a01.png)

➁「レスポンス設定」タブ
データ入力元：`● データ`
データ形式：`JSON`
自動でリダイレクトする：`☑`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/43302716-ab99-0f97-3785-410f4aebc85e.png)

➂「ヘッダ設定」タブ
「リクエストヘッダ」で追加を押し下記を設定
`Authorization` : `<２．アクセストークンの取得で取得したアクセストークン>`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8af54386-aefd-623e-f111-acb0d776ef41.png)

#### 4-2.CSV書き出し
CSVへ書き出す設定を行います。**CSV書き込み**を配置します
「ツールパレット > ファイル > CSV > CSV書き込み」をドラッグ＆ドロップするとポップアップが出てきます。
「必須設定」タブ
ファイル：`<任意のファイル保存先>` 
「列一覧」で追加を押し下記を設定します。APIで取得できる要素はいくつかありますが、今回は下記3項目を書き出します。
`投稿日`
`ユーザID`
`内容`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c3bd8e05-f827-a1ed-f680-1740ddf045ea.png)

#### 4-3.mapping
4-1で配置した「メッセージ一覧取得」アイコンから4-2で配置した「CSV書き出し」アイコンへドラック＆ドロップで線を繋ぎます。
その際、「フローを引く」ダイアログが表示されるので、「プロセスフローとデータフローを引く」、マッピングを追加するに☑を入れ、OKを押下します。すると「mapping」アイコンが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/faf07d55-a4fc-9ca4-e28c-27e2c8d9b01b.png)
また下記のように処理の始まりの「Start」アイコンや処理の終わりの「end」アイコンにも線を繋ぎ処理の流れを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/39c290e5-8ff7-8af5-ab30-8046baa52d5a.png)
「mapping」アイコンをダブルクリックで開き、今回取得したい「投稿日」、「ユーザID」、「内容」を取得するためドラック＆ドロップで線を繋ぎます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/61a5402d-eb8a-ee7a-0055-1526d475a5db.png)
ここまでで処理が完成しました。
#### 4-4.実行結果確認
画面上「実行ボタン」から実行します。
正常にCSVファイルに書き込み出来ていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/154bcc90-fc84-b261-e8ef-ea434c33d33e.png)


### ５．チャット自動投稿
次はチャットを自動投稿します。他システムから下記のような受注一覧のファイルが出力されたとします。これをdirectのチャットへ投稿します。CSVファイルはHULFT Square上の任意のフォルダパスにアップしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9edc8290-6590-87da-74b3-8f51db40181d.png)

#### 5-1.CSVファイル読み取り
まずは、**CSV読み取り**を配置します
「ツールパレット > ファイル > CSV > CSV読み取り」をドラッグ＆ドロップするとポップアップが出てきます。

➀「必須設定」タブ
ファイル：`<読み取りたいCSVファイルのパス>` 
列一覧：`<列一覧の更新ボタンを押下し、CSVファイルをもとに自動入力>`　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e5fcc826-f0bc-6973-9f82-9cfd771c1de0.png)

➁「読み取り設定」タブ
最初の行は値として取得しない：`☑` 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/61eb260f-6b9c-c1d1-c64a-1a85cdb85727.png)

#### 5-2.POST実行処理(メッセージ投稿)
ここではメッセージを投稿するアイコンを配置します。
まずは、**POST実行アイコン**を配置します
「ツールパレット > ネットワーク > REST > POST実行アイコン」をドラッグ＆ドロップするとポップアップが出てきます。
➀「必須設定」タブ
接続先：`direct接続検証　※「3.コネクションの設定」` 
パス：`<メッセージ投稿APIのリクエストURL>`
メッセージ投稿APIのリクエストURLはdirect REST API 仕様をご確認いただきます。その中にございます`<TALK_ID>`については4-1を参照ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/797954e1-a05b-683f-0ff0-48f4618ecceb.png)

➁「リクエスト設定」タブ
データ入力元：`● データ`
データ形式：`JSON`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/989cdf44-8012-fa92-da06-bb03debdb4c9.png)

➂「ヘッダ設定」タブ
「リクエストヘッダ」で追加を押し下記を設定
`Authorization` : `<２．アクセストークンの取得で取得したアクセストークン>`
`Content-Type` : `application/json`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/fb41798e-9b13-a778-40e1-825c1556882e.png)

#### 5-3.繰り返し(データ件数)
CSVファイルの1行につき1つのメッセージを投稿したいので、**繰り返し データ件数**を配置します
「ツールパレット > 基本 > フロー > 繰り返し(データ件数)」をドラッグ＆ドロップするとポップアップが出てきます。初期値から変更する必要はございませんので、「完了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3b6a7e44-d16d-f7e4-f36f-6bd39cd23b07.png)

#### 5-4.mapping
5-3で配置した「繰り返し(データ件数)」アイコンから5-1で配置した「メッセージ投稿」アイコンへドラック＆ドロップで線を繋ぎます。
その際、「フローを引く」ダイアログが表示されるので、「プロセスフローとデータフローを引く」、マッピングを追加するに☑を入れ、OKを押下します。すると「mapping」アイコンが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/faf07d55-a4fc-9ca4-e28c-27e2c8d9b01b.png)
また下記のように処理の始まりの「Start」アイコンや処理の終わりの「end」アイコン、5-2で配置した「CSV読み取り」アイコンにも線を繋ぎ処理の流れを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/039b0ffd-0eb9-4269-7fe2-c2c118a77421.png)

「mapping」アイコンをダブルクリックで開き、投稿したいメッセージの形式に加工し、メッセージ投稿アイコンへ渡るようにします。今回は下記のように設定しました。
「<商品名><個数>この注文が入りました。単価は<単価>円で合計金額は<個数×単価>円です」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2ee03162-1288-f29c-a95b-ddda7f309d8c.png)

#### 4-4.実行結果確認
画面上「実行ボタン」から実行します。
正常にdirect上のチャットへ投稿出来ていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ebb7f0ed-87c5-6b12-fa91-797849c31d24.png)

# 最後に
いかがでしたでしょうか。今回は、directからHULFT SquareでデータをCSVファイル形式で取得したり、自動的に投稿したりしてみましたが、データベースや他のSaaS製品とdirectを連携させることで活用の幅が広がるのではないでしょうか。
また、HULFT Squareはファイル転送ソフトであるHULFT8と連携してオンプレミス環境にそのままファイルを転送させることも可能です。
[HULFT Squareについて知りたい方はこちら](https://www.hulft.com/service/hulft-square)