cybozu developer network

カテゴリー内の他の記事

LINE WORKSのトークをkintoneに保存する方法

Index

はじめに

ビジネス版のLINE「LINE WORKS」とkintoneを連携させます。
今回、kintoneはLINE WORKSのトーク情報を保存するデータベースとして利用します。

image1.png

一般的に フロー型 と呼ばれるLINE WORKSと、 ストック型 と呼ばれるkintoneのコラボレーションです!

概要

今回はLINE WORKSとkintoneの間にAWSを使います!

image2.png

処理の流れは以下のようになります。

  1. LINE WORKSのBotのCallbackによって、Amazon API Gatewayを動かす
  2. AWS LambdaでLINE WORKSの情報を取得する
  3. LINE WORKSの情報をkintoneへPOSTする

kintoneの設定

kintoneアプリの作成

LINE WORKSのCallbackメッセージに含まれるトーク発言者とトーク内容をkintoneに登録したいと思います。
LINE WORKSのCallbackの詳細はこちら(外部サイト)をご確認ください。

フィールド名 フィールドタイプ フィールドコード

トーク発言者

文字列(1行)

Name

トーク内容

文字列(複数行)

Contents

作成日時

作成日時

作成日時

アプリのフォーム画面はこちらです。

image14.png

APIトークンの生成

今回はkintoneの認証にAPIトークンを利用したいと思います。認証についてはこちらをご覧ください。 
生成するAPIトークンは後ほどLambdaのプログラム内で必要になるのでメモしておいてください。

アプリの管理画面から設定タブをクリックし、APIトークンの画面を開きます。

image3.png

今回はkintoneへのレコード新規登録を行いたいので、生成ボタンをクリックしてレコード追加にチェックを付けます。
(ここで生成されたAPIトークンをメモしておいてください)
image4.png

その後、「保存」をクリックして「アプリを更新」をクリックします。これでAPIトークンの生成は完了です。
※アプリの更新は忘れがちなので注意してください!

AWSの設定

AWSマネジメントコンソール からコンソールへログインします。
AWSサービスの検索窓から使用するサービスを検索してください。
AWS_Management_Console_2021-11-16_08-12-48.png

Lambda関数の作成

先ほどのAWSサービスから「Lambda」を検索してLambdaの画面を開き、「関数の作成」を選びます。
関数名はわかりやすく「LINEWORKS_kintone」とします。
(ここは実際に使用する状況によって適宜変更してください。)
Lambda_2021-11-16_08-03-38.png

 

Lambda関数の雛形を先に作っておきます。下の画面が表示されれば大丈夫です。
LINEWORKS_kintone_-_Lambda_2021-11-16_08-15-29.png

API Gatewayの設定

先ほどのAWSサービスから「API Gateway」を検索してAPI Gatewayの画面を開き、「REST API」の「構築」を選びます。
API_Gateway_2021-11-16_08-18-36.png


プロトコルは「REST」、新しいAPIの作成は「新しいAPI」を選択します。API名はわかりやすく「LINEWORKS_kintone」とします。
(ここは実際に使用する状況によって適宜変更してください。)
API_Gateway_2021-11-16_08-21-37.png


APIが作成されるので、作成したAPIを選択して上部のアクションから「メソッドの作成」を選びます。
image9.png

 

今回はLINE WORKSから受け取ったデータをkintoneへPOSTしたいので、メソッドはPOSTを選びます。
そして、Lambdaプロキシ統合の使用にチェックをつけ、関連付けるLambda関数名(LINEWORKS_kintone)を入力します。
image10.png

 

次に、作成したAPIのデプロイを行います。
上部のアクションからAPIのデプロイを選択します。
image11.png

 

デプロイされるステージを選択する画面になるため、過去ステージを設定している場合はそれを選んでいただき、
新しいステージを作成する場合は「新しいステージ」を選択してステージ名を入力します。
(今回は開発用としてdevというステージを作成しています。)
image12.png

Lambda関数プログラムの作成

実際にLambda上で動かすプログラムを作成します。
Lambdaはzipファイルでアップロードすることができるので、あらかじめローカルで作成しておきzip化したものをアップロードします。

今回はNode.jsでプログラムを書きたいと思います。kintoneへのPOST部分はnode-fetchモジュールを使用するため、
npmでnode-fetchモジュールをインストールしておいてください。
※ Commonjsで動作させるため、今回はnode-fetchのv2を利用しています。

npm install node-fetch@2

・index.js

作成したindex.jsとnode_modulesをzip化してLambdaへアップロードします。
image13.png

API GatewayのURL取得

Lambda上のAPI GatewayトリガーからURLを取得します。
このURLにアクセスするとLambda関数が実行される仕組みとなっています。
LINEWORKS_kintone_-_Lambda_2021-11-17_09-25-31.png

LINE WORKSのBotの設定

