LINE LIFF 1922簡訊實聯制掃碼發送簡訊HOW TO

在疾管家的簡訊實聯制中,主要看到是透過LIFF功能,去掃QR CODE後,然後發送簡訊。所以技術有
1 LINE LIFF 功能
2 掃條碼功能(透過HTML5-QRCODE) 注意:網站要https才能有權限開啟鏡頭
3 SMS

以下稍微實作一下,如何像疾管家一樣自動直接開啟後鏡頭

然後在掃描確認到開頭是SMSTO:1922後,透過SMS協定自動調到簡訊畫面

不過android/ios的簡訊中串body不同(ios是& android是 ? )

這樣就可以實現出像唐鳳政委與幕後功臣們所做出的功能了!

<html>
<head>
    <meta charset="utf-8">
    <title>壽山掃條碼測試</title>
</head>
<body>
    <!-- 條碼顯示的內容顯示在 qr-reader-results -->
    <div id="qr-reader-results"><h1 id="qrtext"></h1></div>
	<!-- 掃描用 -->
    <div id="qr-reader" style="width:100%"></div>    
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5-qrcode/2.0.3/html5-qrcode.min.js"></script>
<script>
    <!-- 呼叫 html5qrcode 代入qr-reader -->
	const html5QrCode = new Html5Qrcode("qr-reader");
	const qrCodeSuccessCallback = (decodedText, decodedResult) => {
          /* 處理成功掃描 */  
		  document.getElementById("qrtext").innerHTML = decodedText;
	      if (decodedText.toUpperCase().startsWith("SMSTO:1922:")) {
              var t = decodedText.split(":", 3),
              r= t[1],
              a= t[2],
		      o = "sms:" + r + "&body=" + a; // to-do 如果是android 要將&改為?
			  window.location.href = o;
		  }
          html5QrCode.clear();
     };
     const config = { fps: 10, qrbox: 800 };
	// 直接開啟後面鏡頭
	<!-- 開啟前置鏡頭 -->
	<!-- html5QrCode.start({ facingMode: "user" }, config, qrCodeSuccessCallback); -->
	html5QrCode.start({ 
	  facingMode: "environment" }, 
	  config, qrCodeSuccessCallback);
</script>
</head>
</html>

初探 ASP.net Core 打造 LINE BOT

程式下載: https://drive.google.com/file/d/1rmz910QWqQxLa8XOMWrFG1fjSTPoTLFd/view?usp=sharing
本篇學會
– LOG的撰寫以及追蹤
– ngrok 讓本機可以debug webhook
– JSON 的基本運用
– LINE BOT初步瞭解(回應訊息)


準備篇

– Visual Studio 

– ngrok(localhost 對應到https public domain的服務)

下載連結:
https://ngrok.com/download

– LINE Developers 帳號(免費)

https://developers.line.biz/en/ “https://developers.line.biz/en/

開發步驟

–  新增asp.net Core web應用程式後按下一步


–  設定專案名稱LINEBOT,建立



–  選擇.NET Core → ASP.NET Core 3.1 →API→建立



–  首先安裝 *serilog.extensions.logging*



–  在Startup.cs加上  ILoggerFactory ,並設定檔名



–  在預設的WeatherForecastController.cs試著加上LOG



–  開啟程式後,到logs目錄下確定LOG正常



–  新增API控制器


