延迟发送消息

时间:2018-11-09 18:02:47

标签: chatbot facebook-messenger facebook-messenger-bot facebook-chatbot

我正在实现一个Facebook Messenger Chatbot,并且在其中一个对话流程中,该机器人应该发送6条消息,一个又一个。

我希望将这些消息延迟1秒,然后在它们之间显示一个发件人操作,以使对话感觉自然(与一次转储6条消息相比,这迫使用户向上滚动以阅读)全部)。

我尝试了2种不同的Webhook实现,但是它们都不起作用。一个在 Python / Flask 中:在每条消息之间,我放了time.sleep(delay),但没有用。另一个在 Javascript / NodeJS 中:在每条消息之间,我都输入了setTimeout(function() {sendMessage(recipient_id);}, delay),但它也没有用。两种版本都能完美运行,而不会延迟。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

您可以使用下面的代码,它等待1秒钟,然后使用async / await回复。

const messages = ["first", "second", "third", "forth", "fifth", "sixth"];

const sleep = delay => {
  return new Promise(function(resolve) {
    setTimeout(resolve, delay);
  });
};

const displayMessage = async messages => {
  for (let message of messages) {
    await sleep(1 * 1000);
    console.log(message);
  }
};

displayMessage(messages);

答案 1 :(得分:0)

您可以在此类情况下使用settimeout。但是,对于显示sender_action而言,如果您想从Messenger中显示来自机器人的typing...之类的文字,那么facebook在其Messenger API中提供了功能,以包括具有不同标签的发送者动作。这就是我的做法。

sender_action: 'typing...',
messaging_type: 'MESSAGE_TAG',
tag: 'NON_PROMOTIONAL_SUBSCRIPTION',

请查看以下链接以获取更多信息。 https://developers.facebook.com/docs/messenger-platform/send-messages/sender-actions

答案 2 :(得分:0)

在提出问题时提供更多代码会更好。我怀疑您实际上是这样做的:

setTimeout(function() {sendMessage(recipient_id);}, delay)
setTimeout(function() {sendMessage(recipient_id);}, delay)
setTimeout(function() {sendMessage(recipient_id);}, delay)
setTimeout(function() {sendMessage(recipient_id);}, delay)
setTimeout(function() {sendMessage(recipient_id);}, delay)
setTimeout(function() {sendMessage(recipient_id);}, delay)

setTimeout是异步的,这意味着您的代码将等待1秒钟,然后连续发送6条消息。您可能正在寻找这样的东西:

await setTimeout(function() {sendMessage(recipient_id);}, delay)
await setTimeout(function() {sendMessage(recipient_id);}, delay)
await setTimeout(function() {sendMessage(recipient_id);}, delay)
await setTimeout(function() {sendMessage(recipient_id);}, delay)
await setTimeout(function() {sendMessage(recipient_id);}, delay)
await setTimeout(function() {sendMessage(recipient_id);}, delay)

答案 3 :(得分:-1)

您可以检出wingbothere on the github。它有助于构建一个简单的机器人。像这样:

const { Router } = require('wingbot');

const bot = new Router();

bot.use('start', (req, res) => {
   res.typingOn()
      .wait(1000)
      .text('Hello');
});