我正在尝试微软的新Botframework.发送消息时,消息\n中没有换行符.我怎么解决这个问题?
在Telegram API中,有一个名为parse_mode(https://core.telegram.org/bots/api#formatting-options)的参数用于激活HTML.我可以使用"<br />",但我不知道如何设置此参数.有人可以通过发送换行符或电报参数来帮助我吗?
问候最大
我正在使用Microsoft bot开发框架,使用其node.js sdk.我一直在寻找一种方法来保存对话的所有消息.我将persistConversationData设置为true,并尝试使用session.conversationData访问conversationData.但是,它是空的.
1-是否有内置方法来访问对话中的所有消息?
2-如果persistConversationData不适用于此,任何人都可以解释它的用法.
非常感谢.
我想创建一个机器人,但我很困惑什么是Bot Framework和Azure Bot服务?谁能详细解释一下?
我正在使用c#.net和LUIS认知服务上的MicrofsoftBotFramework开发一个聊天机器人.
我希望当用户输入时它应该回复为打字或机器人正在输入..
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
Trace.TraceInformation($"Type={activity.Type} Text={activity.Text}");
if (activity.Type == ActivityTypes.Message)
{
//await Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync(activity, () => new ContactOneDialog());
//Implementation of typing indication
ConnectorClient connector = new ConnectorClient(new System.Uri(activity.ServiceUrl));
Activity isTypingReply = activity.CreateReply("Shuttlebot is typing...");
isTypingReply.Type = ActivityTypes.Typing;
await connector.Conversations.ReplyToActivityAsync(isTypingReply);
await Conversation.SendAsync(activity, () =>
new ExceptionHandlerDialog<object>(new ShuttleBusDialog(), displayException: true));
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(System.Net.HttpStatusCode.OK);
return response;
}
Run Code Online (Sandbox Code Playgroud)
这段代码也有效,但它将"TYPING"称为动画并转到下一条消息.但我想它应该显示我的消息,我已设置为"Shuttlebot正在打字...
"
我注意到,通过Bot框架和电报频道,像:)这样的表情符号不会转换为表情符号.
然而,它非常简单,我们只需要改变:)来:微笑:并且会出现一个很好的表情符号.
最佳解决方案是覆盖context.PostAsync()函数,执行那种字符串替换,然后继续.
我们可以重写此方法,而无需重新编译所有框架吗?
谢谢 :)
从版本3.8开始,Bot Framework现在包含了一些像这样的消息:
从版本3.8开始,不推荐使用DialogAction.validatedPrompt().请考虑使用自定义提示.
我在文档中没有看到任何提及.什么是"自定义提示",哪里可以了解有关如何改进已弃用功能的更多信息?
围绕微软的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 …
我正在尝试使用ConnectorClient从Azure函数发送主动消息,但我获得了授权异常,尽管使用了正确的AppId&AppPassword
var connector = new ConnectorClient(new Uri(queueMessage.ChatBotDetails.ServiceUrl), new MicrosoftAppCredentials(appId, appPassword));
await connector.Conversations.SendToConversationAsync((Activity)message);
Run Code Online (Sandbox Code Playgroud)
但这会产生以下异常:
Microsoft.Bot.Connector.ErrorResponseException: Operation returned an invalid status code 'Unauthorized'
我在日志中输出应用密码和应用ID,它们是正确的.
将Azure Bot Service与C#Bot Builder SDK v4 v4.0.7(GA版本于2018年9月发布)结合使用。
我正在使用BOT文件存储A的配置设置GenericService,因此已更改了Azure模板随附的默认BOT文件。
通过MSBOT CLI进行了更改。
通过模拟器在本地运行时,机器人代码会看到已修改的本地BOT文件,一切都很好。
但是,BOT从未部署到Azure,因此Azure服务看不到我的更改(它被保留在默认的BOT文件中)。我已经通过Visual Studio publish和GitHub CI进行了部署。
我必须使用Visual Studio Cloud Explorer手动上传文件,然后该bot能够使用修改后的版本,一切都很好。
问题是为什么BOT文件未与其余的bot代码一起部署,以及如何确保已部署它。不确定这是否是错误?
我使用的是Bot Framework(V4),并且有一个分为两个步骤的WaterfallDialog;第一步是捕获表单数据,第二步是处理表单数据。
第一步发送答复:
private async Task<DialogTurnResult> CaptureFormStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var reply = await stepContext.Context.Activity.GetReplyFromCardAsync("BusinessyForm");
await stepContext.Context.SendActivityAsync(reply, cancellationToken);
}
Run Code Online (Sandbox Code Playgroud)
的GetReplyFromCardAsync是一个扩展方法这需要的JSON表示Activity具有自适应卡作为attachnent。自适应卡与此类似。自适应卡还具有提交动作。
我的问题是如何将这些信息传递给下一步?
在先前的尝试中,我已返回提示:
return await stepContext.PromptAsync(
"custom-prompt-id",
new PromptOptions { Prompt = MessageFactory.Text("Hello!") },
cancellationToken);
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,我不想提示用户其他信息。理想情况下,我想“保持”对话框状态以进行响应,当检测到响应时,下一步将处理提交结果。
我尝试过的事情:
这可行吗?任何帮助将非常感激!
botframework ×10
bots ×2
c# ×2
node.js ×2
azure ×1
chatbot ×1
save ×1
sublimetext ×1
telegram-bot ×1