如何使用Node在WhatsApp频道上构建音乐识别聊天机器人

介绍

在本文中,将使用JavaScript和Node构建一个应用程序.js其中将使用Zenvia平台实现一个简单的聊天机器人,以与WhatsApp通道集成,并将AudD平台与音乐识别集成,以测试WhatsApp通道的某些功能,例如发送和接收文本,图像和音频消息。

WhatsApp移动应用程序的第一个版本于2009年11月发布,专门用于iOS,并于2010年8月发布用于Android。

Facebook在2014年以160亿美元收购了WhatsApp,根据2018年发布的最新数据,该应用程序在Google Play上的安装量超过50亿,每月在线用户超过15亿。

为了与世界各地的小型,中型和大型公司进行高效通信,WhatsApp于2018年8月推出了WhatsApp Business API,提供了一个API来发送和接收消息,可以通过您的合作伙伴与企业系统集成,而Zenvia是Facebook的官方合作伙伴。

在ngrok平台上创建一个帐户

ngrok 是一种服务,它公开了在 Internet 上本地运行的应用程序。

1. 让我们创建帐户。我们将访问该网站 https://ngrok.com/,然后单击“注册”按钮。

2.现在我们将填写名称电子邮件密码字段,单击“我不是机器人”,然后单击“注册”按钮。您也可以使用GitHub或Google社交登录登录。

3.接下来,我们将复制带有身份验证令牌的命令,因为此命令将在安装后配置。

4. 准备就绪!您的帐户已创建。

安装和配置 ngrok 平台工具

ngrok 工具将为本地运行的应用程序创建一个隧道,并在 Internet 上提供 URL。

1. 让我们安装并配置 ngrok。我们将访问站点 https://ngrok.com/download 并下载适用于您的操作系统的安装文件。

2.现在我们将提取并安装下载的文件。我正在使用openSUSE Tumbleweed操作系统,我只是将其解压缩到文件夹中。/usr/local/bin/

3. 安装 ngrok 后,我们将配置身份验证令牌。在我的情况下,我在终端中运行了以下命令。

ngrok config add-authtoken 1Rmtob9M3s7nNw02x2w72hSY0C6_5aa3v6udPVT6Gfjb51omJ

注意:

  • 使用在 ngrok 平台上生成的身份验证令牌。

4. 现在,我们将在端口上创建隧道,该隧道将成为应用程序的端口。在我的情况下,我在终端中运行了以下命令。3000

ngrok http 3000

5. 准备就绪!ngrok工具已配置,并将在终端中显示可在互联网上访问的公共URL。https://4402-2804-1b3-a8c3-b00f-8119-68d3-7e21-33e1.ngrok.io

ngrok by @inconshreveable                                                                                                                                                                                                                                     (Ctrl+C to quit)

Session Status                online                                                                                                                                                                                                                                          
Session Expires               1 hour, 59 minutes                                                                                                                                                                                                                              
Version                       2.3.40                                                                                                                                                                                                                                          
Region                        United States (us)                                                                                                                                                                                                                              
Web Interface                 http://127.0.0.1:4040                                                                                                                                                                                                                           
Forwarding                    http://4402-2804-1b3-a8c3-b00f-8119-68d3-7e21-33e1.ngrok.io -> http://localhost:3000                                                                                                                                                            
Forwarding                    https://4402-2804-1b3-a8c3-b00f-8119-68d3-7e21-33e1.ngrok.io -> http://localhost:3000                                                                                                                                                           

Connections                   ttl     opn     rt1     rt5     p50     p90                                                                                                                                                                                                     
                              0       0       0.00    0.00    0.00    0.00

注意:

  • 隧道的过期时间为 2 小时,如会话过期中所示,如果过期,请再次运行该命令以创建隧道。

在Zenvia平台上创建一个帐户

Zenvia是一个平台,使公司能够通过SMS,WhatsApp,Voice,Facebook Messenger,WEB Chat和RCS渠道为其客户创造独特的通信体验。

1. 让我们创建帐户。我们将访问该网站 https://app.zenvia.com,然后单击链接创建您的帐户

2.现在我们将填写字段 名称电子邮件密码,单击选项 我不是机器人,然后单击按钮 创建帐户.

3.创建帐户后,我们将检查注册的电子邮件。

4.现在我们将单击按钮 是的,这是我!在发送的电子邮件中确认它:)

5.确认电子邮件后,我们将填写“电子邮件”字段,然后单击“下一步”按钮。

6.现在我们将填写“密码”字段,然后单击按钮 登录.

7.接下来,我们将填写输入您的电话号码字段,然后单击按钮 继续 验证您的电话号码。

8.现在,我们将填写字段 输入您在手机上收到的代码的6位数代码,然后单击按钮 继续.

9. 准备就绪!您的帐户已创建。

在禅威思平台上创建沙盒

