Minette for Python으로 LINE BOT 만들기

일본에서 BOT라고 하면 역시 LINE BOT입니다. 여기에서는 BOT 애플리케이션 프레임워크인 Minette for Python을 사용한 만드는 방법을 소개합니다.

사전에 준비하는 것


  • LINE Messaging API의 Channel Secret 및 Channel Access Token
  • docomo 잡담 API의 API 키

    종속 라이브러리 설치



    Minette의 동작에 필요한 pytz와 requests, LINE 엔드포인트를 시작하는 데 필요한 웹 애플리케이션 프레임워크 flask와 LINE SDK를 설치합니다. 설치된 경우 이 단계를 건너뛰어도 괜찮습니다.
    $ pip install pytz
    $ pip install requests
    $ pip install Flask
    $ pip install line-bot-sdk
    

    Minette 설치



    제목에 있는 것처럼 BOT 프레임워크의 Minette를 사용합니다. Minette에 대한 자세한 내용은 아래 문서를 참조하십시오.
  • BOT 프레임워크 Minette for Python 소개

  • 설치는 pip 명령 한 번으로 OK입니다.
    $ pip install minette
    

    대답 BOT로 동작 확인해 봅시다.
    $ minette
    user> hello
    minette> You said: hello
    

    인터넷에 공개



    ※이 섹션은 개발 PC상에서 BOT를 동작시키는 경우를 상정한 것이므로, AWS상의 서버등에서 직접 작업을 하고 있는 경우, 스킵 해 주세요

    LINE Messaging API의 인바운드는 개발자가 지정한 Webhook을 두드려 메시지를 전달해 주므로 Minette를 실행하는 머신을 인터넷에서 액세스할 수 있도록 해주어야 합니다.

    여러가지 방법이 있을까 생각합니다만, 여기에서는 간편한 느낌의 ngrok를 사용한 순서를 설명합니다.

    ngrok 설치



    ngrok이란, 대충 말하면 각종 프로토콜에 대응한 라우팅&터널링 툴(이라고 하는 인식)입니다. 자세한 것은 ngrok 공식 를 봐 주시려면, 다운로드 페이지로부터 플랫폼에 응한 바이너리를 다운로드·해동해 주세요.

    해동하면 그 이름도 ngrok 라는 이름의 실행 파일 1개가 출현하기 때문에, 이 녀석을 아래와 같이 두드립니다. 보통으로 실행하면 그 후의 작업을 할 수 없게 되어 버리므로, 백그라운드 실행하도록 하고 있습니다.
    $ ./ngrok http 5050 -log=stdout > ngrok.log &
    

    동작 확인과 함께 인터넷 URL을 확인합니다.
    $ curl http://localhost:4040/api/tunnels
    
    {"tunnels":[{"name":"command_line","uri":"/api/tunnels/command_line","public_url":"https://abcd1234.ngrok.io","proto":"https","config":{"addr":"localhost:5050","inspect":true},"metrics":{"conns":{"count":0,"gauge":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0},"http":{"count":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0}}},{"name":"command_line (http)","uri":"/api/tunnels/command_line+%28http%29","public_url":"http://abcd1234.ngrok.io","proto":"http","config":{"addr":"localhost:5050","inspect":true},"metrics":{"conns":{"count":0,"gauge":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0},"http":{"count":0,"rate1":0,"rate5":0,"rate15":0,"p50":0,"p90":0,"p95":0,"p99":0}}}],"uri":"/api/tunnels"} 
    

    어긋나고 정보가 돌아왔지만, public_url 의 항목으로 나타난 https://abcd1234.ngrok.io 가, ngrok 에 의해 지불된 Raspberry Pi에 액세스하기 위한 URL이므로, 이것을 카피하는 등 삼가해 유지합니다.

    LINE developers의 Webhook URL로 설정



    이전에 ngrok에서 내보낸 URL (또는 실행 환경 자체의 URL)의 /api를 설정합니다.

    Webhook URLの設定

    이런 느낌입니다. 또한 서비스를 아직 시작하지 않았으므로 Verify를 눌러도 실패합니다.

    LINE Messaging API의 엔드포인트로 시작


    minette 명령은 범용 WebAPI 외에도 LINE Messaging API의 엔드 포인트 샘플 구현을 시작할 수 있습니다.

    우선은 LINE Messaging API의 이용에 필요한 인증 관련 정보를 환경 변수로 설정합니다.
    $ export LINE_CHANNEL_SECRET="あなたのチャネルシークレット"
    $ export LINE_ACCESS_TOKEN="あなたのアクセストークン"
    

    만약 docomo 잡담 API의 API 키가 있으면, 아래와 같이 설정하는 것으로 잡담 BOT가 됩니다. 이 절차를 생략하면 Minette의 동작 확인과 마찬가지로 회귀 BOT로 동작합니다.
    $ export CHAT_API_KEY="あなたのAPIキー"
    $ export DEFAULT_DIALOG_SERVICE="minette.dialog.chat_dialog.ChatDialogService"
    

    이것으로 준비가 완료되므로 엔드포인트를 시작합시다. -l 옵션을 붙입니다.
    $ minette -l
    

    그럼, 동작 확인해 봅시다.



    이런 느낌으로 움직이면 성공입니다. 미안해.

    좋은 웹페이지 즐겨찾기