【问题标题】:Viber Bot send files from BufferViber Bot 从缓冲区发送文件
【发布时间】:2020-08-12 21:07:51
【问题描述】:

我正在尝试使用 viber-bot 将 pdf 文件发送到客户端,但我没有这些文件在本地或作为 url。我从其他请求中获取所需的文件,但我没有找到任何关于缓冲区的信息在 viber-bot 文档中。 这是我的代码:

const ViberBot = require('viber-bot').Bot,
  BotEvents = require('viber-bot').Events,
  TextMessage = require('viber-bot').Message.Text,
  FileMessage = require('viber-bot').Message.File,
  express = require('express');
const app = express();

if (!process.env.BOT_ACCOUNT_TOKEN) {
  console.log('Could not find bot account token key.');
  return;
}
if (!process.env.EXPOSE_URL) {
  console.log('Could not find exposing url');
  return;
}

const bot = new ViberBot({
  authToken: process.env.BOT_ACCOUNT_TOKEN,
  name: process.env.BOT_NAME,
  avatar: ''
});
bot.on(BotEvents.SUBSCRIBED, response => {
  response.send(new TextMessage(`Hi there ${response.userProfile.name}. I am ${bot.name}! Feel free to ask me anything.`));
});
bot.onSubscribe(response => console.log(`Subscribed: ${response.userProfile.name}`));
bot.on(BotEvents.MESSAGE_RECEIVED, async (message, response) => {
  try {
//use buffer instead of urls
    await response.send(
new FileMessage('https://upload.wikimedia.org/wikipedia/commons/3/3d/Katze_weiss.png', 2, 'test.png')).catch(err => console.log(err))
  } catch(err) {
    console.log(err);
  }

  response.send(new TextMessage(`Message received.`));
});
const port = process.env.PORT || 3000;
app.use("/viber/webhook", bot.middleware());
app.listen(port, () => {
  console.log(`Application running on port: ${port}`);
  bot.setWebhook(`${process.env.EXPOSE_URL}/viber/webhook`).catch(error => {
    console.log('Can not set webhook on following server. Is it running?');
    console.error(error);
    process.exit(1);
  });
});

【问题讨论】:

  • 找到解决办法了吗?
  • @edrichhans 好像 Viber 不能做这样的事情

标签: node.js viber-api


【解决方案1】:

对我有什么影响:

  • Viber Bot 在 Node.js 下的本地服务器上运行
  • Ngrok 生成并公开将 ViberBot Live 带到 Internet 上的特定链接。
  • 生成您的 .pdf 并将其保存在本地路径(例如 ngrokpath/myfiles/mypdf.pdf)

然后在你的机器人内部使用:

var filename = "MyClientFile.pdf";
var urlstring = expose_url+"/myfiles/"+filename;    
var pdffilesize = 150; //kb                        
response.send(new FileMessage(urlstring, pdffilesize, filename));

expose_url 是来自 Ngrok 会话的 url。 根据 viber api,pdffilesize 仅供参考。 Viber Bot 需要知道文件大小。

如果您不想存储本地文件并直接从缓冲区中检索,请使用 pdfmake 插件。

生成您的 pdf(base64 字符串),然后作为媒体提供给 viber 消息。

希望对你也有用...

Ngrok Link

pdfmake tutorial

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 2018-10-31
    • 1970-01-01
    • 2021-09-10
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多