沙盒是开发人员中非常流行的概念,可以在不雇用服务的情况下测试平台的某些功能。因此,它需要直观且没有官僚主义。

1. 让我们在 WhatsApp 频道中创建沙盒。我们将单击菜单开发人员沙盒

2.现在我们将单击按钮 创建新

3.接下来,我们将选择选项 WhatsApp 然后点击按钮 下一页.

4.选择WhatsApp选项后,我们将扫描QR码或使用您的WhatsApp应用程序将关键字发送到该号码。另一种选择是使用手机访问URL,因为WhatsApp应用程序将打开,并显示要发送到号码的消息。wobbly-chatter+551148377404https://wa.me/551148377404?text=wobbly-chatterwobbly-chatter551148377404

笔记:

  • 此单词是在创建沙盒时自动生成的,因此当您进入此步骤时,将生成另一个单词。
  • Zenvia平台需要此注册才能注册您要测试的号码,因此无法将消息发送到任何手机。
  • 可以使用相同的过程注册其他号码。

5. 您将在手机上收到一条消息,确认您的号码已注册。

6. 屏幕上将显示已注册的号码,以及 24 小时内 200 条消息的限制。现在我们将单击按钮 下一步.

注意:

  • 当达到 24 小时期限时,请再次注册该号码以开始 24 小时内 200 封邮件的新周期。如果使用 200 条消息,则必须等待 24 小时。

7. 注册号码后,我们将测试发送短信。在“收件人”字段中选择要发送的号码,在“消息”字段中填写消息,然后单击“发送消息”按钮。复制参数中的令牌,在我的情况下,生成令牌是因为将在 Node.js 应用程序中配置此令牌。点击按钮 下一页.X-API-TOKENUbH-3NSJMufN0VN5fejawn633zDGnXRiRhYI

笔记:

  • 在“发件人”字段中,由于它是沙盒,因此在协定服务时会创建一个与集成标识符相对应的随机单词。
  • 在“请求”字段中,显示了使用 curl 工具的请求示例。您可以使用Postman或Insomnia等其他工具模拟相同的请求。
  • 在“响应”字段中,以 JSON 格式显示请求响应。

8. 接下来,将测试消息发送到所选号码。

9. 现在,我们将使用在 ngrok 平台上创建的 URL 创建对 webhook 的订阅。我们将用 URL 填写消息 Webhook URL 字段,并使用 URL 填写状态 Webhook URL 字段,然后单击“保存”和“完成”按钮。https://4402-2804-1b3-a8c3-b00f-8119-68d3-7e21-33e1.ngrok.io/messagehttps://4402-2804-1b3-a8c3-b00f-8119-68d3-7e21-33e1.ngrok.io/status

10. 准备就绪!为WhatsApp频道创建的沙盒,配置的数量和生成的令牌。API 文档可在 https://zenvia.github.io/zenvia-openapi-spec/ 获得。

在AudD平台上创建一个帐户

AudD是一项服务,允许您使用API识别音乐。

1. 让我们创建帐户。我们将访问该网站 https://audd.io,然后单击“获取API令牌”按钮。

2.现在我们将单击链接 注册.

3.接下来,我们将填写“电子邮件地址”字段,输入上面显示的代码,然后单击按钮 继续.您还可以使用Telegram,Google或GitHub社交登录登录。

4.然后,我们将填写“密码”字段,然后单击按钮 继续

5.创建帐户后,我们将检查注册的电子邮件。我们将单击发送的电子邮件中的“确认我的帐户”按钮。

6.现在,我们将单击按钮复制生成的令牌,因为此令牌将在Node.js应用程序中配置。

7. 准备就绪!您的帐户已创建并生成令牌。API 文档可在 https://docs.audd.io/ 上找到。

创建节点.js应用程序

Node.js是开源的跨平台软件,可在服务器上运行JavaScript代码。它基于Google的V8 JavaScript解释器。

1. 让我们创建应用程序。我们将创建应用程序文件夹。

mkdir chatbot-whatsapp
cd chatbot-whatsapp

2.现在我们将创建文件 。该选项允许创建文件,而无需考虑应用程序名称,版本等问题。package.json-y

npm init -y

3. 接下来,我们将安装依赖项 、 、 和 。dotenvexpressgot@zenvia/sdk

npm install dotenv express got @zenvia/sdk

4.安装依赖项后,我们将创建文件 。.env

touch .env

5.现在,我们将在文件中添加在Zenvia和AudD平台上创建的令牌,如下所示。.env

ZENVIA_TOKEN=gSTuqxR2rsXY-UJGzdXFMWv-uvp7DKPtGLzq
AUDD_TOKEN=311207449541d9dbd7f7bc9a52680e57

接下来,我们将创建文件夹并在文件夹内创建文件 。srcindex.jssrc

mkdir src
touch src/index.js

7.创建文件夹和文件后,我们将在文件中添加下面的内容,其中在收到消息时,应用程序将发送一条消息,其中包含内容测试。src/index.js

