Google Home에 IDCF 클라우드 요금을 말합니다. 그 2

그 1 부터 계속됩니다.

왼쪽 창에서 Fulfillment를 클릭합니다.
Webhook 옆의 토글을 클릭하여 ENABLED로 설정합니다.
URL에 http://localhost/webhook을 입력하고 [SAVE]를 클릭합니다.
(나중에 URL은 변경하지만, 일단 localhost URL로 설정합니다.)


왼쪽 창에서 Intents를 클릭합니다.
그 1 에서 만든 billingsay를 클릭합니다.
아래쪽으로 스크롤하고 Fulfillment를 클릭합니다.
Use Webhook에 체크를 넣고【SAVE】를 클릭합니다.


파이썬 소스 변경



IDCF 클라우드의 빌링 API를 파이썬에서 사용하는 방법 을 변경합니다.
(비 프로그래머가, 열심히 하고 있기 때문에, 에러 처리는 전혀 하지 않거나,
만들기가 적당하다고 생각하기 때문에 조언 받을 수 있으면 기쁩니다! )
 # -*- conding: utf-8 -*-

import os
import json
import requests
import hashlib,hmac
import time
import base64

from flask import Flask,jsonify
from flask import request
from flask import make_response

app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
        req = request.get_json(silent=True, force=True)
        #print(json.dumps(req,sort_keys=True,indent=4,separators=(',', ': ')))
        cmd = req['result']['parameters']['command']
        m = req['result']['parameters']['date-period']
        if cmd == "料金":
                print("料金を提示")
                yyyymm = m[:7]
                ret = str(idcf_billing(yyyymm)) + "円です。"
                print(ret)
                r = make_response(jsonify({'speech':ret,'displayText':ret}))
                r.headers['Content-Type'] = 'application/json'
                return r


def idcf_billing(month):
        #IDCF billing API
        METHOD='GET'
        QUERY_STRING = 'format=json'
        APIKEY=os.getenv("IDCF_APIKEY")
        SECRET_KEY=os.getenv("IDCF_SECRETKEY")
        ENDPOINT='https://your.idcfcloud.com'
        ENDPOINT_URI='/api/v1/billings/history'
        EXPIRATION_SECONDS = 240

        expiration = int(time.time()) + EXPIRATION_SECONDS
        #print(expiration)

        message = METHOD + "\n" + ENDPOINT_URI + "\n" + APIKEY + "\n" + str(expiration) + "\n" + QUERY_STRING
        #message = METHOD + "\n" + ENDPOINT_URI + "\n" + APIKEY + "\n" + QUERY_STRING
        secret = SECRET_KEY

        signature=hmac.new(bytes(secret, 'ascii'), bytes(message, 'ascii'), hashlib.sha256).digest()
        sig=base64.b64encode(signature)

        head = {'X-IDCF-APIKEY': APIKEY, \
                'X-IDCF-Expires' : str(expiration), \
                'X-IDCF-Signature' : str(sig,'utf-8') }
        #print(head)
        uri = ENDPOINT + ENDPOINT_URI + '?' + QUERY_STRING
        res = requests.get(uri, headers=head)
        data = res.json()
        #print(json.dumps(data,sort_keys=True,indent=4,separators=(',', ': ')))
        data = data['data']
        for amt in data:
                if amt['month'] == month:
                        return amt['billing_amount']
                        #print(amt['month'] + ":" + str(amt['billing_amount']))

if __name__ == "__main__":
        app.run(host='0.0.0.0')

실행해보기



위의 소스 코드에서 실행합니다.
$python3.6 idcf.py
*Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

ngrok을 이용하여 외부에서 액세스할 수 있도록 합니다.
ngrok의 설정은, ngrok을 사용하여 로컬 환경에서 실행되는 웹 응용 프로그램에 인터넷에서 액세스 를 참고로 했습니다.

명령 프롬프트를 시작하고 다음 명령을 실행합니다.
>ngrok.exe http 5000
ngrok by @inconshreveable                                       (Ctrl+C to quit)

Session Status                online
Account                       k (Plan: Free)
Update                        update available (version 2.2.8, Ctrl-U to update)
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://1XXXXXX0.ngrok.io -> localhost:5000
Forwarding                    https://1XXXXX0.ngrok.io -> localhost:5000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

https URL을 복사합니다. (Google Assistant를 사용하는 경우 https가 아니면 입력 할 수 없습니다)
Dialogflow로 돌아가 Fulfillment의 Webhook URL 필드에 복사합니다.
이번/webhook 에 온 경우라고 정의하고 있으므로, htps : // 1 tt x0. 응 g로 k. 이오 / ぇ b 호오 k 와 같이 입력하고【SAVE】를 클릭합니다.

오른쪽 창에서 테스트합니다.
그 1과 마찬가지로 Try it now에 이달의 금액은? 를 입력하고 Enter 키를 누릅니다.

DEFAULT RESPONSE에 해당 월의 금액 + 엔입니다. 그리고 응답이 있으면 성공입니다!
SHOW JSON을 클릭하면 JSON이 표시됩니다.

Google 어시스턴트 측 설정



앱 정보 설정



각 항목의 모든 값을 입력합니다.
도중 앱용 이미지를 설정하는 항목이 있고, large, small 이미지가 필수이므로,
적절한 이미지를 준비하고 설정합니다.


app name을 IDCF 클라우드로 설정해 보았습니다.


왼쪽 창에서 Overview를 클릭합니다.
【TEST DRAFT】를 클릭합니다.


시뮬레이터로 테스트하기



왼쪽 창에서 Simulator를 클릭합니다.
app name으로 지정한 앱명+에 연결하고 라는 문구가 이미 들어간 상태가 되기 때문에,
이대로 Enter 키를 누릅니다.


Intent의 Default Welcome Intent의 Default Response의 내용이 반환됩니다.


이달의 요금은? 라고 물어봅니다.


2016년 9월은 뭐야? 모두 물어 보겠습니다.


google home에 물어보세요



전제로 Google 액션을 설정한 계정과 동일한 계정으로 Google 홈을 설정해야 합니다.
이미지를 클릭하면 Youtube로 날아갑니다.


파이썬 앱이 반응하고 응답을 반환하고 있음을 알 수 있습니다.


서버를 목소리만으로 만들 수 있는 구조라도 할 수 있을 것 같네요.

좋은 웹페이지 즐겨찾기