Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用Microsoft Bot Framework,当我在Messenger频道上编写时,如何将结果推送到特定的空闲频道?(带节点)_Node.js_Botframework - Fatal编程技术网

Node.js 使用Microsoft Bot Framework,当我在Messenger频道上编写时,如何将结果推送到特定的空闲频道?(带节点)

Node.js 使用Microsoft Bot Framework,当我在Messenger频道上编写时,如何将结果推送到特定的空闲频道?(带节点),node.js,botframework,Node.js,Botframework,目前我的用户正在使用Messenger频道 事情是这样的:我的用户在我的机器人中键入“与教练交谈”,然后他们可以编写任何他们想要的内容,然后结果应该使用Slack推送到特定的专用通道 我怎样才能做到这一点 编辑:私人频道是一个用户请求列表,当教练可用时可以处理该列表,因此用户不必处于等待列表中您正在寻找将客户从机器人“移交”给人工代理的能力 本主题在中进行了描述,有几个示例可用,对于Node.js,您可能会对此感兴趣:我使用直接Slack API实现了它。我尝试了.sourceEvent,几乎成

目前我的用户正在使用Messenger频道

事情是这样的:我的用户在我的机器人中键入“与教练交谈”,然后他们可以编写任何他们想要的内容,然后结果应该使用Slack推送到特定的专用通道

我怎样才能做到这一点


编辑:私人频道是一个用户请求列表,当教练可用时可以处理该列表,因此用户不必处于等待列表中

您正在寻找将客户从机器人“移交”给人工代理的能力


本主题在中进行了描述,有几个示例可用,对于Node.js,您可能会对此感兴趣:

我使用直接Slack API实现了它。我尝试了
.sourceEvent
,几乎成功了:机器人只在空闲时间私下跟我说话,他不接受任何频道ID/名称(私人或非私人)

下面是我如何使它工作的(有点因式分解): 它开始于用户想要更改其计划中的任何内容(必须由教练手动完成),因此它开始于对话框
“/select\u modify\u planning”

app.js:

...

bot.dialog("/select_modify_planning", require("./dialogs/modifyPlanning").select);
bot.dialog("/ask_for_request", require("./dialogs/modifyPlanning).askForRequest);

...
modifyPlanning.js:

const builder = require('botbuilder');
const rp = require('request-promise');

...

exports.select = [
 (session, args) => {
   session.sendTyping();
   builder.Prompts.choice(session, "What do you want to declare ? :)", "Internal hours|Update rendezvous");
 },
 (session, results) => {
  if (results.response) {
    switch (results.response.entity) {
      case "Internal hours":
        session.beginDialog("/ask_for_request");
        break;
      case "Update rendezvous":
        ...
    }
  }
]

...

exports.askForRequest = [
 (session, args) => {
   session.sendTyping();
   builder.Prompts.text(session, "Type your demand please:");
 },
 async (session, results) => {
   try {
     if (results.response)
       await sendRequestToSlack(results.response);
       session.endDialog("Your demand has been sent successfully, thank you ;)");
   }
   .catch(err) {
     console.error(err);
     session.endDialog("There was a problem while sending your demand to a coach, sorry :(");
   }
 }
]

...

const sendRequestToSlack = (textToSend) => {
  var options = {
    uri: "https://slack.com/api/chat.postMessage",
    form: {
      "token": "xoxb-XXXXXX-XXXXXX", // Your bot slack token
      "channel": "XXXXXXXXX", // Your channel id (or name)
      "text": textToSend
    },
    headers: {
      'content-type': 'application/x-www-form-urlencoded'
    }
  }
  return rp.post(options);
}

...
就在这里

如果您想知道您的频道ID(使用名称是一种不好的做法,因为它们可以更改),您可以使用以下方法:对于公共频道,或者使用此方法:对于私有频道

如果是针对私人频道,则必须在bot作用域设置(
groups.xxx
)中添加良好的权限,然后重新安装(在bots设置中有一个专用于的绿色按钮)


希望一切都清楚:)

谢谢您的评论。我阅读了官方文档和github的交接,我不认为这正是我所需要的:我不希望用户处于等待状态,我只希望机器人将用户提供的信息推送到一个私人空闲通道,以便教练可以稍后处理(典型的信息是“我需要在第X天Y小时被替换,谢谢机器人!”)那你为什么不使用Slack的API呢?我很想,但我不知道如何让bot框架专门使用Slack的API。如果可以的话,我会这么说:,但它在C#中,我不确定如何将它用于节点…当我说Slack的API时,它不是bot框架中的Slack通道数据,而是直接的这个:您还可以使用bot功能启动新的对话(专用通道)在机器人和教练之间,你更喜欢什么?是的,我已经访问了api.slack.com,确切的问题是我不知道如何使用机器人的api。我知道这是可能的,通过具体的渠道。我希望bot在Slack中的特定通道中发布内容(比如用户从Messenger发出的请求):1)用户向bot写入,2)bot处理并写入Slack的通道