LINE bot을 공부회의 접수에 도입하고 싶다! ~connpass API의 소개~

소개



일은 따로 공부회를 열고 있습니다만, 유지에 의한 운영 때문에 손이 돌지 않는 곳이 많습니다. 그 중에서도 접수 업무에 초점을 맞추고 도움이되는 시스템의 프로토 타이핑을 실시하고 있습니다.

Noodl에서 접수양을 만들었다.

나와 같이 유저 커뮤니티의 운영이나 이벤트의 개최를 하고 있는 분에게 읽어 주셔, 조금이라도 부담이 가벼워지는 시스템 예로서 받을 수 있으면 기쁩니다.

공부회라고 하면, IT관련의 공부회 지원 서비스 connpass군요.
라고 하는 것으로 connpass의 API를 이용해 LINE bot와 제휴해 보려고 했습니다.
이 기사에서는 connpass API를 소개하고 간단한 사용법을 작성합니다.

connpass API 정보



 이쪽의 connpass API 로부터 URL과 검색 쿼리, 리스폰스에 대해 해설되고 있습니다. 개최 일시나 장소 뿐만이 아니라, 사이트의 HTML까지 입수할 수 있다고는.....

실제로 connpass API를 사용해보십시오.



그렇다면 시험에 connpass API를 사용하여 어떤 데이터가 반환되는지 확인해 보겠습니다.

실행 환경은 노트북 PC로 하고, ngrok로 터널링하여 LINE 서버와 통신합니다. 이번의 움직임으로서는, LINE bot에 텍스트를 던지면 이벤트명 「Noodl」로 검색해, 그 응답에 포함되는 이벤트 URL를 돌려줍니다.

LINE bot에 텍스트를 던지면 이렇게 대답합니다.



준비



사용하는 js 라이브러리는 다음과 같습니다. npm 명령으로 설치합시다.
  • axios
  • express
  • @line/bot-sdk

  • npm init를 수행한 경로에서 다음 명령을 실행하면 필요한 패키지가 설치됩니다.
    npm i axios express @line/bot-sdk
    

    구현



    LINE bot의 준비와 Node.js는 인터넷에 많은 정보가 있기 때문에 할애합니다. 결국 다음 코드가되었습니다.
    'use strict';
    
    const axios = require('axios');         
    const express = require('express');
    const line = require('@line/bot-sdk');    // LINE
    const PORT = process.env.PORT || 3000;
    
    const config = {
        channelSecret: 'LINE MessagingAPIのチャンネルシークレット',
        channelAccessToken: 'LINE Messaging APIのアクセストークン'
    };
    
    const app = express();
    
    app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); //ブラウザ確認用(無くても問題ない)
    app.post('/webhook', line.middleware(config), (req, res) => {
        console.log(req.body.events);
    
        //ここのif文はdeveloper consoleの"接続確認"用なので後で削除して問題ないです。
        if(req.body.events[0].replyToken === '00000000000000000000000000000000' && req.body.events[1].replyToken === 'ffffffffffffffffffffffffffffffff'){
            res.send('Hello LINE BOT!(POST)');
            console.log('疎通確認用');
            return; 
        }
    
        Promise
          .all(req.body.events.map(handleEvent))
          .then((result) => res.json(result));
    });
    
    const client = new line.Client(config);
    
    function handleEvent(event) {
      var event_url;
    
      if (event.type !== 'message' || event.message.type !== 'text') {
        return Promise.resolve(null);
      }
    
      // connpass APIにアクセス
      // このURLがconnpass APIにアクセスするURL
      axios.get('https://connpass.com/api/v1/event/?keyword_or=Noodl')
      .then(function (response) {
        // handle success
        // イベントURLを
        event_url = response.data.events[0].event_url;
      })
      .catch(function (error) {
        // handle error
        console.log(error);
      })
      .finally(function () {
        // always executed
        console.log(event_url);
        console.log( typeof event_url );
    
        return client.replyMessage(event.replyToken, {
          type: 'text',
          text: event_url //実際に返信の言葉を入れる箇所
        });
      });
    }
    
    app.listen(PORT);
    console.log(`Server running at ${PORT}`);
    

    중요한 부분만 해설합니다.

    URL 지정



    쿼리의 "keyword_or"가 검색 단어를 삽입하는 부분입니다.
    https://connpass.com/api/v1/event/?keyword_or=Noodl
    

    URL 추출



     다음의 처리로, 대량에 있는 데이터 중에서 이벤트 URL을 추출하고 있습니다.
    event_url = response.data.events[0].event_url;
    

    LINE bot에서 답변



    다음 처리에서 이벤트 URL을 사용자에게 보냅니다. 타입은 text로 문제 없습니다.
        return client.replyMessage(event.replyToken, {
          type: 'text',
          text: event_url //実際に返信の言葉を入れる箇所
        });
    

    결론



    이번은 connpass API를 사용해, LINE bot와 제휴해 이벤트 URL를 돌려주는 데모가 되었습니다. 그 밖에도 재미있을 것 같은 데이터(이벤트 개최 장소의 위도 경도, 일시 등)가 있으므로 확장해 가고 싶습니다.

    예를 들면,
    - Google 스프레드시트와 협력하여 참가자 출석 확인.
    - GPS를 주워 회장에 있을 때만 접수 가능하게 하거나.
    - 이벤트 개최 장소의 가장 가까운 라면 가게를 소개해 주거나 ....

    생각하면 생각할수록 재미있는 것이 API의 묘미군요(웃음)

    좋은 웹페이지 즐겨찾기