小编D4R*_*IDE的帖子

从Scorable,如何调用对话框然后清除堆栈?

我正在研究.NET中的机器人.我有一个scorable,我想从一个对话框D1,然后最终得到一个空堆栈.或者用另一种方式,我想发射一个新的对话框,但不是打断然后恢复我所处的位置(像最可靠的例子),最后得到一个空白的对话框(如取消可行的例子).

可能相关点:它触发的对话框(D1)依次在堆栈上放置另一个对话框(D2),我也希望在堆栈清除之前正常工作.

有一个取消可行的例子:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-global-handlers .其目的是清除对话框堆栈.

我想这样做,但先调用另一个对话框.我在我的scorable的PostAsync()方法中试过这个:

var interruption = dialog_D1.Void<object, IMessageActivity>();
_task.Call(interruption, null);
await _task.PollAsync(token);
_task.Reset();
Run Code Online (Sandbox Code Playgroud)

然而,只要D1调用D2,就会触发PollAsync()并清除对话框堆栈.这意味着当您响应D2时,堆栈为空,RootDialog接受输入.

我也在我的scorable的PostAsync()方法中试过这个:

var interruption = dialog_D1.Void<object, IMessageActivity>();
_task.Call(interruption, AfterCallingDialog);
await _task.PollAsync(token);

...

