Node.js로 Whatsapp 봇을 만드는 방법

목차


  • Introduction
  • Required Libraries
  • How to Run Program
  • Replying Messages
  • Create Authentication
  • Replying Messages With Image
  • Implementation with the Yu-Gi-oh API
  • Conclusion

  • 소개



    WhatsApp Messenger는 실시간으로 메시지를 보내고 받을 수 있는 크로스 플랫폼 메시징 앱입니다. WhatsApp Messenger는 지구상의 거의 모든 사람이 사용합니다. 안타깝게도 Telegram과 달리 Whatsapp의 API 사용은 여전히 ​​제한되어 있습니다.

    이 게시물에서는 타사 라이브러리의 도움을 받아 무료 Whatsapp 봇을 만드는 방법을 보여 드리겠습니다.



    필수 라이브러리



    npm에서 라이브러리를 설치하려면 먼저 node.js 12 이상을 설치한 다음 npm 패키지에서 라이브러리를 설치해야 합니다.

    whatsapp-web.js 설치:

    $ npm install whatsapp-web.js
    
    or
    
    $ yarn add whatsapp-web.js
    


    qr 코드 터미널 설치:

    $ npm install qr-code-terminal
    
    or
    
    $ yarn add qr-code-terminal
    


    프로그램 실행 방법



    프로젝트에 app.js라는 파일을 만들고 이 코드를 붙여넣습니다.

    const qrcode = require("qrcode-terminal");
    const { Client } = require("whatsapp-web.js");
    
    const client = new Client();
    
    client.initialize();
    
    client.on("qr", (qr) => {
      qrcode.generate(qr, { small: true });
    });
    
    client.on("ready", () => {
      console.log("Client is ready!");
    });
    


    그런 다음 터미널 또는 명령 프롬프트에서 이 명령을 입력합니다.

    $ node app
    
    or
    
    $ node app.js
    


    명령이 실행되면 봇을 만드는 데 사용한 Whatsapp 계정으로 스캔하는 QR 코드가 나타납니다.



    답장 메시지



    봇을 만드는 목표는 메시지에 응답할 수 있도록 하는 것입니다. 따라서 이전에 생성한 프로젝트에 다음 코드를 붙여넣습니다.

    //Replying Messages
    client.on("message", (message) => {
      if (message.body === "hello") {
        message.reply("Hiiiii");
      }
    });
    


    다른 사람이 hello 메시지를 봇에 입력하면 봇이 이에 응답하도록 합니다.



    인증 생성



    인증을 생성하는 기능은 app.js를 실행할 때마다 로그인(QR 코드 스캔)할 필요가 없다는 것입니다.

    인증을 만드는 코드는 다음과 같습니다.

    const qrcode = require("qrcode-terminal");
    const { Client, LocalAuth } = require("whatsapp-web.js");
    
    //store authentication data to a file
    const client = new Client({
      authStrategy: new LocalAuth(),
    });
    
    client.initialize();
    
    client.on("qr", (qr) => {
      qrcode.generate(qr, { small: true });
    });
    
    client.on("authenticated", () => {
      console.log("AUTHENTICATED");
    });
    
    client.on("ready", () => {
      console.log("Client is ready!");
    });
    
    client.on("message", (message) => {
      if (message.body === "hello") {
        message.reply("Hiiiii");
      }
    });
    


    URL의 이미지로 메시지 회신



    반면에 봇은 문자 메시지로만 답장을 보내면 상호작용이 적기 때문에 이미지와 같은 미디어를 사용하여 메시지에 답장할 수 있습니다.

    다음은 봇이 미디어로 응답하도록 하는 코드입니다.

    const qrcode = require("qrcode-terminal");
    const { Client, LocalAuth, MessageMedia } = require("whatsapp-web.js");
    
    const client = new Client({
      authStrategy: new LocalAuth(),
    });
    
    client.initialize();
    
    client.on("qr", (qr) => {
      qrcode.generate(qr, { small: true });
    });
    
    client.on("authenticated", () => {
      console.log("AUTHENTICATED");
    });
    
    client.on("ready", () => {
      console.log("Client is ready!");
    });
    
    //Replying Messages with image from url
    client.on("message", async (message) => {
      if (message.body === "meme") {
        //get media from url
        const media = await MessageMedia.fromUrl(
          "https://user-images.githubusercontent.com/41937681/162612030-11575069-33c2-4df2-ab1b-3fb3cb06f4cf.png"
        );
    
        //replying with media
        client.sendMessage(message.from, media, {
          caption: "meme",
        });
      }
    });
    


    다른 사람이 meme 메시지를 입력할 때마다 봇이 이미지로 응답하도록 할 것입니다.



    Yu-Gi-oh API로 구현



    사례 연구의 요구에 맞게 라이브러리를 조정할 수 있음을 증명합니다. 이 경우 YGOPRODeck Yu-Gi-Oh! API 을 사용하겠습니다.

    다음은 Yu-Gi-Oh! 우리가 만들 봇:
  • 누군가 WhatsApp 메시지를 통해 Yugioh Card Name를 입력했습니다.
  • 데이터베이스에서 카드 이름을 확인합니다.
  • 유희왕 카드가 데이터베이스에서 발견되면 봇이 카드 이미지로 응답합니다.

  • WhatsApp 봇이 Yu-Gi-Oh!에 요청을 보내려면 Axios라는 추가 라이브러리가 필요합니다. API:

    $ npm install axios
    
    or
    
    $ yarn add axios
    


    다음은 Yu-Gi-Oh의 전체 코드입니다! 봇:

    const { Client, LocalAuth, MessageMedia } = require("whatsapp-web.js");
    const axios = require("axios");
    
    const client = new Client({
      authStrategy: new LocalAuth(),
    });
    
    client.initialize();
    
    client.on("qr", (qr) => {
      console.log("QR RECEIVED", qr);
    });
    
    client.on("authenticated", () => {
      console.log("AUTHENTICATED");
    });
    
    client.on("ready", () => {
      console.log("Client is ready!");
    });
    
    client.on("message", async (msg) => {
      if (msg.body) {
        axios
          .get(
            `https://db.ygoprodeck.com/api/v7/cardinfo.php?name=${encodeURIComponent(
              msg.body
            )}`
          )
          .then(async (res) => {
            if (res.data.error) {
              msg.reply("No card matching your query was found in the database.");
            } else {
              const media = await MessageMedia.fromUrl(
                res.data.data[0].card_images[0].image_url
              );
              client.sendMessage(msg.from, media, {
                caption: `Name : ${res.data.data[0].name}\nType : ${res.data.data[0].type}\nDesc : ${res.data.data[0].desc}
                `,
              });
            }
          })
          .catch((error) => {
            console.error(error);
          });
      }
    });
    


    Yu-Gi-Oh!의 텍스트를 사용하여 메시지를 입력하려고 합니다. 카드 이름Card Shuffle을 입력하면 봇이 이전에 보낸 카드의 사진과 설명으로 응답합니다.



    Burning Bamboo Sword라는 다른 카드 이름을 사용하여 메시지를 입력하려고 했습니다.



    결론



    WhatsApp API는 여전히 제한적이므로 whatsapp-web.js와 같은 타사 도구가 많은 도움이 됩니다. 그러나 이 라이브러리는 WhatsApp과 관련이 없기 때문에 여전히 많은 문제가 있습니다.

    이 프로젝트의 코드는 다음 위치에 있습니다. https://github.com/jagadyudha/yugioh-whatsapp-bot

    이 문서는 원래 How to Create a Whatsapp Bot With Node.js — Jagad Yudha Awali에 게시되었습니다.

    좋은 웹페이지 즐겨찾기