kb2022 微信小程序設計草稿

此文是对 kb2022 系统里微信小程序包含的用户功能的设计草稿。

微信小程序是面向大部分普通使用者的最終軟件,它包含了一般用戶最常用的功能集合,對於設計應該做到儘量簡化用戶使用以及美觀,而將一些複雜的系統管理功能捨棄以使用普通用戶能夠快速上手而無需要額外學習。

按照功能的不同可以將其分別歸爲如下內容:

發佈任務

發佈任務是系統最核心的功能,簡單來說就是系統需要按照用戶的意願在指定的時間讓指定的受控設備來播放指定的音頻內容。

所有任務都包含一些通用的核心參數,前端可以將這部分進行模塊化以便重用,這些參數是:

此外依據任務的不同創建方式將任務可以進行分類爲

微信小程序應該爲它們準備單獨的功能頁面

目標

目標指的是要執行此任務的設備,它是一個數組,數組的每個元素是一個邏輯碼,把你想要控制的設備邏輯碼添加到這個數組就可以控制它們,此外目標數組也可以接受區域的邏輯代碼這樣掛接在此區域下的所有設備都將受到控制

優先級

任務的目標可能會重疊(比如有多個任務目標都設置爲了成都),此時任務將依據優先級決定是否執行或被創建,優先級是一個 int32 的數字,這個數字越大則優先權越高。優先級通常用來表示任務的緊急情況,比如一個很小的數字 1 代表一些日常宣傳內容,當發生火災地震之類緊急情況就可以使用一個數字較大的比如 1000 來創建任務,這樣這個火災的任務就會覆蓋掉宣傳任務被執行。

優先級的可選值是記錄在數據庫中並且可供用戶修改的(但微信不需要提供修改功能),所以微信小程序應該訪問 TaskPriority 接口來創建一個選單讓用戶選擇任務的優先級。

TaskPriority 接口會返回一個優先級數組,數組中每個元素將包含 id,name,describe 三個屬性,id 屬性就是優先級它越大任務優先權越高,創建任務時需要將這個 id 設置到任務接口傳遞給服務器。name 是一個供人類查看的名稱,通常應該作爲 ui 選單顯示給用戶的選項文本。describe 是對這個優先級的文本描述通常可以作爲 ui 選單的可選 tooltip。

此外前端程序應該在登入獲取到用戶 session 信息後,記錄下用戶的優先權,用戶只能選擇一個比自己擁有的優先權數字小或相等的優先級來創建和發佈任務。(雖然服務器會在越權後返回錯誤,但一開始就爲沒有權限的用戶禁用選項可能會提供更好的用戶體驗)

等級

如果任務目標重疊了,並且優先級相等,系統此時會依據任務等級來確定任務的創建與執行,它和優先級一模一樣,只是 ui 需要通過訪問 Level 接口來獲取可選的值。

在優先級之後加入的等級其含義主要用來表示行政區域,比如較小的數字 1 表示一個鄉村,較大的數字 4000 表示一個市,這樣平時市可以安心的發送一些低優先級的任務這些任務會比鄉村的低優先任務更優先執行,但是當鄉村發生火災之類的突發緊急情況時,鄉村可以發送自己高優先級的任務來應對突發情況,這些鄉村的高優先級任務因爲優先級選項更高所以不會再與市任務比較等級從而可以正常的執行突發的緊急任務。

通常行政區域越高即任務等級越高,任務優先級儘量選用較小的值,因爲越高的行政區域對處理突發情況越遲鈍,選用較小的優先級值,可以讓更接近突發事件的較低行政區域能夠使用高優先級任務來處理突發事件。

文字轉語音

這個功能是用戶輸入一段文字傳遞給服務器,服務器自動調用 baidu 文字轉語音接口將其轉爲語音,然後立刻讓目標設備播放這段語音,接口在此

這個接口可選參數有點多,主要包含了文字轉語音的細節,比如發出聲音的人聲,發音大小,說話語速等,前端程序應該將用戶最後設置的參數保存起來下次打開功能時自動填充爲最後一次使用的參數,因爲同個用戶往往使用的這些參數細節都是不會變的,但不同用戶可能會使用不同的轉換參數。

點播

點播和文字轉語音類似,但它是從已上傳到服務器且被審覈的資源中選擇一部分語音資源來播放,前端可以使用服務器的 Find 接口來查詢已可用的資源。點播接口在此

選擇的資源應該將資源 id 放置到數組中傳遞給服務器,id的順序決定了多個資源的播放順序,如果想要讓同個資源播放多次,則在數組中將它的id設置多次即可,服務器只是簡單的遍歷數組然後使用其id指定的資源來推送直播流。

注意因爲資源可能在任務發佈後被刪除或禁用,遇到這種情況服務器會爲用戶向消息系統發送一條通知並跳過對這個資源的播放。

檔案直播

檔案直播與文字轉語音類似,但它要播放的內容來自用戶手機,用戶將手機上的音頻檔案傳遞給服務器,服務器使用它進行播放。接口在此

錄音廣播

