Botframework bot框架未接收到Slack对话框。打开表单响应

Botframework bot框架未接收到Slack对话框。打开表单响应,botframework,slack,Botframework,Slack,我正在使用bot Builder SDK为Node.js构建bot 这个机器人是给懒汉用的 我已经按照文档正确配置了slack和botframework botframework、slack和节点服务之间的所有通信都是通过HTTPS进行的。 框架正在与slack正确通信 在下一步中,我将处理slack 首先,我在Bot Builder SDK中找不到任何方法,我甚至尝试打开slack对话框 最后,我能够打开与direct post的对话: 但当我提交表格时,我发现了一个错误: 我们在连接上遇到了

我正在使用bot Builder SDK为Node.js构建bot

这个机器人是给懒汉用的

我已经按照文档正确配置了slack和botframework

botframework、slack和节点服务之间的所有通信都是通过HTTPS进行的。 框架正在与slack正确通信

在下一步中,我将处理slack

首先,我在Bot Builder SDK中找不到任何方法,我甚至尝试打开slack对话框

最后,我能够打开与direct post的对话:

但当我提交表格时,我发现了一个错误:

我们在连接上遇到了一些问题。再试一次

请参见屏幕截图:

控制台显示以下错误:

请求URL:

响应:{“ok”:false,“error”:“curl_error”}

“类型”为“对话框提交”的松弛发送有效负载

通过将“交互式组件->请求URL”更改为我的bot服务,我已经对此进行了测试。 使slack直接与我的机器人服务通信。 参考:中的“添加和配置交互式消息(可选)”部分

所以,当我点击submit按钮时,我确信消息是从对话框发送的

slack和我的bot服务之间的消息丢失。当请求URL设置为:

我从未收到任何服务正在接收消息的指示

请帮我解决这个问题

以下是我用来打开对话框的代码:

let RESTClient = require('node-rest-client').Client;
let FrameworkClient = new RESTClient();
let Promise = require('bluebird');
openDialogBox: function(token, trigger_id, callback_id) {
    return new Promise(function(resolve, reject) {
        var dialog = {
          "title": "Issue Details",
          "submit_label": "Submit",
          "callback_id": callback_id,
          "elements": [
            {
                    "type": "text",
                    "label": "Pickup Location",
                    "name": "loc_origin"
            },
            {
                    "type": "text",
                    "label": "Dropoff Location",
                    "name": "loc_destination"
            }
          ]
        };
        var args = {};
        args.headers = {Authorization: 'Bearer ' + token, 'Content-type': 'application/json; charset=utf-8'};
        args.data = {"trigger_id": trigger_id, "dialog": dialog};
        FrameworkClient.post("https://slack.com/api/dialog.open", args , function(data, response) {
          if (data && data.ok) {
            resolve(data);
          } else {
            reject();
          }
        });
    });
}
感谢@JasonSowers(工程师-微软机器人框架)

Microsoft Bot Framework目前不支持此操作


他们将来可能会支持这一点。

我不知道Bot框架,但我已经为我的Slack应用程序实现了对话框。它们的工作原理与交互式消息非常不同。因此,如果您的框架没有正式支持它,我怀疑您是否能够使它工作。示例:任何对Slack的非空响应(可选错误属性除外)都将触发此错误。“我们在连接时遇到一些问题…”一些后续问题,您使用的是.net还是node sdk?你能分享一下你的代码吗?你已经做到了这一点?提交后,您的机器人是否有任何活动?谢谢Erik的回复。我认为它显示的错误实际上发生了,如果slack向其发布响应的请求URL在3秒钟内没有响应。@JatinderKumar在与团队讨论后,这不是通过bot框架可以完成的事情,我们不支持这一点。您可以通过在bot外部执行发送/接收并将结果数据发送到bot来实现这一点。感谢您提醒我们注意这一点,它现在在我们的雷达上,我们将在将来研究支持它。@JasonSowers任何时间线,我们什么时候可以期望它得到支持?ThanksHi@jatinder kumar,你找到另一种方法了吗?我在我的应用程序中将请求url更新为备用api,但我无法从新的请求url api post方法手动获取api令牌,如果我们将请求url用作Azure机器人服务url,则可以从ChannelData获取此令牌,但当我们使用自定义请求url时则不能,因为Azure存储了此令牌。任何帮助都将不胜感激。我已经添加了一个按钮,点击打开了对话框。从按钮单击事件中,您可以获得令牌。来自“session.message.sourceEvent”的Hi@jatinder kumar,感谢您的回复。你是说按钮点击松弛信息吗?我的意思是这个对象访问代码“session.message.sourceEvent”写在哪里?如果你能发布代码,那就太好了。您是否仍在使用MS bot框架?如果是这样,用户访问令牌将位于Azure中,对吗?是的,它是slack action按钮。点击该按钮,您将在为该按钮创建的bot句柄中得到回调。谢谢@jatinder kumar,但我的句柄上没有收到它。不知道我做错了什么。我收到的有效载荷如下。