如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

阿里云云棲社群發表於2018-12-19

本文由淘寶前端工程師羅嗣分享,主要講述了作者在星巴克訊息開放專案中的總結和思考,希望對大家有幫助,讓業務分享更加有價值。

摘要

從滿足星巴克專案需求單點出發,發散到從點到面的思考。從而總結了自己思考的基本流程(方法論)。從如下四個遞進方面思考。

  • 業務擴充:擴充自有業務的邊界,和其他業務合作共建,形成標準的能力透出, 合力共建
  • 業務趨勢:業務的特點和趨勢是如何。技術可以如何儲備來應對未來業務的變化
  • 技術趨勢:技術命題,技術趨勢。選擇適合的技術來解決現在的問題。保持技術對未來的彈性
  • 需求問題:客觀存在的事實,現在需求存在哪些問題,我們如何去幫助業務更加穩定,更加高效
如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

本文提綱

筆者從0到1構建一個IM前端系統,再從點到面思考整合突破原有的自有業務限制,儘量設計出的可擴充套件,可互動,甚至小而美的系統能力。本文會從如下幾個方面去介紹。

  • 點:專案背景及需求難點(支付寶星巴克小程式入駐客服接待),以及現有的能力。
  • 面:需求做完反向思考,當前BC/CC遇到的問題及痛點,如何在同一個領域模型下做推動標準化能力。
如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

需求介紹

專案背景

客服接待能力由手淘訊息平臺和CCO團隊合作共建,整體採用AMP+XSPACE的方案落地,AMP承接C端使用者聊天介面,XSPACE承接B端聊天介面,同時接待又需要原有BC的聊天能力。星巴克客服接待兩縱一橫,底部需要對接不同的服務端,上層需要保證同一套UI來提升一致性體驗。

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

設計思路

總體設計思想:設計分離出資料層和UI層,資料層和UI層以標準化協議對接。這樣分層就可以解決當前業務遇到的問題,如下是當時需求的標準SDK事例

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

點到面的思考

星巴克客服訊息接待開放是一種輕量級(H5形式)的客服接入能力。思考當前業務的問題是什麼,如何改進,業務價值的意義等。 筆者會從如下幾個方面去思考。

  1. 原有H5旺旺由於歷史原因有穩定性和體驗的問題,這套方案能不能提供替換成原來的H5旺旺,同時對聊天接入統一收口(標準化元件)。從而達到更加穩定,更加的體驗性。

  2. H5旺旺聊天可以投放到阿里系的其他端上(優酷,餓了嘛,拍賣等),甚至現在很多外投的廣告業務。把H5聊天能力做強對淘寶的引流及成交都有很大的意義。

  3. 同時集團裡面還有小蜜作為客服聊天能力。能不能站在前端的角度思考整合輸出。

  4. 針對集團二方業務。需要定製個性化訊息和UI能力,需要把SDK能力提供給他們去進行上層業務擴充套件,

    1. 為保證他們低成本的接入需要提供基礎能力,二方去擴充套件外掛。
    2. 同時工具鏈路上需要保證提高效率。生成閉環的開發環境,接入業務方只要關係自己的業務需求

思考模型

基於之前的背景和訴求,整體設計思路: 抽離UI層和資料層(模組),UI層和資料層基於Message實體進行標準化協議對接(橋樑)。工具鏈路垂直支援提高效能。 有如下幾個方面銜接點:

  1. 開放 UI元件標準化SDK能力,讓二方業務快速搭建,UI層資料層之間用 標準化協議做橋樑連線
  2. 在基礎SDK上,會透出Context上下文(內部核心物件messagesessionapp)讓業務去定製修改,業務方只需要去擴充套件外掛。
  3. 基於DEF腳手架體系提供相應工具鏈路支援,包括專案模板生成,專案測試,專案構建,完善可持續整合。

業務價值

在阿里做每件事情,需要明確這件事情的價值,這件事情投入產出比是多少。上文也陸續在提價值。 如圖可以說明這件事價值

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

實踐方案

上面幾章介紹了專案背景,設計思路,思考模型和業務價值(PS:類似於論文前兩章在介紹背景和理論知識)。這章主要是講的專案實踐。站在前端的角度,從四個方面去實踐,並付相應程式碼地址。

  • 標準化協議: 由於訊息領域模型是一致的,可以抽象出標準的 會話訊息 格式。他是SDK和元件能力的橋樑
  • SDK能力開放:提供標準化資料對接的能力,負責外掛擴充套件能力。 業務入駐只需要開發業務相應的中介軟體(外掛)。例如:各自業務的編解碼模組,登入模組,訊息處理模組
  • 元件能力開放:提供標準化的聊天能力元件。例如聊天入口接入標準化元件
  • 工具鏈路支撐:基於DEF腳手架體系,開發了def-kit-tbms套件。支撐專案全鏈路開發

