kkdai on master
upgrade to go 1.12.2 (compare)
kkdai on master
Add message quota (compare)
kkdai on master
update SDK (compare)
@kkdai
原來真的不是陣列啊!感謝解答,我大概會用了 XD
我後來測一段時間,還是想搞定捕捉用戶的其他類型訊息。
因為這樣才有機會可以應用得更廣。
但最後發現要捕捉用戶傳的 圖片、影片、聲音跟其他的比起來真的很難搞。
我到現在還是失敗中沒試成功 囧
我看了 官方 GO 的範例寫法 研究很久。
從 handleImage
、handleVideo
、handleAudio
往回追到 handleHeavyContent
跟 saveContent
。
覺得關鍵應該就是他們了,但就是仿不起來 囧
如果我沒有誤會的話,看他的寫法 感覺上,好像是要把用戶的多媒體訊息另外寫入成暫存檔存在伺服器( heroku?),才可以取得 URL。也就是說,這種設計有點不想讓人透過 SDK ,直接得到他們 LINE 伺服器現存的多媒體檔案 URL?
如我照他範例的方式可能要透過 IO 之類的操作去複製一份存在自己伺服器,才能使用。
沒辦法像 message.Text
直接可以拿現成的數據來運用。
可能因為我對 GO 語言的 IO 讀寫的寫法還不熟吧。
老是沒有成功。
試用了 GetMessageContent
感覺方向應該對,但最後又卡住了。
下面這些我是寫在確定會讓用戶發送圖片訊息的時觸發的區域 case *linebot.ImageMessage
。
content, err := bot.GetMessageContent(message.ID).Do()
if err != nil {
log.Print(err)
}
defer content.Content.Close()
//觀察用
log.Print("content.ContentType = " + content.ContentType)
log.Print("content.ContentLength = ")
log.Print(content.ContentLength) //檔案大小??
log.Print("content.Content = ")
log.Print(content.Content)
//感覺應該是要把 content.Content 存起來才可以?
之後因為逛到 這個 所以想說學他看看就加了下面這段 JPG
// 試了一下查到可以處理圖片的寫法(也可能寫錯?)
image, err := jpeg.Decode(content.Content)
if err != nil {
log.Print(err)
}
log.Printf("image %v", image.Bounds())
到這裡以為已經可以了???
結果出來的是我看不懂的東西XD
後來再繼續找資料寫寫看
還是都失敗(直接編譯器無法過關)
我是加寫失敗的是下面這樣
file, err := ioutil.TempFile("temp.jpg", "")
if err != nil {
log.Print(err)
}
defer file.Close()
_, err = ioutil.WriteFile("temp.jpg", []byte(image.Bounds()), 0600) //這種也失敗→ //io.Copy(file, content.Content)
if err != nil {
log.Print(err)
}
log.Printf("Saved %s", file.Name())
感覺要取用多媒體訊息好困難,卡在這好久 XD
我猜應該是 我在寫儲存檔案的地方犯了什麼大錯吧
才會連編譯器那關都 GG
編譯器好像是說型態不合
另外還找到這個 GAE/GoでLineBotをつくったよ〜 - ベーコンの裏
裡面提到
LineBotSDK で画像を受け取るときに、Message.OriginalContentURL からURL引っ張ってくるのではなくて
content, err := bot.GetMessageContent(message.ID).WithContext(c).Do()
好像是說要用 .GetMessageContent
才能取得圖片。
但我直接複製他的 Code 來用,編譯器會擋我然後說:c 找不到
我用肉眼研究一下,也看不懂他的 WithContext(c).Do()
裡面的 c
是什麼。
所以這種寫法又失敗了
我遇到了一個新問題,我查了很久 GO 語言相關資料都找不到解法。
所以又來打擾 @kkdai XD
我找不到如何 依照字元樹或字串長度,進行切割字串成字串陣列
的方法
是這樣的我後來應用 LINE BOT 去查詢某些網頁文件內文,但部分文章的回應很長總字數超過 2000 字。
所以 LINE 的 API 會出現 Error log 說無法發送超過 2000 字的內容。
因為這樣,我想說那就在送出前用 GO 想辦法分割字串就好了。
超過多少字會自動切割,然後把切割後的部分都送出去。(反正 LINE API 可以允許一次回五個訊息)
或只送出一個分割後的字串也可以,其他內容請使用者上網站看。
但沒想到這麼難實作XD
我查半天都只有 依照某個分割符號來進行字串分割 囧
不曉得各位前輩有沒有遇過這種問題,後來都怎麼解的 QQ?
@kkdai 感謝建議!
我最近收到 LINE 他們寄奇怪的信,請問有寫 LINE BOT 的大家都這樣嗎?
Your LINE developers account will expire soon.
In order to extend the expiration date, please click this link.
Your account for logging in to the LINE developers site expires 60 days after the last authentication.
所以,這是 LINE 要所有的開發者,每兩個月回報一次存活狀態的意思囉?
@johnnick
https://github.com/hanzochang/linebot-sample
@kkdai Evan 您好,請問可是我靜態ip設完之後還是收不到echo,都要再heroku logs印出ip(浮動?)之後再去加入白名單才能收到echo,請問你知道我哪裡錯了嗎
就我在Line Bot 開發者網頁中點擊callback url 測試我Server是可以收的到訊息的
這部分怎麼會有訊息?
問一下有在 Heroku 部屬 Golang LINE BOT 的朋友
最近有發生什麼事情嗎?
我今天半夜突然發現我寫的幾隻 BOT 都不會動作
進去看 log 全都是這種
2017-02-28T23:44:28.584425+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/callback" host={某某APP}.herokuapp.com request_id=~ fwd="IP" dyno= connect= service= status=503 bytes=
是不是代表 Golang 他們升級到 1.8 寫法也要變還是什麼的啊?
我是維持去年 11 月直接學習 @kkdai 的方式使用 BOT
部屬的參數只有改過 Procfile
跟 app.json
的 name
case *linebot.TextMessage:
clientText := strings.ToLower(message.Text)
if strings.Contains(clientText, "wifi") {
if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage("Today WiFi PassWord is [test20171005]")).Do(); err != nil {
log.Print(err)
} else {
if _, err = bot.ReplyMessage(event.ReplyToken, linebot.NewTextMessage("You Said 「"+message.Text+"」")).Do(); err != nil {
log.Print(err)
}
}
}