警告
- 記事内で利用しているライブラリ「
request-promise
」は、非推奨(deprecated)になりました。
HTTPリクエストができる他のライブラリ( axiosなど)や、 https.requst
に書き換えることをおすすめします。
- Moment.jsはメンテナンスモードになり、
日付処理できる代替ライブラリへの移行
が推奨されています。
代替ライブラリのひとつ Luxonについては、 kintoneカスタマイズでの導入方法の紹介記事 があります。
はじめに
緊急な来訪で今すぐ会議室を抑えておきたいケースがあると思います。
グループウェアが未導入だと担当者に電話で確認したり、会議室前の予約用紙にサインしたりと面倒ですが、グループウェアを導入済みでもパソコンを立ち上げたり、空き状況を検索したりと意外と手間もかかります。
そこで、今回はクラウドベースのコラボレーションサービス『
Cisco Webex Messaging
』と大規模向けグループウェア『
Garoon
』を連携することで、簡単に空き部屋を見つけて予約するTipsを紹介します。
システム構成図
Cisco Webex MessagingとGaroon on cybozu(以下Garoon)のAPIを連携させるために、今回はAWS Lambdaを利用しました。
Cisco Webex Messagingとは
- 1対1から複数メンバーによるグループのメッセージまで、シームレスに会話が成り立つ。
- モバイル、パソコン専用のCisco Webex Messagingアプリがあり、複数のデバイス利用が可能
- RESTfulなAPIがそろっており、Webhookも搭載
そのほか多くの特徴があります
Cisco Webex Messagingのサイト
で確認してください。
下準備
Garoon
- 必要に応じて施設を登録してください。
- API実行用のユーザーを1つ用意してください。
Cisco Webex Messaging
- Cisco Webex Messaging上に結果を表示するためのbot用のアカウントを用意してください。
- 専用の会議室を1つ用意してください。
- Cisco Webex MessagingのAPI情報は
こちら
のページです。
Node.jsのJavaScriptファイル
- 後述の index.js , garoonapi.js の内容をコピーして配置してください。
- request-promise, moment, cheerioを使用していますので、必要に応じて
npm installでインストールしてください。
環境を作成する
アップロード用Zipファイルの作成
index.jsを開いて、以下の項目を記入して保存します。
|
|
| 項目 | 設定値 |
|---|---|
| ROOMID | Cisco Webex Messagingの会議室のID List Rooms Test ModeをOnにして(ログインする必要あり) Runをクリックすると、会議室の情報がResponseに表示されます。 Responseの中から、該当する会議室のIDを取得してください。 |
| BEARER | Cisco Webex MessagingのbotアカウントのAccess Token Webex for developer 【補足】 OAuth 2.0を利用した認証も可能です。複数のアカウントに関連する操作を行いたい場合や、APIへのアクセス権を制限したい場合などには、OAuth 2.0を利用する必要があります。 詳細は、 Integrations & Authorization |
| DOMAIN | kintoneのドメイン |
| SPARK_MADDRESS | Cisco Webex Messagingのbotアカウントのメールアドレス |
同様にGaroonpi.jsを開いて、以下の項目を記入して保存します。
|
|
| 項目 | 設定値 |
|---|---|
| USERID | API実行ユーザーのログイン名 |
| PASSWD | API実行ユーザーのパスワード |
最後に、以下のコマンドで、zipファイルを作成します。
zipファイルの名前は、SparkGSch.zipとします。
|
|
AWSの設定(Lambda, API Gateway)
Lambdaの設定
AWSのコンソールにログイン後、Lambdaを選択し「Create a Lambda fuction」をクリックします。
今回blueprintは指定せず「skip」を押します。
Configure functionは以下のように設定しました。
| 大項目 | 中項目 | 設定値 |
|---|---|---|
| Configure function | Name | slackinSample |
| Description | This is a sample. | |
| Runtime | Node.js | |
| Lambda function code | Code entry type | Upload a Zip fileにて先ほど作成した「SparkGSch.zip」をアップロードします。 |
| Lambda function handler and role | Handler | index.handler |
| Role | Basic execution roleよりIAMロールを新規に作成 | |
| Advanced settings | Memory(MB) | 128 |
| Timeout | 0min 3sec |
これで、設定したら「Next」>「Createfunction」を押します。
Lambda functionの作成はこれで完了です。
この段階でテストしてもエラーがでるかと思いますが、気にせず次に進みます。
Lambdaの設定の注意点
- Run TimeでNodeのバージョンが指定できます。
最新バージョン(記事作成時点では、Node.js 4.3)を指定することをおすすめします。 - Advanced settingsのTimeoutは0min 20secとしてください。
環境によりますが7~8秒かかる場合もあります。
Amazon API Gatewayの設定
AWSのコンソール画面で「Amazon API Gateway」を選択後、「Create API」よりAPIを作成します。
今回は以下のように設定しました。
| 項目 | 設定値 |
|---|---|
| API name | slackinAPI |
| Clone from API | Do not clone from existing API |
| Description | sample API |
「Create API」ボタンを押して画面遷移後、「Create Resource」より以下の設定でリソースを作成しました。
| 項目 | 設定値 |
|---|---|
| Resource Name | slackin |
| Resource Path | slackin |
次に、セットアップ画面で以下を設定します。
今回はSlackからPOSTされるので「Create Method」より、「POST」を作成します。
設定情報として以下を設定します。
| Integration type | Lambda Function |
|---|---|
| Lambda Region | Lambda Functionがある任意のregion |
| Lambda Function | slackinSample |
「Save」を押すと、Permission設定が出るので「OK」を押します。
SlackからのOutgoing Webhooksをトリガーにする場合、API Gatewayの設定でContent-Typeを指定しておく必要があります。
Integration Requestの設定から、「Mapping Templates」を開きapplication/x-www-form-urlencodedに対して、Mapping Templateで以下を指定します。
|
|
参考:
API Gateway Mapping Template Reference
次にこのAPIをデプロイします。
「Deploy API」ボタンを押します。
今回は以下の設定でデプロイしました。
| 項目 | 設定値 |
|---|---|
| Deployment stage | New Stage |
| Stage name | slackinstage |
| Stage description | My first stage |
| Deployment description | This is my first deploy |
デプロイしたら、Invoke URLをコピーしておきます。
Invoke URLの中にDomain名、Stage名、Method名が含まれていることを確認してください。
|
|
Cisco Webex Messaging Webhookの設定
Webex for DevelopersのCreate a Webhook
より、Webhookを作成します。
Test ModeをOnにして(ログインする必要あり)、以下の項目を入力後、Runをクリックしてください。
| 項目 | 設定値 |
|---|---|
| name | 今回作成するWebhookの名前(任意) |
| targetUrl | API GatewayのInvoke URL |
| resource | messages(固定) |
| event | created(固定) |
| filter | roomId=(Cisco Webex Messagingの会議室のID) |
List Webhooks
Get Webhook Details
から作成したWebhookを確認できます。
確認する
Cisco Webex Messagingの会議室から実際に確認してみましょう。
警告
必ず、bot以外のアカウントで確認してください。
botアカウントで確認した場合、プログラムは作動しません。
施設の空きを検索する
いまから1時間空いている施設を検索する場合は、「1時間で検索して」と入力します。
スクリーンショットはパソコン版の画面です。
数秒待つとbotがスケジュールの空き状況を教えてくれます。
施設を予約する
先ほどの検索結果より、会議室Bを1時間予約したいと思います。
会議室Bは[2]ですので、以下のように入力します。
数秒待つとbotから、会議室を予約しましたとメッセージが返ってきます。
実際に、Cybozu Garoonで施設のスケジュールを見てみます。
実行した時から1時間の時間帯で、会議室Bが予約されていることを確認できます。
応用編
今回は、現在の時刻から検索・予約する方法を紹介しました。
たとえば施設名に収容員数を含ませることで、人数による絞り込みができたり、施設を検索・予約する際に時間を指定したりするなど、いろいろカスタマイズしてオリジナルのシステムを構築できます。
今後の展開
リアルタイム性を活かして、今すぐ知りたい、教えてくれるサービス展開ができそうです。
- 朝に自分の今日の予定をCisco Webex Messagingで取得する。
- 他の人の予定を取得する。
JavaScript
index.js
|
|
garoonapi.js
|
|
このTipsは、2016年4月時点のGaroon, Cisco Webex Messagingで動作を確認しています。
