LINEBot을 모두 만들자 ~ 코드를 구현 편 ~ 【마지막 날】

14806 단어 람다linebotAWS
이 기사는 아래 #GW어드벤트캘린더의 8일째 기사가 됩니다.

일주일 만에 서버리스 LINEBot을 생성합니다 (@inoue2002) |

소개



여기의 내용은 초보자 전용입니다.
공식 문서 을 읽을 수 있는 분은 이쪽을 읽는 것이 정확합니다.

어제 기사 를 보지 못한 분들은 꼭.
이 기사는 GW 어드벤트 캘린더를 통해 LINEBot을 서버리스로 만들 수 있게 합시다! 라는 것을 목표로 쓰고 있는 기사입니다.

LINEBot은 만들 수 있지만 AWS에서 서버리스를 만들고 싶다! 지향 기사입니다.

어제의 기사에서 대부분의 설정 (lambda 함수, APIGateway, 환경 변수 등)을 마쳤으므로 남기는 코드를 쓰고 WEBhookURL을 설정하는 것뿐이었습니다.
그럼 가자!

코드 만들기



어제 한 번도 괴롭히지 않았던 코드 에디터를 모두 삭제합니다.





다음을 복사하여 그대로 붙여넣기



index.js
"use strict";
// モジュール呼び出し
const crypto = require("crypto");
const line = require("@line/bot-sdk");

// インスタンス生成
const client = new line.Client({ channelAccessToken: process.env.ACCESSTOKEN });

exports.handler = (event) => {
  let signature = crypto
    .createHmac("sha256", process.env.CHANNELSECRET)
    .update(event.body)
    .digest("base64");
  let checkHeader = (event.headers || {})["X-Line-Signature"];
  if (!checkHeader) {
    checkHeader = (event.headers || {})["x-line-signature"];
  }

  const body = JSON.parse(event.body);
  const events = body.events;
  console.log(events);

  // 署名検証が成功した場合
  if (signature === checkHeader) {
    events.forEach(async (event) => {
      let message;
      switch (event.type) {
        case "message":
          message = await messageFunc(event);
          break;
        case "postback":
          message = await postbackFunc(event);
          break;
        case "follow":
          message = { type: "text", text: "追加ありがとうございます!" };
          break;
      }
      // メッセージを返信
      if (message != undefined) {
        await sendFunc(body.events[0].replyToken, message);
        // .then(console.log)
        // .catch(console.log);
        return;
      }
    });
  }
  // 署名検証に失敗した場合
  else {
    console.log("署名認証エラー");
  }
};

async function sendFunc(replyToken, mes) {
  const result = new Promise(function (resolve, reject) {
    client.replyMessage(replyToken, mes).then((response) => {
      resolve("送信完了");
    });
  });
  return result;
}

async function messageFunc(event) {
  let message = "";
  message = { type: "text", text: `メッセージイベント` };
  return message;
}
const postbackFunc = async function (event) {
  let message = "";
  message = { type: "text", text: "ポストバックイベント" };
  return message;
};



확인 및 저장



아래와 같이 되면 오른쪽 상단의 저장 버튼을 누른다.





WEBhookURL 설정





API 엔드포인트와 작성된 URL을 모두 복사





LINEBot의 WebhookURL의 란에 붙여 넣는다(어미에 /webhook라든지 필요없다. 그대로 붙여 붙일 뿐.)





※ 검증 버튼을 누르면 에러가 나오지만 특히 신경 쓰지 않아도 좋다.

동작 확인



사보였던 서버리스 LINEbot이 완성되었다! 피 c. 라고 r. 이 m/FM7CFYlfp — 요칸 (Yosuke Inoue) (@inoue2002) May 8, 2020


LINEBot에 뭔가 말해 봅시다!



끝에



GW를 걸고 한 개 한 개 세세하게 사진을 찍고 LINEBot을 만들어 보았습니다.

저도 다시 공부하 부분도 많아, 매우 의미있는 qiita를 쓰는 시간이었다고 생각합니다.

과거작을 차례로 복습해 여러분으로 점점 LINEBot을 만들어 갑시다!



이 일주일 기사는 모두 이 기사 을 참고로 하고 있습니다



이 문서: LINEBot을 모두 만들자 ~ 코드 구현 편



LINEBot을 모두 만들자~환경 구축편~

LINEBot을 모두 만들자 ~ LINEBot is 무엇? 편

LINEBot을 모두 만들자~ 되돌아가는 bot를 만들자편~

LINEBot을 모두 만들자 ~ 다양한 메시지를 보내 보자.

LINEBot을 모두 만들자 ~ Message를 분기시키는 편

LINEBot을 모두 만들자 ~ AWS 계정 만들기

LINEBot을 모두 만들자~ 레이어와 APIgateway 설정편


좋은 웹페이지 즐겨찾기