Skip to main content

防疫口罩大作戰

前情提要

因 武漢肺炎疫情、口罩實名制 等重大事件,當衛福部將口罩庫存數量以 open data  的方式開放後,掀起了一場口罩黑客松的熱潮,口‍罩供‍需資‍訊平‍台 中可以看到,許多貢獻者在數個小時後製作出各式各樣的應用,在這些貢獻者的努力下,透過科技與 open data 彌平了資訊落差。

健保特約機構口罩剩餘數量明細清單

透過 GOSU BAR 擁抱 open data 製作出你的口罩庫存查詢聊天機器人

短時間的設定,你也可以做出自己的聊天機器人,話不多說,先來看看成果吧!

 

製作教學

製作完成的流程如上圖,首先我們先建立兩個起始點,分別是收到文字、加入好友。

設定一個決策點,區分引導類型的文字:

當觸發引導文字或成為好友時,提供使用者引導對話:

           

 

當使用者輸入其他資訊時,要到 opendata 中 健保特約機構口罩剩餘數量明細清單 抓取最新資料並篩選後提供卡片

首先使用 執行API 節點抓取 CSV 資料, URL: https://data.nhi.gov.tw/resource/mask/maskdata.csv,型態: CSV

為了使用者體驗,當 open data 在維修、更新等情況資料無法讀取時,我們要給我使用者文字訊息回饋:

當讀取成功時,我們要透過 執行程式碼節點 完成資料整理以及篩選:

// 複製專區


let content = (record.content || "").trim();

tmp.data = tmp.data.slice(1).map(row => {
    return {
      code: row[0],
      name: row[1],
      address: row[2],
      phone: row[3],
      adultMaskCount: row[4],
      childMaskCount: row[5],
      updatedAt: row[6]
    }
}).filter(d => {
    return d.name.includes(content)|| d.address.includes(content)
}).sort((a, b) => {
    return parseInt(b.adultMaskCount)- parseInt(a.adultMaskCount);
}).slice(0, 10);

tmp.i = -1;

 

當資料整理篩選完畢後,我們接下來就要透過流程迴圈方式:

先透過 執行程式碼 來做迴圈的前處理:

// 複製專區


tmp.i ++;

tmp.card = tmp.data[tmp.i];


接著透過決策點控制迴圈:

當找不到相關的資訊:

產生卡片方式

// 複製專區


// 標題
${tmp.card.name}

// 內容
口罩數量狀況:
成人 ${tmp.card.adultMaskCount} 個\t 兒童 ${tmp.card.childMaskCount} 個
地址: ${tmp.card.address}
資料更新: ${tmp.card.updatedAt}

// 按鈕 1 - 連結 - 致電詢問
tel://${tmp.card.phone}

// 按鈕 2 - 連結 - Google Map
https://www.google.com.tw/maps/place/${tmp.card.address}

// 按鈕 3 - 說話 - 更新資訊
${tmp.card.name}


 

完成流程之後就可以擁有一個自己的口罩庫存查詢聊天機器人了!