private async Task AfterCallingDialog(IDialogContext context, IAwaitable<object> result)
{
   _task.Reset();
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,机器人错误地出现"IDialog方法执行完成了通过IDialogStack指定的多个简历处理程序".一击到_task.Call()

任何人都可以建议修复此问题或让我知道一个不同的方法?

谢谢!

背风处

c# botframework

6
推荐指数
1
解决办法
582
查看次数

Bot Framework openUrl不适用于对Messenger的建议操作

我正在使用Bot Builder Node.js sdk创建facebook bot,我正在尝试创建建议的操作,这会将用户导航到网页.我知道,Facebook有限制,它只重定向到https端点,但由于我重定向到的页面是https,这显然不是问题.这是我的代码:

var msg = new builder.Message(session)
.text("User message here")
.suggestedActions(
    builder.SuggestedActions.create(
            session, [
                builder.CardAction.imBack(session, "command1", "Command1"),
                builder.CardAction.imBack(session, "command2", "Command2"),
                builder.CardAction.openUrl(session, "https url", "Go to web")
            ]
        )); 
session.send(msg);
Run Code Online (Sandbox Code Playgroud)

问题是,当我在Messenger上单击openUrl操作时,没有任何反应.它在模拟器上正常工作.请问,有人可以帮助我,如何解决这个问题?谢谢.

bots node.js facebook-messenger botframework

5
推荐指数
0
解决办法
511
查看次数

cx_Freeze构建错误?

我试图从python,flask和boto3应用程序创建二进制文件.我在运行pip install cx_Freeze命令时遇到了麻烦.我收到以下错误:

它似乎没有获取正确的系统库.此外,有人可以建议任何工具将python应用程序打包成二进制文件吗?

  Failed building wheel for cx-Freeze
  Running setup.py clean for cx-Freeze
Failed to build cx-Freeze
Installing collected packages: cx-Freeze
  Running setup.py install for cx-Freeze ... error
    Complete output from command /home/shaswat.g/.virtualenvs/flask_app/bin/python -u -c "import setuptools,     tokenize;__file__='/tmp/pip-build-yLvkz9/cx-Freeze/setup.py';f=getattr(tokenize, 'open',     open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install     --record /tmp/pip-kKRaSM-record/install-record.txt --single-version-externally-managed --compile     --install-headers /home/shaswat.g/.virtualenvs/flask_app/include/site/python2.7/cx-Freeze:
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-2.7
    creating build/lib.linux-x86_64-2.7/cx_Freeze
    copying cx_Freeze/dist.py -> build/lib.linux-x86_64-2.7/cx_Freeze
    copying cx_Freeze/main.py -> build/lib.linux-x86_64-2.7/cx_Freeze
    copying cx_Freeze/common.py -> build/lib.linux-x86_64-2.7/cx_Freeze
    copying cx_Freeze/__init__.py -> …
Run Code Online (Sandbox Code Playgroud)

python pip cx-freeze

5
推荐指数
1
解决办法
3872
查看次数

如何在消息控制器之类的对话框外访问Bot Framework ConversationData?

在机器人内部的对话框中,我将标志值存储在ConversationData中,如下所示:

context.ConversationData.SetValue("SomeFlag", true);
Run Code Online (Sandbox Code Playgroud)

稍后,将消息分派到对话框之前,我需要在MessagesController中检查该标志。根据上一个问题,我尝试通过StateClient检索ConversationData,如下所示:

public async Task<HttpResponseMessage> Post([FromBody] Activity incomingMessage)
{
    StateClient stateClient = incomingMessage.GetStateClient();
    BotData userData = await stateClient.BotState.GetConversationDataAsync(message.ChannelId, message.Conversation.Id);
    bool finishedQuote = userData.GetProperty<bool>("SomeFlag");
    //...
    // do conditional logic, then dispatch to a dialog as normal
}
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,该userData变量持有一个BotData对象,该对象userData.Data为null,并且我无法通过检索任何存储的标志GetProperty。我在相关文档中看不到任何有助于阐明此问题的信息-我在这里可能做错了什么?我有误会吗?

c# botframework

4
推荐指数
1
解决办法
1547
查看次数

在机器人启动时发送自适应卡片作为欢迎消息

我有一些代码让机器人在启动时发送消息(字符串)。

但是,不是像您在下面的代码中看到的那样发送文本。我想弄清楚在这种情况下您将如何发送自适应卡。我之前从 RootDialog 发送了一张卡片,但不是从 MessageController.cs 发送的。任何方向在这里都会很棒!

else if (message.Type == ActivityTypes.ConversationUpdate)
            {
                // Handle conversation state changes, like members being added and removed
                // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
                // Not available in all channels

                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));

                    foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty<ChannelAccount>())
                    {
                        // if the bot is added, then
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = ((Activity)iConversationUpdated).CreateReply($"WELCOME MESSAGE …
Run Code Online (Sandbox Code Playgroud)

c# botframework adaptive-cards

3
推荐指数
1
解决办法
3106
查看次数

node.js错误消息events.js:183 throw er; //未处理的'错误'事件

围绕微软的botframework,当我尝试运行机器人的主要文件app.js文件时,第一次没问题,在我关闭机器人模拟器和所有程序之后,再次运行app.js,弹出此错误消息

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::3978
    at Object._errnoException (util.js:1022:11)
    at _exceptionWithHostPort (util.js:1044:20)
    at Server.setupListenHandle [as _listen2] (net.js:1351:14)
    at listenInCluster (net.js:1392:12)
    at Server.listen (net.js:1476:7)
    at Server.listen (C:\Users\yu\Documents\GitHub\BotBuilder-
Samples\Node\cards-AdaptiveCards\node_modules\restify\lib\server.js:404:32)
    at Object.<anonymous> (C:\Users\yu\Documents\GitHub\BotBuilder-
Samples\Node\cards-AdaptiveCards\app.js:10:8)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
Run Code Online (Sandbox Code Playgroud)

我找到了一些解决方案,看起来我第二次运行js文件时采用了端口3978,我必须使用cmd查找哪个任务正在使用该端口,然后终止任务.

C:\>netstat -aon|findstr 3978
Run Code Online (Sandbox Code Playgroud)

所以这个人正在接收港口,虽然我已经关闭了所有程序

TCP    0.0.0.0:3978           0.0.0.0:0              LISTENING       13140
TCP    [::]:3978              [::]:0                 LISTENING       13140
Run Code Online (Sandbox Code Playgroud)

实际上它是node.exe本身,它仍然在后台运行

C:\Users\yu>tasklist|findstr 13140
node.exe                     13140 Console                    1     42,064 K
Run Code Online (Sandbox Code Playgroud)

我需要杀死它

C:\Users\yu>taskkill /f /t /im node.exe
Run Code Online (Sandbox Code Playgroud)

当我想多次运行该文件时,有没有办法不总是重复这样做,它今天才开始连线,我的意思是所有不同的app.js文件,包括官方示例代码.在过去的一个月里,一切都很好,我使用的IDE是sublime text 3,node.js版本是8.9.4 …

node.js sublimetext botframework

3
推荐指数
3
解决办法
2万
查看次数