Edited at

PythonでKintoneとTwilioを結合する


今回は壮大なテーマがあったんですが。ちょっと外れてPythonでKintoneとTwilioを結合するバックエンドを作ったので書いておこうと思います。


なぜこの部分を作ったのか?

それは今後必要になってくるために作っていました。

『大垣Pythonハッカソン@ヒーローズ・リーグ 2019 by MA』 に参加しておりました。

そのときにふとしたタイミングでPythonでKintonとTwilioを結合するプログラムを作成することになりました。

そのときに利用させていただきました@RyBBさんの『kintone REST API について (GET編)』のPythonコードを利用させていただきました。

念の為おさらいの意味で載せておこうと思います。


kintone_output.py

#!/usr/bin/python

# _*_ coding: utf-8 _*_

import requests

#APIトークン画面のREST APIでこのアプリを操作するためのトークンを生成できますの例に書かれたURLとAPIトークンを利用してください
URL = "https://サブドメイン/k/v1/record.json?app=4&id=1" 
API_TOKEN = "APIトークンを記述"

def get_kintone(url, api_token):
"""kintoneのレコードを全件取得する関数"""
headers = {"X-Cybozu-API-Token": api_token}
resp = requests.get(url, headers=headers)

return resp

if __name__ == "__main__":
RESP = get_kintone(URL, API_TOKEN)

print(RESP.text)


でここでKintoneのデータがまるごと取得できます。

ここでいつもの間違いがURLと書きながら実際のURLを記載してはいけません。

REST API用のURLが準備されています。

APIトークン設定画面に記載されています。

そちらを利用してください。

お次はKintoneからデータを取得後の操作を記載します。

このコードはハッカソン界の赤い芸人@mobilebizことTwilioの高橋さんの『Twilio with Python』のコールバック用コードを流用・魔改造しながら作成しました。

連結させるためKintoneのURL情報の生成とAPIトークンを利用していますので気をつけてください。

JSONの部分とKintone接続部分はオリジナルに書かれていませんので下記のコードで実装できます。


callback.py

from twilio.rest import Client

import kintone_output #この部分に上記で実装したkintone_outputをインポートしてくる
import json #PythonのJSONライブラリーをインポートする

#Twilio SID & auth_token(Twilioのコンソールにて取得可能)
account_sid = "" # Your Account SID from www.twilio.com/console
auth_token = "" # Your Auth Token from www.twilio.com/console

#kintone API用(この記載はkintone_output.pyからコピーして生成させる)
URL = "https://サブドメイン/k/v1/record.json?app=4&id=1"
API_TOKEN = "APIトークン"

#Twilio API Call
client = Client(account_sid, auth_token)

#Kintone data get(Kintoneからデータを引っ張ってくる上記のkintone_outputを変数として実行する)
to_client_json = kintone_output.get_kintone(URL,API_TOKEN)

#json取得(これを実装するとJSONパースができる(KintoneからのデータはJSON形式なので気をつけること))
to_client = json.loads(to_client_json.text) #JSONをロードする
to_direct_tel = to_client['record']['tel'] #JSONから一部レコードを取得する(TELを取得する)
to_client_tel = to_direct_tel['value'] #JSON['TEL']レコードから値を取得する

#電話番号の生成(国別番号付きコールバック用電番(E.164形式)の生成)
to_contory = "+81" #国別コード
to_tel = to_client_tel[1:] #電番の頭一桁を削る
to_tel_number = to_tel.replace("-","") #−を削る
to_client = to_contory + to_tel_number #国別番号と電番を直結

#call back
call = client.calls.create(
to = to_client, #E.164形式形式の電話番号を記載
from_ = "", #コールバック用電話番号をTwilioコンソールから記載
url = "http://demo.twilio.com/docs/voice.xml"
)

print(call.sid)


このコードにてKintoneからのデータの取得からE.164形式の電話番号の生成Twilioからのコールバックまで実装できます。

注意ですがこれは実装してしまうと実際に電話をかけることができますのでご注意ください。


テストには必ずToは自分の携帯電話の電話番号を設定してください。

これができないと他人に迷惑をかけることになるので気をつけてください。

これからはというと次の壮大なテーマ災害をハックに入ります。

というのは『災害時に何を考えるのか?』で書きましたOpenStreetMapでクライシスマッピングに役立つツール作りに取り掛かりたいと思います。

これも多分このコードで実装は可能なのでKintoneからGetの部分で流用する予定です。


うーん。 コードは奥深いですね。