我正在研究.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()
任何人都可以建议修复此问题或让我知道一个不同的方法?
谢谢!
背风处
我正在使用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操作时,没有任何反应.它在模拟器上正常工作.请问,有人可以帮助我,如何解决这个问题?谢谢.
我试图从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) 在机器人内部的对话框中,我将标志值存储在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。我在相关文档中看不到任何有助于阐明此问题的信息-我在这里可能做错了什么?我有误会吗?
我有一些代码让机器人在启动时发送消息(字符串)。
但是,不是像您在下面的代码中看到的那样发送文本。我想弄清楚在这种情况下您将如何发送自适应卡。我之前从 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) 围绕微软的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 …