次にLINE WORKS側でBotの作成、および適用をします。

API IDの発行

API IDが未発行の場合は、下記のヘルプに従い、API IDを発行してください。
Developer Console に API ID が表示されている場合、API ID の発行は不要です。

API 認証の準備

※API ID が発行されていないと、LINE WORKSのBotからAmazon API Gatewayにメッセージが送信されないので注意ください。

Botの作成

LINE WORKSの管理者アカウントでLINE WORKS Developer Consoleを開きます。
Developer ConsoleからBotを開いて、登録を選択します。
image17.png

 

「Bot名」、「説明」を入力します。
「Callback URL」のOnにチェックをつけ、URLに先ほどAPI GatewayのURLを入力します。

また、Botポリシーの「複数人のトークルームに招待可」にチェックをつけることで、
複数人のメッセージのやりとりを全てkintoneへ登録できるようになります。
LINE_WORKS_Developers_2021-11-17_09-33-55.png

Botの適用

LINE WORKSの管理者アカウントでLINE WORKS Adminを開きます。
左のメニューの「サービス」から「Bot」を開き、「Bot追加」を選択します。

Admin_2021-11-17_09-42-04.png

先ほど作成したBotが一覧に表示されるので、選択し「Bot追加」を選択します。
Admin_2021-11-17_09-44-57.png

 

そして、追加したBotを選択し、公開にチェックを付けて保存します。
Admin_2021-11-17_09-46-59.png

これでBotの適用は完了です。

動作確認

LINE WORKSのトークルームに作成したBotを招待します。
あとはBotを気にせずトークをするだけです。
image26.png

 

トーク発言日時(レコード登録日)、トーク発言者、トーク内容がkintoneに登録されています!
image24.png

 

ちなみに、
kintoneの文字列(複数行)フィールドを利用することで、きちんと改行もされています。
image25.png

 

発展

今回はLINE WORKS → kintoneの一方通行の連携でしたが、
「トークの内容をもとにkintone上のデータをGETして、LINE WORKSにPOSTする」といういわゆるチャットBotの連携も可能となります。

LINE WORKSにトークを送信するためにはサーバーAPIの設定が必要です。
サーバーAPIを利用するためには、

  • サーバーの固定IPアドレスを利用したトークン認証
  • OAuth認証を利用したトークン認証

のどちらかをサーバー上で設定する必要があります。

詳しくはLINE WORKSのドキュメント(外部サイト)をご覧ください。

おわりに

LINE WORKSからCallbackで受け取ったデータをAWS Lambdaで整形してkintoneに登録する仕組みの紹介でした。
やりとりはLINE WORKS、履歴はkintoneと使い分けることでお互いのいいとこ取りができますね!

設定は多いですが、仕組みはシンプルなのでぜひトライしてみてください!

このTipsは、2021年11月版 kintoneで確認したものになります。

 

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
Toshi Akazawa

貴重な記事、ありがとうございます。

「Lambda関数プログラムの作成」の項の「作成したindex.jsとnode_moduleをzip化してLambdaへアップロードします」を次のように修正されてはどうでしょうか。特にフォルダ名が単数形なのが気になります。複数形が正しいかと思います。

「作成したindex.jsとnode_modulesフォルダをzip化してLambdaへアップロードします」

以下は余談的メモです。次のコマンドで lineworks.zip を作りました。

zip -r lineworks.zip index.js node_modules/

 

Avatar
Toshi Akazawa

それとこちらで、https.request を使った貴重なコードを見つけました♥

Avatar
cybozu Development team

Toshi Akazawa 様

お世話になっております。cybozu developer network 事務局です。

記事へのフィードバックをくださりありがとうございます。
また、参考情報もありがとうございます。
いただいたフィードバックの内容を元に記事の修正を検討いたします。

今後ともよろしくお願いいたします。

Avatar
喜田 晃大

こんにちは。

上記のコードで試してみると、送信元メンバーアカウントがundefinedになるのですが何が原因なのでしょうか?

Avatar
cybozu Development team

喜田 晃大様

お世話になっております。cybozu developer network 運営でございます。

こちら、コードのお間違いや設定のお間違いなどはございませんでしょうか?
でしたら、可能性としては現在LINEが提供しているAPIのバージョンが1.0から2.0へと変わっており、その影響の可能性もございます。

その場合、こちらのAPI2.0リファレンスにあるとおり「accountId」ではなく「userId」とLambdaのコード上修正するとユーザー情報が取得できるかもしれません。

申し訳ございませんが、現時点では未検証のため、保証はできかねますが、
社内にフィードバックし記事内容を検討いたします。

よろしくお願い致します。

Avatar
喜田 晃大

cybozu developer network 様

返信ありがとうございます。

「accountId」を「userId」に修正したところユーザー情報取得できました!

ありがとうございました。

サインインしてコメントを残してください。