–  修改route為 api/linebot ,程式如下

           // 記得using Microsoft.Extensions.Logging;
        readonly ILogger<LINEBOTController> _log;

        public LINEBOTController(ILogger<LINEBOTController> log)
        {
            _log = log;
        }
        [HttpPost]
        public async Task<IActionResult> Post(dynamic request
        {
            string x = Convert.ToString(request);
            _log.LogInformation(x);             
            return Ok(request);
        }



– 執行程式後,打開IIS Express,確認PORT號



– 打開命令提示字元,切換到ngrok目錄下



– 執行命令(記得Port號改成自己對應)
`!ngrok http 33766 -host-header=”localhost:33766″`



– 執行後,會取到一個https開頭網址,記下來後(不要關閉視窗)



– 進到LINE Developer網址,新增Provi![]



– 新增一個 Messaging API的Channel



– 設定名稱與描述、目錄、子目錄後勾選允許相關條款後按Create



– 最後同意使用資訊



– 建立完成後進到MessagingAPI頁籤



– 修改以下內容



– 允許加入群組或多人聊天室



– 停用加入好友訊息以及自動回應訊息,啟用webhook功能





– 加webhook URL輸入



– 輸入確定後按Verify

– 出現 307 Temporary Redirect



– Startup.cs中的 app.UseHttpsRedirection() 註解,重新開啟程式



– 重新驗證後成功!



– 從LOG看到LINE傳來的驗證訊息



## 回聲蟲

– 從開發者網站中的Messaging API得知如何做[回應reply](https://developers.line.biz/en/docs/messaging-api/sending-messages/#reply-messages)



– 安裝 NewtonSoft.Json



– 到LINE DEVELOPER中取得TOKEN複製



– 加上程式如下

    public class LineReceivedMessage
    {
        public List<Event> events;
        public LineReceivedMessage()
        {
          events = new List<Event>();
        }
    }
    public class Event
    {
            public string type { get; set; }
           public Source source { get; set; }
         public EventMessage message { get; set; }
         public string replyToken { get; set; }
         public Event()
         {
           source = new Source();
           message = new EventMessage();
         }
    }
    public class Source
    {
         public string userId { get; set; }
    }
    public class EventMessage
    {
        public string id { get; set; }
        public string type { get; set; }
        public string text { get; set; }
    }


– 修改POST函數如下

        public async Task<IActionResult> Post(dynamic request)
        {
            string x = Convert.ToString(request);
            _log.LogInformation(x);               
            var channelAccessToken = “你的TOKEN”;
            var receivedMessage = JsonConvert.DeserializeObject<LineReceivedMessage>(x); // 收到訊息解成物件
            string userid = receivedMessage.events[0].source.userId;  // 取得使用者ID
            string message = receivedMessage.events[0].message.text;  // 取得文字訊息
            var replyToken = receivedMessage.events[0].replyToken;  // 取得回應TOKEN
            var replyMessage = new
            {
                replyToken = replyToken,
                messages = new object[] { new {
                    type = “text”,
                    text = message
                }
                }
            };
            string s = JsonConvert.SerializeObject(replyMessage);  // 轉為JSON字串
            byte[] bytes = Encoding.UTF8.GetBytes(s);
            WebClient webClient = new WebClient();
            webClient.Headers.Clear();
            webClient.Headers.Add(“Content-Type”, “application/json”);
            webClient.Headers.Add(“Authorization”, “Bearer ” + channelAccessToken);
            webClient.UploadData(“https://api.line.me/v2/bot/message/reply”, bytes);
            return Ok(request);
        }


– 結果



##參考資料:

LINE DEVELOPER API文件

[https://developers.line.biz/zh-hant/docs/messaging-api/](https://developers.line.biz/zh-hant/docs/messaging-api/ “https://developers.line.biz/zh-hant/docs/messaging-api/”)

Wowstick Mini 家用電動萬用螺絲筆

因為物聯網夯了好幾年,這幾年也喜歡玩一些電子零組件,但因為轉螺絲是一件很厭世的事情,剛好同事在網路上看到最近在募資的Wowstick Mini 家用電動萬用螺絲筆 ,就跟著敗一組下來用了。

打開盒裝後,映入眼廉是排放整齊的一堆盒子。


Wowstick Mini 內裝盒1

由上而下依序是

1 收納盒

2 X1~X3 管裝批頭收納盒 4*28mm國際標準批頭(起子頭)

3 萬用螺絲筆主體

4 Tool Box 裡面有一個迷你的起子頭收納短盒以及一個USB Type-C的充電線

5 Base 為底座

6 盒子最底部還有一個 Screw PAD 磁吸板

Wowstick Mini 內裝盒2

我們一一拆開後呈現如下

首先看萬用電動螺絲筆本身,底部有USB Type-C的充電孔,接上後充電會亮紅燈,充飽著亮綠燈。

拿掉上蓋後,可以接上需要的起子頭,即可以使用

筒形的起子頭收納筒,需要使用時,拉出來就行了

上面的按鈕有正轉以及反轉,按下後還有三顆LED燈會亮。

萬用電動螺絲筆不用時,放在底座上,一整個很有設計感

C# WebAPI呼叫方式


var client = new WebClient();
var method = "POST";
var parameters = new NameValueCollection
{
{ "NAME", "林壽山" },
};
var response_data = client.UploadValues("$$API網址$$", method, parameters);
var responseString = UnicodeEncoding.UTF8.GetString(response_data);

如果回傳是JSON

dynamic json = JToken.Parse(responseString) as dynamic;

微軟Microsoft人工智慧AI運用範疇影片

http://superlevin.tw/%E5%BE%AE%E8%BB%9Fmicrosoft%E4%BA%BA%E5%B7%A5%E6%99%BA%E6%85%A7ai%E9%81%8B%E7%94%A8%E7%AF%84%E7%96%87%E5%BD%B1%E7%89%87/

 

eat River 醫療中心運用 Microsoft 的技術和裝置打造自動化的端對端藥物管理系統,大幅降低病患的等待時間、輸入資料的錯誤機率、藥物成本,讓病患更迅速地復原。

天全球有超過450億公升的水,因為水管漏水或破裂而流失,這相當2億人的每日用水。Grundfos 的智慧泵浦,透過Azure IoT 收集來自智慧感測器的據數,並利用Cortana Intelligence 的大數據分析,即時預測應對漏水問題,再搭配氣候數據,預估暴雨的發生地,提早策略性儲水。Grundfos 智慧泵浦在永續的水資源中扮演關鍵角色。

參考: https://gallery.azure.ai/experiments

平均每秒銷售一台印表機,每年銷售超過 5,000 萬台 PC,HP 每年需接觸超過 6 億個客戶,同為科技公司的 HP 很快地就發現,微軟的人工智慧可以協助他們處理客戶爆炸性的需求,AI 讓客戶解決問題的比例從 20-30%,提升至 70-80%,而後台儀表板更能提供關鍵指標,協助持續優化客服成果!

Microsoft Azure AI 技術 – 認知服務介紹 : https://azure.microsoft.com/zh-tw/services/cognitive-services/
不只看得懂數據,人工智慧也會分析影像!不論是城市中的監視器或是人手一支的行動電話,每天都有數量驚人的影像產生。而 Prism Skylabs 看準了藏在攝影鏡頭中的資訊,透過微軟認知服務的計算機視覺 API,幫助組織機構搜索閉路電視和安防攝像頭所拍攝的內容,讓企業一手掌握特定的事件、物品和人員!

Uber 正在使用 Microsoft Cognitive Services 提供即時身分識別確認。Uber 司機必須自拍自己的照片,並通過身分驗證才能載客。

有能力服務客戶的人,才能留下客戶,於是梅西百貨決心用人工智慧來擴增服務能量,消費者可以透過任何管道向梅西詢問,客服機器人會人性化的回答問題,帶領消費者找到答案,不必再翻找 FAQ,即使真人客服員,也可以藉由客服機器人的協助,快速上線工作,減少訓練的成本,在影片中您可以看到這是個有溫度的服務,它不僅滑潤了客戶關係,也為企業帶來更多的利潤!


日本電信大廠軟體銀行 (SoftBank) 的人形機器人 「Pepper」與微軟的雲端平台「Azure」利用線上大數據分析追蹤銷售品項,協助零售商更靈活調節庫存管理,同時記錄顧客的特性與需求,並搭載情感認知,客製化推薦顧客所需,創造零售購物新體驗。另外,Pepper 同時具備翻譯功能,可以服務更多來自不同地區旅客。

Great River 醫療中心運用 Microsoft 的技術和裝置打造自動化的端對端藥物管理系統,大幅降低病患的等待時間、輸入資料的錯誤機率、藥物成本,讓病患更迅速地復原。

全球有超過450億公升的水,因為水管漏水或破裂而流失,這相當2億人的每日用水。Grundfos 的智慧泵浦,透過Azure IoT 收集來自智慧感測器的據數,並利用Cortana Intelligence 的大數據分析,即時預測應對漏水問題,再搭配氣候數據,預估暴雨的發生地,提早策略性儲水。Grundfos 智慧泵浦在永續的水資源中扮演關鍵角色。