Cisco SparkのAPIを利用してみる

CiscoがリリースしているSlack的なサービスとしてCisco Sparkがあります。企業向けのCollaboration製品(電話やビデオ会議)と連携出来る特徴があります。

https://web.ciscospark.com

このCisco Sparkですが、これまではAPIは非公開で様々な連携は出来ませんでしたが、12月にAPIが公開されました。APIはREST APIで実装されています。以下に詳細の使い方が書かれていますがざっとした使い方を解説します。

https://developer.ciscospark.com/getting-started.html

Tokenについて

APIはTokenを添付して送信することで利用可能となっています。Tokenはユーザー毎の固定TokenとApplication毎に発行されるTokenがあります。2016/1/3現在は検証を行うのであればユーザー毎のTokenは期限が無く利用が容易になっています。ApplicationのTokenはOauth2を使っての発行と、2時間毎にリフレッシュ処理、60日毎に再取得が必要となります。このため、まずはユーザーTokenを使って検証してその後Application Tokenを使うことが推奨されています。ユーザーTokenは上記のCisco SparkのDeveloperサイトでログイン後、右上に表示される自分のアイコンをクリックすると取得出来ます。Tokenはリクエスト時にHeaderに添付して送信します。HeaderへのTokenの添付は、キーがAuthorizationで”Bearner “の後に取得したTokenを追加します。Pythonで書くと以下の例になります。

token = "Bearer " + TOKEN
header = {"Authorization": "%s" % token}

情報の取得(Room一覧の取得)

上記で取得したTokenを添付して、HTTPのGET Requestを発行すると各種情報を取得出来ます。以下はPythonでRoom一覧を取得する例です。-tokenで各自取得したTokenを添付します。以下のコードをgetrooms.pyと保存した場合は以下のように実行します。

# python getrooms.py -token TOKEN

import requests
import argparse


def main():
    p = argparse.ArgumentParser()
    p.add_argument("-token", default="")
    args = p.parse_args()
    token = "Bearer " + args.token

    header = {"Authorization": "%s" % token}
    requests.packages.urllib3.disable_warnings()
    get_rooms_url = "https://api.ciscospark.com/v1/rooms"

    api_response = requests.get(get_rooms_url, headers=header)
    response_json = api_response.json()
    print(response_json)

if __name__ == '__main__':
    main()

投稿(Roomの作成とメッセージの投稿)

Cisco Sparkに対してPost Messageを送信すると各種作成や、メッセージの投稿が出来ます。

Roomの作成

上記と同様にTokenを添付して、Postを送信するとRoomを作成出来ます。-tokenでTokenを添付して、-titleでルーム名を指定します。

import requests
import argparse


def main():
    p = argparse.ArgumentParser()
    p.add_argument("-token", required=True)
    p.add_argument("-title", required=True)
    args = p.parse_args()

    token = "Bearer " + args.token
    header = {"Authorization": "%s" % token}
    post_room_url = "https://api.ciscospark.com/v1/rooms"
    payload = {"title": args.title}
    api_response = requests.post(post_room_url, json=payload, headers=header, verify=False)
    response_json = api_response.json()
    print(response_json)

if __name__ == '__main__':
    main()

メッセージの投稿

HTTPのPOSTをRequestを発行すると、各種メッセージを投稿出来ます。-tokenでTokenを指定し、-roomで投稿先のルームのID、-textで送信するメッセージを指定します。

import requests
import argparse


def main():
    p = argparse.ArgumentParser()
    p.add_argument("-token", default="")
    p.add_argument("-room")
    p.add_argument("-text")
    args = p.parse_args()

    token = "Bearer " + args.token
    header = {"Authorization": "%s" % token, "content-type": "application/json"}
    post_message_url = "https://api.ciscospark.com/hydra/api/v1/messages"
    payload = {
        "roomId": args.room,
        "text": args.text
    }
    api_response = requests.post(post_message_url, json=payload, headers=header, verify=False)
    response_status = api_response.status_code
    print(response_status)

if __name__ == '__main__':
    main()

WebHookについて

登録しておくと指定のFilter(Meeting Room等)で指定のAction(Messageがポストされた等)が行われると、指定のサーバーに対してメッセージが送信されます。WebHookを受けるサーバーはGlobal IPアドレスを持っておく必要が有ります。WebHookの参照/登録/削除は今のところAPI経由でしか行えません。

WebHookの登録状況の確認

登録状況を参照するPython Scriptです。-tokenでTokenを指定します。

import argparse
import requests
import json

def main():
    p = argparse.ArgumentParser()
    p.add_argument("-token", default="")
    args = p.parse_args()

    token = "Bearer " + args.token
    header = {"Authorization": "%s" % token}
    get_webhooks_url = "https://api.ciscospark.com/v1/webhooks"
    api_response = requests.get(get_webhooks_url, headers=header)
    response_json = api_response.json()
    print(json.dumps(response_json ,sort_keys=True, indent=4))

if __name__ == '__main__':
    main()

WebHookの登録

以下はWebHookを新たに登録するScriptです。-tokenでTokenの指定、-urlでWebHookを送るURLの指定、-roomでWebHookをTriggerするルームIDを指定します。Messageが新規で投稿されるとWebhookがCisco Sparkのサービスから送信されて来ます。

import requests
import argparse

def main():
    p = argparse.ArgumentParser()
    p.add_argument("-token", default="")
    p.add_argument("-url", default="")
    p.add_argument("-room", default="")
    args = p.parse_args()

    token = "Bearer " + args.token
    header = {"Authorization": "%s" % token, "content-type": "application/json"}
    post_message_url = "https://api.ciscospark.com/v1/webhooks"
    payload = {
        "resource": "messages",
        "event": "created",
        "filter": "roomId="+args.room,
        "targetUrl": args.url,
        "name": "bot"
    }
    api_response = requests.post(post_message_url, json=payload, headers=header)
    response_status = api_response.status_code
    print(response_status)

if __name__ == '__main__':
    main()

WebHookの削除

以下は削除するScriptです。実行時に-tokenでTokenの指定、-webhookでWebhookの名前を指定します。

import requests
import argparse

def main():
    p = argparse.ArgumentParser()
    p.add_argument("-token", default="")
    p.add_argument("-webhook", default="")
    args = p.parse_args()

    token = "Bearer " + args.token
    header = {"Authorization": "%s" % token}
    delete_webhooks_url = "https://api.ciscospark.com/v1/webhooks"
    payload = {"webhookId": args.webhook}
    api_response = requests.delete(delete_webhooks_url, headers=header, verify=True, params=payload)
    print(api_response.url)
    response_status = api_response.status_code
    print(response_status)

# run main function
if __name__ == '__main__':
    main()

まとめ

Cisco SparkのAPIを利用すると簡単に各種システムと連携出来ます。上手く連携出来れば、Cisco SparkからOpenStackのインスタンスを起動等も出来るようになります。

 

広告
Cisco SparkのAPIを利用してみる

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中