所以要解释我的问题,我必须给你的上下文。微软DirectLine API到机器人不起作用
我得到了一个僵尸部署的微软bot框架的Bot。现在它可以在机器人通信的后端发生这些“事件”。当一个事件发生时,我想通知我的机器人,然后让它发送一条消息给它的所有对话中发生的事情。所以基本上:
Backend>Microserivce>Bot>users
要做到这一点,我必须存储在我的后端,我在数据库中做的所有谈话。当事件发生时,后端会将所有对话(基本上是他们的ID)以及它应该显示的事件发送到机器人。
所以在本质上,我的后端需要发布消息到我的机器人。
为了做到这一点,我在这里找到了微软的directline api,这是一个更为抽象的方式来与bot交谈。问题是我不知道该怎么做。我遵循微软自己的教程,但它似乎并不适合我:
这是我的后端用来通知机器人的端点。 “内容”包含会话和事件作为json格式字符串。
[HttpPost]
[Route("conversationsEvents")]
public HttpResponseMessage PostConversationsEvents([FromBody]string content)
{
NotifyBot.Notify(content);
return Request.CreateResponse(HttpStatusCode.NoContent);
}
NotifyBot.Notify(内容)看起来是这样的:
private static async Task StartBotConversation(string contents)
{
string directLineSecret = "secret";
string fromUser = "microserviceNotifyEndpoint";
Activity activity = new Activity
{
From = new ChannelAccount(fromUser),
Text = contents,
Type = ActivityTypes.Event
};
DirectLineClient client = new DirectLineClient(directLineSecret);
var conversation = await client.Conversations.StartConversationAsync();
await client.Conversations.PostActivityAsync(conversation.ConversationId, activity);
}
Basicly执行GET的停留在var conversation = await client.Conversations.StartConversationAsync();
,它只是等待,直到永远。 我试图将其更改为var conversation = await client.Conversations.StartConversationAsync().ConfigureAwait(continueOnCapturedContext: false);
'执行继续,但活动似乎没有发布。
我认为使用directline api是一种很好的做法。我也试过在我可以调用的bot中定义一个“正常”端点,但它给了我相同的结果。我会看看你的例子。 – lallaliff