很多朋友問我如何開發一個成功的Teams Bot,他們說Bot Framework SDK看起來簡單,但是真要的去開發一款成熟的bot,很多地方還是不知道如何使用。我從最早的bot framework還在beta的時候開始用,后來framework經歷了多次大的改動,目前版本是v4,我想通過一系列的文章來系統的介紹如何使用bot framework來開發一個功能齊全的teams bot。
這篇文章我先給大家一個總體的介紹,讓大家理解Teams,Azure Bot Service,Bot Framework,和我們自己的bot代碼是什么關系。
在過去的一二十年的互聯網和移動互聯網的發展,產生了很多的聊天工具,skype,teams,slack等等,這些聊天工具在聊天方面有一些共同模式。比如一個用戶可以參與到多個對話中,每個對話由一系列的消息組成。用戶和用戶可以一對一聊天,也可以多個用戶一起群聊。所以微軟看到了一個機會:可以抽象出一個模型,如果基于這個通用的模型進行開發bot,那這個bot就可以同時適用于所有的聊天工具。
?
Azure Bot Service就是鏈接各種聊天服務的一個服務,它把在不同平臺上抽象出一個統一的模型,并且把這個統一模型傳遞到后端的開發人員開發的bot服務,當bot服務需要發送一個消息或者事件的時候,把這個信息再傳遞給不同的聊天服務。
明白了Azure Bot Service后,我們來看一下Bot Framework SDK,剛才我們說了Azure Bot Service把各種聊天服務的統一模型傳遞到大家開發的bot服務,雖然我們可以完全自己去處理這種統一模型,但是事實證明,這個處理會非常的繁瑣,這個時候我們就需要使用Bot Framework SDK。這個SDK把這個統一模型進一步處理,抽象出了turn等概念,并且做了一整套處理bot的framework(adapter, middleware, state等等)。目標是把整個bot服務可以標準化,流程化。我之后的文章將針對整個bot framework進行詳細的講解。
理解了上面這兩個概念后,我們來看一下Teams,Teams app實際上包含很多方面,bot只是teams app里面的一種,或者說是一個teams app能提供的眾多能力中的一種,當然也是最重要的一種能力。teams app出了這種,還可以是一個tab應用,connector等等。
希望上面的說明能夠給大家提供一個teams和azure bot service的大局觀。我后繼文章會慢慢具體解釋所有的細節。我去年自己開發的teams app:LuckyDraw,實際上并沒有使用全套的bot framework,只是用了一些activity的模型,在實際開發中完全自己來處里各種復雜的具體細節,比較繁瑣,導致后期增加功能的時候維護成本增大。我今年的目標是全面使用bot framework出一版的新LuckyDraw。
最后我想說一下我自己對于Azure Bot Service的看法,雖然Azure Bot service的初衷是統一各類聊天平臺,讓開發人員可以一次開發,就把bot用于所有平臺。這個有點像當年.net的初衷(一套代碼,支持各種操作系統),但是.net可是走了多少年才走到這一步。bot service雖然不會像.net這么復雜龐大,但是各個聊天平臺的差異性不是這么容易統一的。可以看一下?這篇文檔,大家就能知道有多少差異性了,為了把這些差異性盡量統一并同時支持平臺特有的一些功能,實際上bot framework已經變得有點臃腫了。
Bot framework路還很長,而且bot的功能發展也很快,希望它能一步步走踏實。