2017-01-27 58 views
1

我正在使用Microsoft Bot Framework for .NET創建一個簡單的問題/答案bot,用C#編寫的ASP.NET MVC WebApi,主要用於Slack通道多個用戶。Microsoft Bot框架對話框與多個用戶

我創建了我從我的消息控制器開始按照框架文件對話框:

await Conversation.SendAsync(activity,() => new QuestionDialog()); 

Lambda表達式指示機器人框架使用了一個對話框,構造函數。 QuestionDialog實現了IDialog。啓動對話後,對話框類將被序列化並存儲在Bot連接器雲中,以保存當前問題和預期答案,然後在當前對話中收到新消息時進行反序列化。

我希望任何用戶都能夠回答Bot提出的隨機問題,而不管哪個用戶發起對話,但似乎爲每個與bot交互的用戶創建了一個新的QuestionDialog,因此只有發起該問題的用戶可以回答它。

是否有任何方法創建一個僅與對話/頻道關聯的對話框,而不是對話/頻道和用戶的組合?以這種方式嘗試使用對話框是否有意義?

+0

您可以使用update_id更新每個發送的消息給用戶。你有沒有嘗試過?我的意思是如果有人回答問題,更新發送的問題消息,爲每個用戶使用他們存儲的update_id。 – OmG

+0

你可以給一個你想要實現的組對話的腳本示例嗎? –

+0

@SergeyL只是要清楚我正在用C#編寫這個...我已經添加了一些更詳細的問題。 – Cat

回答

0

我想我會實現這個的辦法是:

  1. 存儲狀態(最新的問題)對每個通道單獨。例如,創建一個可序列化的類「QuestionState」,它至少具有以下屬性:服務URL,對話賬號ID和問題本身。
  2. 對於每個傳入活動(消息),請檢查發件人的服務URL和對話帳戶ID,並將其與您的狀態列表進行比較。如果您找到匹配項,請評估有關最新問題的信息(答案)。如果沒有匹配,則這是一個沒有以前狀態的頻道,因此您需要創建一個並詢問第一個問題。

Azure Table storage是一個方便的服務來存儲狀態英寸當然,您可以使用任何你喜歡的服務。請記住,內存狀態存儲只能用於測試。

此外,您根本不一定必須使用對話框來完成此任務 - 您可以在MessagesController中完成所有需要的操作。