노마드 워커를 위한 전원 확보 BOT를 만들었다

만든 계기



사실은 포켓몬 GoAPI를 사용하여 가까운 포켓몬 알림을 만들고 싶었지만,
2단계 인증으로 손잡았기 때문에 포기하지만,
위치 정보를 사용한 API는 여러가지 사용도가 나오려고 생각했다.

이동 중에 일 전화가 들어와 도중 카페에서 급히 일하고 싶어졌다.
전원 있는 카페는 어디일까… 라고 생각해,
스타버라면 전원이 있을 거라 생각하고 들어가면 없거나 해서 커피비 낭비가 되거나…

그런 때에 Discord에서 까다로운 전원이 어떻게든...라는 대화가 들려왔다.
현재지에서 전원을 확보할 수 있어 자신이 들어가고 싶은 점포가 표시되면 고맙다고 생각해 LINEBOT를 만들었습니다.

동작 이미지



IMAGE ALT TEXT HERE

기능 개요



1. LINEBOT 대화 화면에서 자신의 위치 정보를 보냅니다.
2. 경도 위도 정보에서 모바일 오아시스의 MAP 링크가 전송됩니다.
3. 링크를 열면 전원을 확보할 수 있는 카페가 아이콘 표시된다.

샘플 코드



ngrok에서 움직이지만 Now에서 움직이지 않았다 ...

node.js:server.js
'use strict';

const express = require('express');
const line = require('@line/bot-sdk');
const request = require('request');
const PORT = process.env.PORT || 3000;

const config = {
    channelSecret: '[channelSecret]',
    channelAccessToken: '[channelAccessToken]'
};

const app = express();
var json;

app.get('/', (req, res) => res.send('Hello LINE BOT!'));
app.post('/webhook', line.middleware(config), (req, res) => {
    console.log(req.body.events);
    console.log(req.body.events[0].message.latitude);
    console.log(req.body.events[0].message.longitude);

    var latGeo =req.body.events[0].message.latitude;
    var lonGeo =req.body.events[0].message.longitude;

    request('http://oasis.mogya.com/api/v0/map?lat=' + latGeo + '&lng=' + lonGeo + '', function (error, response, body) {
        var jsonBefore = JSON.parse(body);
        //console.log(jsonBefore.url);
        json=jsonBefore.url;
    })

    Promise
      .all(req.body.events.map(handleEvent))
      .then((result) => res.json(result));
    });

const client = new line.Client(config);

function handleEvent(event) {

//位置情報以外が来た場合は、テキストで返す
  if (event.type !== 'message' || event.message.type !== 'location') {
    //return Promise.resolve(null);
    return client.replyMessage(event.replyToken, {
    type: 'text',
    text: event.message.text, //実際に返信の言葉を入れる箇所
    text: '左下の「+」アイコンから位置情報を送ってください' //実際に返信の言葉を入れる箇所


    });
  }


  //Message
  return client.replyMessage(event.replyToken, {    
    type: "template",
    altText: "代替テキスト",
    template: {
        type: 'buttons',
        actions: [
            {
                type: 'uri',
                uri: json,
                label: '近場で電源確保できる場所を開く'
            }
        ],
        title: '電源がなくて困ったらこココ!',
        text: ' 電源マップ'
    }
}

);


}


//app.listen(PORT);
(process.env.NOW_REGION) ? module.exports = app : app.listen(PORT);
console.log(`Server running at ${PORT}`);

좋은 웹페이지 즐겨찾기