const dotenv = require('dotenv');
const { Client, TextContent, WebhookController } = require('@zenvia/sdk');

dotenv.config();

const client = new Client(process.env.ZENVIA_TOKEN);

const whatsapp = client.getChannel('whatsapp');

const webhook = new WebhookController({
  messageEventHandler: (messageEvent) => {
    console.log('Message event:', messageEvent);

    const content = new TextContent('Tested');

    whatsapp.sendMessage(messageEvent.message.to, messageEvent.message.from, content)
    .then(response => {
      console.log('Response:', response);
    });
  },
  channel: 'whatsapp',
});

webhook.on('listening', () => {
  console.log('Webhook is listening');
});

webhook.init();

8.现在我们将使用以下命令运行应用程序。

node src/index.js

9. 接下来,我们将测试与Zenvia平台的集成。我们将使用注册的手机发送测试消息。您应该会收到包含“已测试”内容的消息。

10.创建并测试短信的发送和接收后,我们将更改文件的内容以改进应用程序,搜索音乐识别并发送音频和图像类型的内容。src/index.js

const dotenv = require('dotenv');
const got = require('got');
const FormData = require('form-data');
const { Client, FileContent, TextContent, WebhookController } = require('@zenvia/sdk');

dotenv.config();

const client = new Client(process.env.ZENVIA_TOKEN);

const whatsapp = client.getChannel('whatsapp');

const webhook = new WebhookController({
  channel: 'whatsapp',
  messageEventHandler: async (messageEvent) => {
    let content = [new TextContent('Tested')];

    if (messageEvent.message.contents[0].type === 'file' && messageEvent.message.contents[0].fileMimeType.includes('audio')) {
      const music = await recognizeMusic(messageEvent.message.contents[0].fileUrl);

      if (music) {
        let text = '';
        if (music.artist) {
          text = `${text}Artist: *${music.artist}*
`;
        }
        if (music.title) {
          text = `${text}Title: *${music.title}*
`;
        }
        if (music.album) {
          text = `${text}Album: *${music.album}*
`;
        }
        content = [new TextContent(text)];
        if (music.deezer && music.deezer.picture) {
          content.push(new FileContent(music.deezer.picture, 'image/jpeg'));
        }
        if (music.deezer && music.deezer.preview) {
          content.push(new FileContent(music.deezer.preview, 'audio/mpeg'));
        }
      } else {
        content = [new TextContent('Could not identify the music from the audio.')];
      }
    }

    whatsapp.sendMessage(messageEvent.message.to, messageEvent.message.from, ...content)
    .then((response) => {
      console.debug('Response:', response);
    });
  },
});

webhook.on('listening', () => {
  console.info('Webhook is listening');
});

webhook.init();

const recognizeMusic = async (url) => {
  const form = new FormData();
  form.append('api_token', process.env.AUDD_TOKEN);
  form.append('url', url);
  form.append('return', 'deezer');

  const response = await got.post('https://api.audd.io/', {
    body: form,
    responseType: 'json',
    resolveBodyOnly: true,
  });

  if (response && response.result) {
    return {
      artist: response.result.artist,
      title: response.result.title,
      album: response.result.album,
      deezer: {
        picture: response.result.deezer && response.result.deezer.artist ? response.result.deezer.artist.picture_medium : undefined,
        preview: response.result.deezer ? response.result.deezer.preview : undefined,
      },
    };
  }
};

11.现在,我们将使用以下命令再次运行该应用程序。

node src/index.js

12. 接下来,我们将测试与Zenvia和AudD平台的集成。我们将发送音乐的音频。我们将单击并按住按钮 录制5秒钟的音乐。

13.发送音乐的音频后,应用程序将接收音频文件,搜索音乐识别,如果音乐被识别,应用程序将发送一条文本消息,其中包含艺术家,标题和专辑等音乐信息以及另外两个带有30秒音乐的图像和音频消息。

14. 准备就绪!我们使用手机和音乐识别来测试该应用程序,以发送和接收文本,图像和音频消息。

应用程序存储库可在 https://github.com/rodrigokamada/chatbot-whatsapp-music。

结论

总之,本文介绍了以下主题:

  • 我们在ngrok平台上创建了一个帐户。
  • 我们安装并配置了 ngrok 平台工具。
  • 我们在Zenvia平台上创建了一个帐户。
  • 我们在WhatsApp频道的Zenvia平台上创建了沙盒。
  • 我们在AudD平台上创建了一个帐户。
  • 我们创建了一个 Node.js 应用程序。
  • 我们使用手机和音乐识别测试了在WhatsApp频道上发送和接收文本,图像和音频消息。

您可以使用本文创建使用JavaScript和Node的应用程序.js,使用Zenvia平台从WhatsApp频道发送和接收消息以及使用AudD平台进行音乐识别。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章