GAS를 사용하여 LINE BOT에서 놀았습니다.

14566 단어 linebotTalkAPIgas

무엇을 했는가



정기적으로 축구 뉴스 전달





Talk API를 사용한 일상 대화





어떻게 깨달았는가



LINE Messaging API 사용



Messaging API를 사용하여 봇 서버와 LINE 플랫폼 간에 데이터를 교환할 수 있습니다. 요청은 JSON 형식으로 HTTPS를 사용하여 전송됩니다.

1. 사용자가 LINE 공식 계정에 메시지를 보냅니다.
2.LINE 플랫폼에서 봇 서버의 Webhook URL로 Webhook 이벤트가 전송됩니다.
3. Webhook 이벤트에 따라 봇 서버에서 사용자에게 LINE 플랫폼을 통해 응답합니다.


Webhook 대상으로 GAS (Google Apps Script) 사용



GAS는 Google에서 제공하는 자바스크립트 기반 언어

GAS는 Google에서 제공하는 '스크립트 편집기'에 작성되기 때문에 번거로운 환경 구축이 필요하지 않습니다.
스크립트 편집기에 작성한 스크립트는 Google 서버에서 실행되므로 자체 서버도 필요하지 않습니다.

그러나 const, let 등은 사용할 수없는 것 같습니다.

축구 뉴스 배달



획득 기능
취득원은 겟사카의 RSS

soccer
// サッカーニュースの取得
function getSoccerNews() {
  var options =
      {
        "contentType" : "text/xml;charset=utf-8",
        "method" : "get",
      };
  var response = UrlFetchApp.fetch("https://web.gekisaka.jp/feed", options); 
  var xmlDoc = XmlService.parse(response.getContentText());
  var rootDoc = xmlDoc.getRootElement();
  var item = parser.getElementsByTagName(rootDoc, 'item')
  //最新記事のタイトルとリンク取得
  var title = parser.getElementsByTagName(item[0],'title');
  var link = parser.getElementsByTagName(item[0], 'link');
  var msgSoccerNews = [title[0].getValue(), link[0].getValue()];
  return msgSoccerNews
}

배달 기능

soccer
// 通知機能
function push_soccer_message() {
  var msgSoccerNews = getSoccerNews();

  var postData = {
    "to": USER_ID, //lineのユーザーID
    "messages": [
      {
        "type": "text",
        "text": msgSoccerNews[0] + msgSoccerNews[1]
      }
    ]}

  var headers = {
    "Content-Type": "application/json",
    'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, //lineのアクセストークン
  };

  var options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify(postData)
  };

  var response = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options);

}

GAS에는 정기 실행 기능이 있으므로 4시간마다 push_soccer_message
완성!

대화 BOT



API는 모집이 제공하는 Talk API

talk
//ポストで送られてくるので、送られてきたJSONをパース
function doPost(e) {
  var json = JSON.parse(e.postData.contents);

  //返信するためのトークン取得
  var reply_token= json.events[0].replyToken;
  if (typeof reply_token === 'undefined') {
    return;
  }

  //送られたメッセージ内容を取得
  var message = json.events[0].message.text;  

  //talk apiに送信するデータ
  var postData = {
    "apikey": api_key, //取得したapikey
    "query": message
  }

  //api通信
  var response = UrlFetchApp.fetch("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk", {
    "method": "POST",
    "payload": postData,
  })

  //返信文言
  var reply = JSON.parse(response).results[0].reply;

  var options = {
    headers: {
      'content-Type': 'application/json; charset=UTF-8',
      Authorization: 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    method: 'post',
    payload: JSON.stringify({
      replyToken: reply_token,
      messages: [{
        type: 'text',
        text: reply,
      }],
    }),
  }

  // メッセージを返信    
  UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply',options);
}

완성!

배운 것



API라고 하는 편리한 녀석···스스로 외부의 API에 연결하는 것이 처음이었기 때문에 좋은 공부가 되었다. 다른 API도 사용하고 싶다!
GAS라고 하는 편리한 녀석・・・서버리스로 실장할 수 있으므로 실장의 허들이 내려간다
Webhook ... 서비스 측 post 요청 대상을 지정할 수있는 사람
fetch api ... 요청을 보낼 수 있습니다.
파서··· 구문 분석을 실시한다

좋은 웹페이지 즐겨찾기