用户可以在瀑布步骤中的文本提示上发送附件和消息吗?
Can a user send attachment along-with message on Text prompt in a waterfall step?
假设我们在瀑布对话框中有以下步骤:
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 检查附件,但我如何接收相同的使用瀑布 step_context 以及后续步骤中的短信?
请求正文如下:
{
"text":"Hello there",
"type":"message",
"from":{
"id":"xyz"
},
"attachments":{
"contentType":"audio/wav",
"name":"BabyElephantWalk60.wav",
"contentUrl":"data:audio/wav;base64,UklGRvAEAgBXQVZFZm10IBAA
}
}
客户端,即 iOS 应用程序将使用直线 Api
https://directline.botframework.com/v3/directline/conversations/EdWGs8IdmjNIy5j2E93EHW-a/activities发送Activity.
iOS 应用程序正在使用语音工具包。
根据提示,无论用户说什么,消息连同它的音频文件都将按照提供的请求正文通过直线发送到机器人 above.And,这将使用麦克风按钮完成。
可以吗?
您似乎将其视为机器人问题,而实际上它更像是一个客户问题。您的机器人只能响应它收到的活动,因此如果客户端从未发送带有音频和文本的 activity,您的机器人将无法处理带有音频和文本的 activity文本。由于您使用的是自己的 Direct Line 客户端,因此是否允许您的客户端发送此类 activity 取决于您。由于音频文件通常非常大,我建议上传文件而不是将数据 URL 放在附件中。
通常,用户会将附件和文本作为单独的活动在不同的回合发送。机器人将通过跟踪处于其状态的对话来处理这些单独回合的数据,并且它可能是瀑布对话。听起来您不想这样做,因为在您的案例中,文本和附件实际上是相同的数据。
在机器人端,您可以根据需要在任何对话框之外访问 activity 的文本和附件。您还可以在任何提示后直接访问瀑布步骤中的 activity,因为步骤上下文包含包含 activity.
的转弯上下文
text = step_context.context.activity.text
attachments = step_context.context.activity.attachments
您可以使用文本提示或附件提示来完成此操作。如果您希望能够访问 step_context.result
中的那些内容,您可以创建自己的提示,将整个 activity 放入结果中。您可以使用 ActivityPrompt
作为基础 class 因为它是为此目的而制作的。
除了发送单独的活动之外,在同一 activity 中发送文本和音频的另一种替代方法是仅发送音频并让机器人使用 Cognitive Speech Services 将音频转换为文本。这可能不是理想的,因为那样您的客户端将无法显示文本,因为它最终没有进行转换。我假设您让用户通过麦克风提供音频输入,然后将其转换为文本,而不是让用户输入文本,然后将其转换为音频。
Direct Line Speech is a builtin way of leveraging Cognitive Speech Services so that both your client and bot can access the text. And depending on your needs, you might consider looking into Web Chat speech.
假设我们在瀑布对话框中有以下步骤:
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 检查附件,但我如何接收相同的使用瀑布 step_context 以及后续步骤中的短信?
请求正文如下:
{
"text":"Hello there",
"type":"message",
"from":{
"id":"xyz"
},
"attachments":{
"contentType":"audio/wav",
"name":"BabyElephantWalk60.wav",
"contentUrl":"data:audio/wav;base64,UklGRvAEAgBXQVZFZm10IBAA
}
}
客户端,即 iOS 应用程序将使用直线 Api https://directline.botframework.com/v3/directline/conversations/EdWGs8IdmjNIy5j2E93EHW-a/activities发送Activity.
iOS 应用程序正在使用语音工具包。
根据提示,无论用户说什么,消息连同它的音频文件都将按照提供的请求正文通过直线发送到机器人 above.And,这将使用麦克风按钮完成。
可以吗?
您似乎将其视为机器人问题,而实际上它更像是一个客户问题。您的机器人只能响应它收到的活动,因此如果客户端从未发送带有音频和文本的 activity,您的机器人将无法处理带有音频和文本的 activity文本。由于您使用的是自己的 Direct Line 客户端,因此是否允许您的客户端发送此类 activity 取决于您。由于音频文件通常非常大,我建议上传文件而不是将数据 URL 放在附件中。
通常,用户会将附件和文本作为单独的活动在不同的回合发送。机器人将通过跟踪处于其状态的对话来处理这些单独回合的数据,并且它可能是瀑布对话。听起来您不想这样做,因为在您的案例中,文本和附件实际上是相同的数据。
在机器人端,您可以根据需要在任何对话框之外访问 activity 的文本和附件。您还可以在任何提示后直接访问瀑布步骤中的 activity,因为步骤上下文包含包含 activity.
的转弯上下文text = step_context.context.activity.text
attachments = step_context.context.activity.attachments
您可以使用文本提示或附件提示来完成此操作。如果您希望能够访问 step_context.result
中的那些内容,您可以创建自己的提示,将整个 activity 放入结果中。您可以使用 ActivityPrompt
作为基础 class 因为它是为此目的而制作的。
除了发送单独的活动之外,在同一 activity 中发送文本和音频的另一种替代方法是仅发送音频并让机器人使用 Cognitive Speech Services 将音频转换为文本。这可能不是理想的,因为那样您的客户端将无法显示文本,因为它最终没有进行转换。我假设您让用户通过麦克风提供音频输入,然后将其转换为文本,而不是让用户输入文本,然后将其转换为音频。
Direct Line Speech is a builtin way of leveraging Cognitive Speech Services so that both your client and bot can access the text. And depending on your needs, you might consider looking into Web Chat speech.