Python3에서 docomo의 자연 대화 : 잡담 api를 움직입니다.

8720 단어 파이썬botdocomoAPI
docomo의 자동 응답 bot를 Python3에서 움직이려고 시도하면 샘플 소스 코드를 찾을 수 없었다고 전부 움직이지 않았기 때문에 썼다.

docomo 자연 대화(잡담 대화)



docomo Developer support 가 제공하는 자연 대화 api. 조금 사용하는 분에는 무료.

잡담 대화 API의 특징



・유저의 아무렇지도 않은 한마디에 바리에이션 풍부한 응답을 돌려주는, 컴퓨터와 잡담을 즐길 수 있는 기능입니다. 잡담 대화 API는 사용자의 모든 발화에 항상 응답합니다.
・대화에 있어서의 화제와 문맥을 인식해, 대규모 발화 데이터로부터 응답문을 선택해 발화합니다.

docomo Developer support : API 자연 대화(잡담 대화)

코드 쓰기 전에 해야 할 일



· docomo Developer support 계정 등록
법인 정보 등 거의 아무것도 등록하지 않는 최소한의 계정에서도 가능.
· 신규 API 이용 신청
이용 개시는 오늘부터.
잡담 대화의 api에 체크가 붙어만 하면 된다.
 
API 신청이 끝나면 마이 페이지에 가서 Apikey를 복사해 온다.

잡담 대화



2회째 이후의 실행은 52-54행째를 코멘트 아웃 해, 1회째로 얻어진 appId를 55행째 기재하면 정보가 계승된다.
# -*- coding: utf-8 -*-

import requests
import json
from _datetime import datetime

# your APIKEY
KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# リクエストクエリ
endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY=REGISTER_KEY'
url = endpoint.replace('REGISTER_KEY', KEY)


# user registration
def register():
    r_endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/registration?APIKEY=REGISTER_KEY'
    r_url = r_endpoint.replace('REGISTER_KEY', KEY)
    r_headers = {'Content-type': 'application/json'}
    pay = {
        "botId": "Chatting",
        "appKind": "Smart Phone"
    }
    r = requests.post(r_url, data=json.dumps(pay), headers=r_headers)
    appId = r.json()['appId']
    return appId


def reply(appId, utt_content):
    headers = {'Content-type': 'application/json;charset=UTF-8'}
    payload = {
        "language": "ja-JP",
        "botId": "Chatting",
        "appId": appId,
        "voiceText": utt_content,
        "appRecvTime": "2018-06-11 22:44:22",  # 仮置き。これで動いてしまう。
        "appSendTime": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }
    # Transmission
    r = requests.post(url, data=json.dumps(payload), headers=headers)
    data = r.json()
    # rec_time = data['serverSendTime']
    response = data['systemText']['expression']

    print("response: %s" % response)
    return response



if __name__ == "__main__":
    # appIdを取得した2回目以降、コメントアウトして55行目に記載
    appId = register()
    print(appId)
    # appId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    while True:
        utt_content = input('>>')
        reply(appId, utt_content)




결론



32행 이하의 내용이 서버에 보내지는 json 파일의 내용이 된다.
기능별 참조 에 있는 속성을 추가해 기재할 수 있다.

docomo 쪽에서 업데이트가 있었던 것이 아닐까. 어쩌면.
2018년 6월 11일 현재 이것으로 움직인다.

참고



uepon 매일 비망록

좋은 웹페이지 즐겨찾기