Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

以前業務で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で取得したアクセストークンを入力します。

スクリーンショット 2018-12-02 0.11.36.png

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

スクリーンショット 2018-12-02 0.16.34.png

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セクションで与えます。
スクリーンショット 2018-12-02 0.34.46.png

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がつながる場所であればどこでもセキュアにサービス提供可能ですので、様々なシーンでの応用が考えられそうです。他のサービスも考えてみたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away