TimerTrigger Azure用于在Bot Framework上启动主动对话的功能

时间:2017-07-12 02:29:15

标签: javascript node.js triggers botframework azure-functions

我想简而言之,我希望Nodejs等同于this SO questionthis Github Bot Framework example

我想使用Azure功能(我想象一下TimerTrigger功能或者QueueTrigger功能),它会主动向已经(自然)已经向机器人发送消息的人/地址的子集发送消息一个特定的平台。

我的猜测是我需要使用TimerTrigger并将其绑定到存储类型触发器(queueStorage?blogStorage?),该触发器将维护要发送消息的地址/人员列表,然后通过Direct Line向Bot发送消息。虽然我是Azure Functions的新手。

首先,我使用Proactive模板在Azure上创建了一个bot服务。在模板中,他们使用QueueTrigger。我猜测TimerTrigger的 function.json 看起来像这样:

{
  "bindings": [
    {
      "name": "myQueuedAddresses",
      "type": "timerTrigger",
      "direction": "in",
      "queueName": "bot-queue",
      "schedule": "0 0 */1 * * *"
    },
    {
      "type": "bot",
      "name": "$return",
      "direction": "out",
      "botId": "botId"
    },
    {
      "type": "http",
      "name": "res",
      "direction": "out"
    }
  ]
}

要摄取触发器,它可能很简单:

bot.on('trigger', function (addresses) {
    addresses.forEach(sendToAddress);
    function sendToAddress(item) {
        var queuedMessage = item.value;
        var reply = new builder.Message()
            .address(queuedMessage.address)
            .text('This is coming from the trigger: ' + queuedMessage.text);
        bot.send(reply);
    } 
});

但是Javascript将数据发送到触发器会是什么样子?或者我应该使用什么触发器?

1 个答案:

答案 0 :(得分:1)

使用TimerTrigger Azure功能时,您不会向触发器功能发送任何数据,它将根据设置的时间表自动执行(“时间表”中的cron作业设置:“0 0 * / 1 * * * “)。 在主动型僵尸模板中:僵尸程序一旦触发就会通过队列消息触发功能;该功能通过Direct Line触发Bot。

因此,如果您想要向用户发送每日消息(例如,从Bot),那么您可以使用主动bot模板,只需将触发器功能侧修改为TimeTrigger,并尝试在响应,所以你的机器人知道这是来自TimerTrigger。 (如果在机器人方面不再需要写入队列,你也可以删除它。)