【发布时间】:2019-05-30 02:53:15
【问题描述】:
我是 Bot Framework 的新手,所以如果这是基本的,我很抱歉,但我正在尝试向用户发送主动消息以开始对话。我正在使用以下示例:
这很好用,但我想做的是从这一点开始一个对话框,而不是仅仅向用户发送一些文本。这可能吗?这是示例中的代码
[Route("api/notify")]
[ApiController]
public class NotifyController : ControllerBase
{
private readonly IBotFrameworkHttpAdapter _adapter;
private readonly string _appId;
private readonly ConcurrentDictionary<string, ConversationReference> _conversationReferences;
private readonly BotState _userState;
private readonly BotState _conversationState;
public NotifyController(IBotFrameworkHttpAdapter adapter,
ICredentialProvider credentials,
ConcurrentDictionary<string, ConversationReference> conversationReferences,
ConversationState conversationState,
UserState userState
)
{
_adapter = adapter;
_conversationReferences = conversationReferences;
_appId = ((SimpleCredentialProvider)credentials).AppId;
// If the channel is the Emulator, and authentication is not in use,
// the AppId will be null. We generate a random AppId for this case only.
// This is not required for production, since the AppId will have a value.
if (string.IsNullOrEmpty(_appId))
{
_appId = Guid.NewGuid().ToString(); //if no AppId, use a random Guid
}
_conversationState = conversationState;
_userState = userState;
}
[HttpGet("{number}")]
public async Task<IActionResult> Get(string number)
{
foreach (var conversationReference in _conversationReferences.Values)
{
await ((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, BotCallback, default(CancellationToken));
}
// Let the caller know proactive messages have been sent
return new ContentResult()
{
Content = "<html><body><h1>Proactive messages have been sent.</h1></body></html>",
ContentType = "text/html",
StatusCode = (int)HttpStatusCode.OK,
};
}
private async Task BotCallback(ITurnContext turnContext, CancellationToken cancellationToken)
{
//This works from the sample:
await turnContext.SendActivityAsync("Starting proactive message bot call back");
//However I would like to do something like this (pseudo code):
//var MyDialog = new ConfirmAppointmentDialog();
//await turnContext.StartDialog(MyDialog);
}
}
【问题讨论】:
-
您希望发送主动消息以响应什么?也就是说,是什么触发了它?
-
你还在做这个吗?
-
抱歉,我仍在努力解决这个问题 - 但我最终解决了这个问题。一个 Azure 函数将调用我的 NotifyController,它有一个方法,现在可以通过对话框开始对话。我会为其他人发布解决方案。非常感谢。
-
this._Dialog at dialogSet.Add(this._Dialog);我无法将 _Dialog 视为依赖项或函数输入,建议使用。 @瑞安
标签: c# botframework