SORACOM LTE-M ButtonからCisco Webex Teamsへ勤怠連絡する


はじめに

以前業務でLTE-M、NB-IoT案件に携わっていたことがあり、実際のデバイスを触ってみたくなってSORACOM LTE-M Button powered by AWSを購入してみました。今回は忘年会で飲みすぎた次の日や、子供が熱を出した日、また自分の体調が優れない日等、在宅勤務や休暇を利用する場合に1クリックで連絡する手段を実装します。
SlackやLINEでは既にメッセージ送信を実装されている方がいますが、私の勤務先はコミュニケーションツールとしてCisco Webexを使用していますので、Cisco Webex Teamsでの実装を紹介します。

Cisco Webex Teamsとは

Cisco Webex Teamsはビデオ会議やチャット、資料共有などのビジネスコミュニケーション機能を有するクラウドサービスです。他のメッセージングサービス同様RESTfulなAPIを備えており、プログラムからユーザの検索やメッセージの送信が可能です。詳しくは以下リンクにて。

Getting Started with the Webex API

前提

  • Cisco Webexアカウントを持っている
  • SORACOM LTE-M Button powered by AWSを1-clickセットアップ済

実装

1. Cisco Webex Botを作成し、Spaceに追加する

こちらの記事を参考にBotを作成、アクセストークンを取得します。その後、Botを勤怠連絡するSpaceに追加します。

2. 追加したSpaceのIDを調べる

API ReferenceのList RoomsでBotが所属するSpaceのIDを取得します。この時、HeaderのAuthorizationには1で取得したアクセストークンを入力します。

ResponseセクションのtitleからBotを追加したSpaceを探し、そのSpaceのidを取得します。

3. Lambda関数の準備

今回はPython3.6で以下コードを実装しました。Spaceへのメッセージの送信にはAPI ReferenceのCreate a Messageを使います。躓いたポイントとして、lambda関数の実行環境でrequestsパッケージは実装されていなかったため、ローカル環境でパッケージを準備しUpload .zip fileを選択しました。

import os
import json
import requests
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def compose_message(clicktype):
    if clicktype == 'SINGLE':
        return u'本日在宅勤務です。'
    elif clicktype == 'DOUBLE':
        return u'本日午前休です。'
    elif clicktype == 'LONG':
        return u'本日お休みです。'
    else:
        return u''

def send_message(msg):
    url = "https://api.ciscospark.com/v1/messages"
    headers = {"Accept": "application/json", "Content-Type": "application/json; charset=utf-8", "Authorization": "Bearer "+ os.environ['ACCESS_TOKEN']}
    payload = {"roomId": os.environ['ROOM_ID'], "text": msg}
    r = requests.post(url, headers=headers, data=json.dumps(payload))
    logger.info('status code: ' + str(r.status_code) + ', body: ' + r.text)

def lambda_handler(event, context):
    logger.info('Received event: ' + json.dumps(event))
    message = compose_message(event['deviceEvent']['buttonClicked']['clickType'])
    send_message(message)
    return

ACCESS_TOKENとROOM_IDは1で取得したアクセストークンと2で取得したSpaceのIDをlambdaのEnvironment variablesセクションで与えます。

4. AWS IoT 1-ClickでLambda関数とdevice templateを紐付ける

Device templatesメニューのLambda functionに3で作成したlambda関数を入力、これで完成です。

感想

Cisco Webex APIは以前触ったことがありましたので、SORACOM LTE-M Button powered by AWSが届いたその日の夜、デバイス開封から30分ほどで1−clickセットアップが完了し、トータル2時間ほどで実装できました。1-clickでインフラは準備完了、AWSサービスとの連携が思ったよりシンプルなのが気に入りました。LTE-Mがつながる場所であればどこでもセキュアにサービス提供可能ですので、様々なシーンでの応用が考えられそうです。他のサービスも考えてみたいと思います。