所以要解釋我的問題,我必須給你的上下文。微軟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