簡單做:Telegram+Google Sheets收發報價Email

Updated:

近日恒指終於爬上了三萬點,看到IB的帳目終於因而步出了WIN BOND受到的重創,十分感動。

近日主要想買的有港股、新加坡(主力是REITS)和美股,網上好像也找不到一個平台可以很順暢的看這3個市場的價格。雖說IB APP也可以設定Watchlist和Alert,但就是用不慣。本來是想用之前設定的Google Sheets定時收發電郵作提示就好了,但研究一會兒發現了Telegram Bot+Google Sheets也可以完美配合做很多個人化。由於是用Google Sheets的關係,可以用它自身的condition formatting and formula,不太費力。

由於我不用太即市,所以報價用的只是簡單的Bloomberg取價,詳請可看全兄的文章
本來我也試過用Investment Moat介紹的Yahoo報價,但是發覺白天還未收市時不太穩定,不想勉強,還是繼續用Bloomberg了。(但其實測試時也發覺Bloomberg取價配上importxml也不太穩定,但能用就算了吧)

簡單來說,我的設計使用了:
1. 一張已制好的Google Sheets(作為Email報告的文本內容)
2. Telegram Bot(我的use case是使用bot來叫程式自動Send Email)
3. Google Sheets裡的Script Editor

我設定了如果向Telegram Bot發送消息,Google Sheet的web app就會自動用制好的報告,發送Email和回Msg到Bot裡。(由於Customize Msg比較費時,自用的我就沒做了,而Telegram能不能發送全HTML的Msg,所以不能用制好頁面直接發送,要再加工)

如果更進一步或更即市的話,應該要加force refresh和可以從報告找輸入了的Stock code再回送特定的價格。當然報告也可以簡單的在Script Editor裡設定Trigger的指定時間,若是如此的話就不用Telegram Bot來『叫醒』它來發送電郵了。

技術上來說,如下圖:


Telgram測試:測試時發覺大概也能兩分鐘內傳回電郵了~



Mail收成品:可以簡單用condition formatting來標出重點





制作步驟如下:

步驟0. 跟著這個Youtube感受一下如何簡單地做一個Bot,它的舊版連程式碼也有,可以直接copy跟著做。很方便。(由於是別人Youtube裡的教學,所以請去Copy吧)




步驟1. 開張Google Sheets,設計好一個Table,作為send email的文本(如圖1)
*註* 由於是用google sheet的關係,可以使用大量的condition formatting來做自己想要的標記(例如正負數或上升超過某百份比)

步驟2. 在Script Editor用youtube教的重覆一篇,加下個人設定,包括:
  • Botfather 裡開個新 Bot,抄下Token以放入GoogleSheet的Code裡
  • 開Web App
  • 改做成你想的設計
步驟3. 在Send Email方面,我使用了SheetConverter,指定了特定的Range來Send Email

a. 以下是我用來Send Email的Code
function sendemailalert(){
    var EmailRange = "A1:H10";    //電郵主體
    var TitleRange = "M1:N2"; //設定更新時間的範圍,方便電郵中參考
    var spreadsheet = SpreadsheetApp.openById([YOUR GOOGLE SHEET SSID]);
    var Subject = "[YOUR EMAIL TITLE]";
    var s = spreadsheet.getSheetByName([YOUR GOOGLE SHEET]);
    var bodyrange = s.getRange(EmailRange);
    var titlerange= s.getRange(TitleRange);
    var to = [YOUR EMAIL];
    var body = '';
    var htmlTable = SheetConverter.convertRange2html(bodyrange);
    var htmlTitle = SheetConverter.convertRange2html(titlerange);
    var body = htmlTable + "<br/>"+htmlTitle
   
    MailApp.sendEmail(to, Subject, body, {htmlBody: body});

};


b. 由於Importxml真的有時候有點廢,所以加了強制Refresh功能,可參考
https://stackoverflow.com/questions/33872967/periodically-refresh-importxml-spreadsheet-function

後話:
其實這個配搭真係有無限可能性~但如果是為報價的話,後台抓不到即市價始終是輸蝕了一點。但以免費和容易在Google Sheets上做些Summary,搭配這個方便了連Google Sheets也懶開的我吧~


其他參考網址:
https://stackoverflow.com/questions/36577984/use-mailapp-to-send-formatted-data-from-spreadsheet-in-htmlbody/36834398?noredirect=1#comment61241756_36834398
https://core.telegram.org/bots/api#message

Leave a comment