領域模型(標準化協議)

為了達到訊息標準化能力,需要把基本概念和介面達成一致。梳理兩個基礎概念: 會話訊息

  • 會話conversation: 它是指AB通訊之間維持的一種關係,它是訊息儲存的載體
  • 訊息message: 訊息是一個對話的基本組成部分, 根據業務分為兩大塊訊息,會話內訊息和系統通知訊息。會話內訊息又可以分為基本訊息和自定義訊息。

會話型別

即時通訊 SDK 的核心概念「會話」,即 Conversation。我們將單聊和群聊(包括聊天室)的訊息傳送和接收都依託於 Conversation 這個統一的概念進行操作。

會話屬性備註
id會話ID
scene場景
to聊天物件,賬號或者群ID
updateTime會話更新時間
unread未讀數
lastMsg此會話的最後一條訊息
custom擴充套件Json字串

訊息型別

IM SDK內的訊息可以分為兩類:會話內訊息和系統通知訊息。會話內訊息只能出現並展示在聊天介面裡,一般是應用內的一個使用者發給另一個使用者(或群組/聊天室)的訊息,例如文字訊息、圖片訊息都屬於會話內訊息。:

會話內訊息型別備註
文字訊息訊息內容為普通文字
圖片訊息訊息內容為圖片URL地址、尺寸、圖片大小等資訊
語音訊息訊息內容為語音URL地址、時長、大小、格式等資訊
視訊訊息訊息內容為視訊檔案的URL地址、時長、大小、格式等資訊
檔案訊息訊息內容為檔案的URL地址、大小、格式等資訊,格式不限
地理位置訊息訊息內容為地理位置標題、經度、緯度資訊
通知訊息自定義訊息可以用於訊息接入擴充套件。 例如卡片訊息,紅包訊息等。
自定義訊息**通知訊息屬於會話內的一種訊息,用於會話內通知和提示場景。
例如:群名稱更新、某某某退出了群聊等。**

會話和訊息標準化格式

SDK能力開放

SDK的設計參考了Koajs的設計原理(底層微創新了下)。Koajs的中介軟體思路: 中介軟體對於一次請求來處理,context分別整合了request和response物件, 同理可以對映成對一條收發訊息的處理,面向切面的程式設計方式。。 在context中會整合message(訊息),session(會話),app(如使用者,初始化sdk資訊等其他資訊)
整個專案通過lerna進行了包管理,用Typescript寫了SDK,並做了充分的單元測試,大家可以放心使用。整個專案分為了如下幾個模組:

  • @ali/tbms-compose: 函式組合模組,用於@ali/tbms-middlware服務
  • @ali/tbms-middleware: 中介軟體模組
  • @ali/tbms-util: 通用函式分裝:如promise同步執行佇列,mtop請求,event事件系統
  • @ali/tbms-sdk: 訊息標準化基礎SDK,可以讓業務擴充套件,補充外掛
如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

測試說明:

對底層支援的SDK都做了充分的單元測試,保證穩定性。後續版本更新提供差異性修改的檢查

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

使用事例

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

元件能力開放

由於需要多端投放,某些二方應用支援weex能力。從而選擇了RAX技術方案。再在H5表現下對單聊做效能優化,現階段完成聊天入口的統一接入元件,上層的元件在陸續完善中(完成度20%)。@ali/rax-tbms-chatwatertbms-components

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

工具鏈路支撐

基於DEF腳手架體系,開發了def-kit-tbms套件。提供專案全鏈路開發支撐。這個專案後續的專案搭建都採用standard-dev腳手架生成專案目錄。例如:tbms-toolkittbms-packages

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

總結

這是一次完整的一個專案從0到1,從點到面的思考過程,建立模型到付諸於實踐。從完成業務需求(需求做什麼)到幫助業務成長(我能做什麼)的思考過程。雖然只是站在前端角度在思考問題,但是方法論相信可以通用。

如何去設計前端框架能力?星巴克訊息開放專案從0到1,從點到面的思考

後續Action

改善原來的H5旺旺,使之更加穩定和更好的體驗性。同時對聊天接入統一收口(標準化元件和標準化接入SDK)。Flag:利用業餘時間,一月中旬前第一版本里程碑釋出

未完待續

有什麼IM相關的需求都可以聯絡我@羅嗣,共建標準化和生態。



本文作者:羅嗣

閱讀原文

本文為雲棲社群原創內容,未經允許不得轉載。


相關文章