2016-07-18 50 views
4

我正在使用Microsoft的Bot Framework/Bot Builder for C#.NET/LUIS構建測試機器人。它部署在Azure上。我的測試項目的想法是向用戶發送提醒。如何在Microsoft Bot Framework + C#中安排任務?

例如,當用戶詢問「兩小時內提醒我購買牛奶」時,應在兩小時內發起對話或發送對現有對話的回覆。

我沒有問題使用LUIS將自然語言解析爲日期和任務,但是我不知道如何計劃任務,以便框架以某種方式稍後將答覆發送給用戶。

我已閱讀文檔並檢查了https://docs.botframework.com/en-us/csharp/builder/sdkreference/的示例,並在StackOverflow上進行了搜索,但似乎該框架不支持它。我也看過Azure Scheduler,但它看起來非常昂貴,即使我的機器人只有100個用戶,每個用戶都有一個計劃任務。

調度任務的另一種方式是什麼,以便機器人在指定的時間向用戶發送消息?

回答

16

所以,如果我理解正確的,你的問題涉及兩個部分:

1.如何開始對話

在3.0,MS引入了一個新的方式開始新的對話(組或1對1)。參考:https://docs.botframework.com/en-us/csharp/builder/sdkreference/routing.html#conversation

示例代碼:

var connector = new ConnectorClient(incomingMessage.ServiceUrl); 
var ConversationId = await connector.Conversations.CreateDirectConversationAsync(incomingMessage.Recipient, incomingMessage.From); 
IMessageActivity message = Activity.CreateMessageActivity(); 
message.From = botChannelAccount; 
message.Recipient = new ChannelAccount() { name: "Larry", "id":"@UV357341"}; 
message.Conversation = new ConversationAccount(id: ConversationId.Id); 
message.Text = "Hello"; 
message.Locale = "en-Us"; 
var reply = await connector.Conversations.ReplyToActivityAsync(message); 

2.如何安排作業

有做這件事的多種方式,你可以使用一個外部隊列服務,Azure的網絡工作, web角色,或嘗試在ASP.NET本身中註冊。

Hangfirehttp://hangfire.io/)是我用於我的機器人。

代碼示例:

BackgroundJob.Schedule(
() => TriggerConversation(), // <= the start conversation code here 
TimeSpan.FromDays(1)); // <= when the job should be ran 
+0

您使用的免費版本還是payed? –

+1

@AlokRajasukumaran:我正在使用免費版本 –

+0

您可以演示如何做到這一點嗎? –

1

Quartz.NET似乎是調度任務的流行的解決方案。它可以將它們存儲在Azure中的數據庫中。

+0

你可以給出如何做到這一點的演示代碼? –

+0

如果你提供這個實現,會很好 –

相關問題