對服務器來說錄音廣播和檔案直播沒有任何區別,並且前端調用的服務器接口也是一樣的,只是錄音廣播使用微信提供的錄音功能,錄製一個 mp3 檔案,將它傳遞給檔案直播接口進行播放即可。

即時直播

微信目前適合沒有提供即時錄音功能,故這個接口暫時可以不用實現,或者有可行的解決方案也可以提出探討。接口在此

對於手機原生 app 來說應該實現這個功能。

它使用錄音功能,從設備麥克風獲取到即時的音頻流,並且將音頻流編碼爲 mp3 幀流,然後將 mp3 幀流推送給服務器,服務器則將 mp3 幀流轉發給目標設備進行直播。

前端通常應該先保存一段緩存再開始推流並一口氣將緩存的數據全部發送給服務器此後不再使用緩存,比如先存儲2秒的數據流再開始推流到服務器,這樣可以避免一些網路抖動引起的播放卡盾,當然這也意味着聲音將延後至少2秒才播出。

流程任務

流程任務和點播很類似,只是它需要指定一個任務執行的時間,然後需要被審覈,這樣到了指定的時間被審覈通過的任務就會自動執行。

  1. 流程任務首先需要調用 Create 接口創建一個任務草稿
  2. 草稿可以被 重新打開修改刪除
  3. 編寫完草稿後,需要將草稿提交給系統,這樣審覈人員就可以對其進行審覈
  4. 如果審覈通過,則任務到指定時間就會自動執行。如果審覈被拒絕,審覈人員會將其設置爲 Reject 並帶上拒絕原因

前端可以爲用戶調用 ListReject 接口來查詢被拒絕的任務,之後用戶修改完任務後可以重新提交或者放棄直接刪除任務

查詢任務

各種任務通常都提供來一個 Find 接口,用戶可能會想查看一下自己之前發佈的任務,前端可以調用對應的 Find 接口來查詢任務供用戶查看。

需要注意的是,文字轉語言和檔案直播對系統來說是一致的所以它們的數據是在一起都通過 GetFilesFindFiles 查詢,並且因爲它們對服務器來說是同樣的數據故服務器也無法區分它們。

統計數據

一些用戶可能想看到一段時間內系統的任務統計情況,或者自己發佈的任務統計數據,這可以通過 statistics 模塊提供的功能來完成。

statistics 模塊的接口分爲兩類,一種是統計當前情況,比如 Connected 返回當前有多少受控設備連接到服務器,Priority 接口返回當前在不同優先級下正在執行的任務分別有多少,Level 接口返回當前在不同等級下正在執行的任務分別有多少。前端可以將這部分數據製作成爲一組圖表放置在單獨頁面或區塊中。

statistics 模塊另外一種接口是統計歷史情況,它們都接收一個時間段來指示要統計的時間段落,對於這種接口,前端應該多次調用以獲取到不同時間段的統計情況並將它們製作成爲圖表,比如分別創建 今天,七天內,一個月內的統計圖表。SchedulerPriority/SchedulerLevelPriority/Level 類似只是現在是統計一段時間內而非當前數據。SchedulerSource 接口統計不同來源的任務分別有多少,比如有 3個任務是點播,20個任務是流程任務,8個任務是即時廣播。

此外除了 Connected 接口外其它接口也支持一個目標,它和任務目標概念是一致的,比如可以使用它來統計成都市的數據而非統計整個系統的數據。所以前端應該使用這個參數來爲用戶再創建一份自己管理區域的統計情況。

查驗通知

這個模塊相對簡單,當系統有通知消息給用戶時會將消息發送到消息模塊。前端應該製作一個頁面來查詢這些消息,以便把消息顯示給用戶查看。此外前端應該使用 websocket 監聽是否有新消息產生。

用戶查看過的消息可以調用 Readed 將它設置爲已讀,對於很久以前的消息前端可以幫助用戶調用 Delete 接口來徹底刪除這條消息。

設備管控

設備管控主要包含兩方面功能:

  • 查詢設備
  • 控制設備

查詢設備主要是通過調用 emulator 模塊的 Find,或者 device 模塊的 Find 來查詢,device 模塊主要用於選取設備,裏面包含的設備信息較少,emulator 模塊返回的數據則包含來更多的設備運行情況比如當前是否正在執行任務,正在執行哪個任務,什麼時間連接到服務器等信息。但是 emulator.Find 沒有包含設備座標信息,因爲目前的座標信息不是由設備返回而是通過 device 模塊設置的所以座標消息要使用 device.Find 來獲取,或者可以使用更簡單的 device.ID 來獲取。

通常用戶比較關心的是設備是否正常工作,如果設備正常工作,emulator.Find 和 device.Find 都會顯示設備已經連接,你可以根據自己喜好選擇調用哪個函數。

查詢到設備後,你就可以通過 Add 接口來發送一條控制指令給設備,控制指令的具體參數是硬件相關的,服務器只是將其轉發給設備,但系統定義了一些通用的標準指令

指令只是轉發給受控設備,受控設備如何執行完全看設備實現,但是設備會把處理過程和結果返回給服務器,前端可以通過調用 Find 來查詢指令執行情況,微信小程序通常應該在 Find 中設置 uid 參數來讓用戶只查詢到自己發送的指令。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注