LV. 20
GP 1

【心得】來説說目前測試API下來的心得,更新貼圖&圖片api串接

樓主 Hayate k0783237
GP6 BP-
大家好,
前幾天收到站內信邀請後感到有點興趣就小玩了一下,
我自己是用最簡單又不用花錢的方式來做一個簡單的bot,
來分享一下心得吧:

在申請網站填完資料之後,想說要怎麼加bot來測試,
後來發現原來要去測試人員那頁填寫自己的巴哈帳號,
然後就會出現在自己的神秘好友裡面。



不要問我為什麼 bot 會叫歐比王,因為我是星戰迷XD
上面我把抓來一起測試的朋友帳號塗掉了。


然後看了一下左邊教學連結裡面的文件以後,簡單做了一個什麼都聽不懂的歐比王,
跟他說話他都會回聽不懂XD

  

目前關鍵字只有設定一個,要跟歐比王說:force,才會回到比較人性化的回答XD

這邊要說一下,中間碰到一個小問題,
因為發的 json 格式上 跟line不太一樣,
跟FB Messenger 有點像又不太像,
小卡了一下,後來自己按串接說明上的格式兜一下就成功了。

開發環境:Google Apps Script
會用這個主要是不用申請虛擬機和搞一些有的沒的阿帕契啦!又滿簡單的。

2/12更新:
過年前站方放出了貼圖&圖片的新api,當初有小試一下就回老家了,
過完年爬了一下板上還沒有人分享貼圖和圖片的心得,不才就來分享一下吧!
這邊做了一個簡單的關鍵字"Hi"和"車圖"


貼圖應該大家沒什麼問題,小改一下訊息的回傳格式就好,
主要來分享一下發圖片的部分的作法,我是發送自己google雲端硬碟裡面的圖片
  1. 把圖片分享權限設為知道連結的人能夠編輯
  2. 記下來圖片id(https://drive.google.com/open?id=記下來
  3. 關鍵程式碼:  
    var m = JSON.stringify({"type":"img"});
    var r = JSON.stringify({"id":recipientId});
    var file = DriveApp.getFileById(imageId).getAs('image/png');
    var formData = {
        'filedata':file,
        'message':m,
        'recipient':r  };
  4. 然後把formData用post送出去

這邊要提一下,圖片傳出去後要等一下子,不是這麼快就會回應,算是小缺陷,
如果我同時打兩個關鍵字的話bot發圖片會比上一則關鍵字的回應還慢出來。
可能也跟圖片壓縮有關係?

還有一點是有時候我連續送出 request, bot偶爾會回應的順序不對,
或是回應不是接在本來的關鍵字下面有點可惜了,
不過以上這些應該還是能自己設計回話的速度來解決XD

結語:
感覺滿有趣的,能自己創虛擬的二創bot角色來聊天。
現在還在測試階段的樣子,還不能發圖片和貼圖,也不能邀請進群組的樣子。
滿期待完全開放後會放出什麼api!

感覺各種車圖機器人指日可待!!

6
-
LV. 37
GP 2k
2 樓 敵會跪 jack12345520
GP0 BP-
把formData用post送出去
應該要送到哪裡?
怎麼送呢?

0
-
LV. 22
GP 45
3 樓 Hayate k0783237
GP1 BP-

作者標示-非商業性

本授權條款允許使用者重製、散布、傳輸以及修改著作,但不得為商業目的之使用。使用時必須按照著作人指定的方式表彰其姓名。

※ 引述《jack12345520 (敵會跪)》之銘言
> 把formData用post送出去
> 應該要送到哪裡?
> 怎麼送呢?

我詳細說明一下好了~

Q:怎麼送呢?

要詳細講之前 先說一下一些原理~
我們在網路上要溝通,常見的是走HTTP 協定
請求叫做 HTTP request ,回應叫做 HTTP response
request 顧名思義,就是我要跟伺服器要東西,或是要做什麼事情的時候發出的請求
response 是在伺服器收到我們的請求後他回答我們的訊息

發送一般文字訊息、貼圖:
我們的 bot 要發送一般文字訊息、貼圖給哈哈姆特的話,
根據官方的文件,必須把要傳送的訊息、要送給誰使用 json 格式來包裝,
然後使用 HTTP  POST request 把包裝好的東西 送到這個位址。
可以用寄信來理解,我們把訊息文字放進信封袋包裝(json)然後送出去。

發送圖片:
根據官方的文件,必須把要傳送的圖片、要送給誰使用 表單資料(form-data)的方式來包裝
然後使用 HTTP  POST request 把包裝好的東西 送到這個位址。
可以用寄包裹來理解,我們把圖片、要寄給誰 用紙箱包裝(form-data) 然後送出去。


目前bot要把圖片傳給巴友有兩種傳法:
a. 每次都上傳圖片檔給巴友
    根據舊的官方文件
  (直接用Google Apps Script 的程式碼為例子)

b. 只上傳一次圖片檔給哈哈姆特,之後用發訊息的方式請哈哈姆特代傳
    
    1. 先上傳圖片:
    先發 HTTP  POST request 上傳圖片檔,然後從哈哈姆特回的 HTTP response
    取得這張圖片在哈哈姆特伺服器上的:圖片id,圖片檔名,圖片高,圖片寬
  
    可以看一下巴友Zn₂Fe(PO₄)₂•4H₂O sp21804173 寫的 【心得】Google Apps Script 一些程式碼
    上傳成功後會得到:
    {"id":"<圖片id>","ext":"<圖片檔名>","width":<圖片寬>,"height":<圖片高>}
   
    2. 然後發給巴友:
    根據新的官方文件  
    其實跟傳訊息給巴友是很像的,只是傳訊息是要填入:"type":"text" + 訊息文字
    而傳圖片則是要改填入:"type":"img" +{圖片id,圖片檔名,圖片高,圖片寬}
    
    要注意的是1 和 2, 這兩個步驟是要發到不同的api 喔,
    而且1因為是要上傳圖檔,所以要用form-data,但是2只需要傳文字用的是json
    可以看一下官方文件
  
然後,建議走 b 路線啦~ 這樣不用每次都要傳檔,不論是流量負擔或反應速度應該都好很多!!
   
1
-
未登入的勇者,要加入 4 樓的討論嗎?
板務人員:

0 筆精華,吸收日月精華中
一個月內新增 0
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】