Flask(Python)でCisco Webex Teamsのスペースにオウム返しするBotを作成

FlaskでのBot作成Hello World的なもの

main.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Ryo Chiba
# 2019/06/13 (Sat.)

from __future__ import print_function
import requests
import sys
import json
import os
import time
from flask import *
from requests_toolbelt.multipart.encoder import MultipartEncoder
import functools

token = 'NWIyYTk4NDItY2MzZS00YWEwLThjOWItOWRlM2RiYmFkMzI4ZjZkZGZkMzMtMTI3_PF84_e929f3de-bb48-434c-8d2e-20437b17e683'
ms_flag = True

app = Flask(__name__)

def post_message(room_id, txt, token):
	global ms_flag
	if ms_flag == True:
		ms_flag = False
		m = MultipartEncoder({'roomId': room_id, 'text': txt})
		r = requests.post('https://api.ciscospark.com/v1/messages', data=m,headers={'Authorization': 'Bearer %s' % token,'Content-Type': m.content_type})
	else:
		time.sleep(5)
		ms_flag = True

@app.route("/panel", methods=['GET'])
def main_page():
	return render_template("mainpage.html")

@app.route("/", methods=['POST'])
def handle_message():
	json = request.json

	message_id = json["data"]["id"]
	user_id = json["data"]["personId"]
	email = json["data"]["personEmail"]
	room_id = json["data"]["roomId"]
	bot_id = "Y2lzY29zcGFyazovL3VzL0FQUExJQ0FUSU9OL2M1ZTYzZjQ5LTcwNzItNDRlMy1hNDE0LWVkZWZlNjc3MDc5MQ"

	print(message_id, file = sys.stdout)
	print(user_id, file = sys.stdout)
	print(email, file = sys.stdout)
	print(room_id, file = sys.stdout)

	if user_id != bot_id:
		global token
		header = {"Authorization": "Bearer %s" % token}
		get_rooms_url = "https://api.ciscospark.com/v1/messages/" + message_id
		api_response = requests.get(get_rooms_url, headers=header, verify=False)
		response_json = api_response.json()
		message = response_json["text"]
		print(message, file= sys.stdout)
		if message == "Hello":
			post_message(room_id,"Bonjour!",token)

		return "Success"
	else:
#		print("fooo", file=sys.stdout)
		return "Pass"

term_output_json = os.popen('curl http://127.0.0.1:4040/api/tunnels').read() 
tunnel_info = json.loads(term_output_json)
public_url = tunnel_info['tunnels'][0]['public_url']

# Registering Webhook
header = {"Authorization": "Bearer %s" % token, "content-type": "application/json"}
requests.packages.urllib3.disable_warnings() # Removing SSL warnings
post_message_url = "https://api.ciscospark.com/v1/webhooks"

payload = {
    "resource": "messages",
    "event": "all",
    "targetUrl": public_url,
    "name": "BotDemoWebHook"
}

api_response = requests.post(post_message_url, json=payload, headers=header, verify=False) # Registering Webhook

if api_response.status_code != 200:
    print('Webhook registration Error !')
    exit(0)

if __name__ == '__main__':
    app.run(host='localhost', use_reloader=True, debug=True)