让我们在瀑布对话框中执行以下步骤:
self.add_dialog(TextPrompt(TextPrompt.__name__))
self.add_dialog(
WaterfallDialog(
WaterfallDialog.__name__,
[
self.project_step,
self.name_step,
self.confirm_step,
self.final_step,
],
)
)
async def project_step(
self, step_context: WaterfallStepContext
) -> DialogTurnResult:
"""
If a project name has not been provided, prompt for one.
:param step_context:
:return DialogTurnResult:
"""
confluence_details = step_context.options
if confluence_details.project is None:
message_text = key.query_project_confluence_text.value + "?"
prompt_message = MessageFactory.text(
message_text, message_text, InputHints.expecting_input
)
return await step_context.prompt(
TextPrompt.__name__, PromptOptions(prompt=prompt_message)
)
return await step_context.next(confluence_details.project)
如果用户在提示时将附件和文本一起发送给机器人。是否可以同时在step_context.result。
中获得两者在on_message_activity中,我可以使用TurnContext.activity.attachments进行附件检查,但是如何在后续步骤中使用Waterfall step_context和Text消息来接收附件?
请求正文如下:
{
"text":"Hello there",
"type":"message",
"from":{
"id":"xyz"
},
"attachments":{
"contentType":"audio/wav",
"name":"BabyElephantWalk60.wav",
"contentUrl":"data:audio/wav;base64,UklGRvAEAgBXQVZFZm10IBAA
}
}
客户端,即iOS应用将使用Directline Apihttps://directline.botframework.com/v3/directline/conversations/EdWGs8IdmjNIy5j2E93EHW-a/activities发送活动。
iOS应用程序正在使用语音工具包。
在提示时,无论用户说什么,消息及其音频文件都将按照上面提供的那样通过请求正文中的直接路线发送给bot。并且,这将使用麦克风按钮完成。
是否可以这样做?
[您似乎更像是一个机器人问题,而实际上更像是一个客户问题。您的漫游器只能响应收到的活动,因此,如果客户端从不发送包含音频和文本的活动,则您的机器人将无法处理包含音频和文本的活动。由于您使用的是自己的Direct Line客户端,因此由您决定允许客户端发送这样的活动。由于音频文件通常很大,因此我建议上传文件,而不要在附件中放置数据URL。