LINE機器人檢查消息是否包含互聯網謠言。
這是真的假的。的子項目之一
該狀態圖描述了行機器人如何與用戶交談:
開發謠言 - 管家需要您完成以下設置。
將此存儲庫和CD克隆到項目目錄之後,然後安裝依賴項。
$ git clone --recursive [email protected]:cofacts/rumors-line-bot.git # --recursive for the submodules
$ cd rumors-line-bot
請按照直線官方教程中的所有步驟進行操作。
從.env.sample
模板創建.env
文件,至少填寫:
API_URL=https://dev-api.cofacts.tw/graphql
LINE_CHANNEL_SECRET=
LINE_CHANNEL_TOKEN=
LINE_LOGIN_CHANNEL_ID=
LIFF_URL=
其他可自定義的env var是:
REDIS_URL
:如果未給出,則使用redis://127.0.0.1:6379
。PORT
:哪個端口bot服務器將在偵聽。GTM_ID
:Google標籤管理器ID。有關事件和變量,我們將其推向dataLayer
,請參見下面的“ Google Tag Manager”部分。DEBUG_LIFF
:禁用LIFF中的外部瀏覽器檢查。在外部瀏覽器中調試LIFF時很有用。不要在生產中啟用這一點。RUMORS_LINE_BOT_URL
:用於生成教程圖像URL和LINE通知的auth回調URL的服務器公共URL。您將需要Node.JS
16+進行。
$ npm i
使用以下方式旋轉諸如Redis和MongoDB之類的外圍設備:
$ docker-compose up -d
然後旋轉該應用程序,包括for LIFF的聊天機器人服務器和WebPack-dev-Server,使用:
$ npm run dev
服務器將在localhost:5001
(或您在.env
文件中指定的PORT
)上啟動。
如果您想停止外圍設備,請運行docker-compose stop
。
只需運行npm test
即可。它將自動旋轉上述Docker並運行單元測試。
我們建議使用ngrok
創建一個將流量從線路服務器轉移到本地計算機的公共地址。在您的路上,只有ngrok
$ ngrok http 5001
ngrok
將為您提供公共網址。使用它來設置頻道的Webhook URL(請參閱“官方教程”中的“頻道控制台”部分。
我們建議使用Ngrok配置文件設置具有固定subdomain
的隧道。這樣,只要subdomain
不被其他人佔用,就可以修復公共網址(意味著對線路頻道設置的重複拷貝都不是對線路的設置!)。
內線開發人員在您的消息API頻道中的控制台,在消息API> Webhook設置下,將Webhook URL設置為${ngrok_url}/callback
並打開使用Webhook 。單擊“驗證”以確認它已成功連接到您的本地計算機。
在提交文章和負面反饋時,我們正在使用LIFF收集用戶的原因。
如果您不需要開發LIFF,則可以直接使用.env.sample
中提供的LIFF_URL
,該樣本鏈接到登台LIFF網站。
如果要修改LIFF,則可能需要遵循以下步驟:
要創建LIFF應用程序,請遵循官方文件下的說明,其中涉及
chat_message.write
在示波器中(for LIFF發送消息)在獲取LIFF URL後,將其放入.env
中為LIFF_URL
。Endpoint URL
設置為從chabbot端點開始,然後添加/liff/index.html
作為後綴。 要開發LIFF,在npm run dev
之後,在Dev Server(http:// localhost:5001)或Production Chatbot服務器的Dev Server(http:// localhost:5001) /liff/index.html
可訪問它。
在開發模式下,它在localhost:
(默認為8080
), /liff
chatbot Server代理的所有請求所有請求到WebPack-dev-server。
在瀏覽器中開發LIFF的提示是:
https:///liff/index.html?p=&...
in Desktop瀏覽器。liff.logout()
以觸發重新使用。 liff.init()
仍將在桌面瀏覽器中使用,因此該應用程序呈現,使我們能夠在桌面上調試Web佈局。但是, liff.sendMessages()
不起作用。如果您的瀏覽器窗口通過登錄重定向,則liff.closeWindow()
將無法使用。
Line Bot Server啟動了一個GraphQl Server,該服務器啟動了Cofacts GraphQl API和特定於LINE CHATBOT的API。
每當COFACTS API更新時,請使用npm run cofactsapi
獲取最新的Cofacts API模式。
在開發過程中,使用以下命令在本地機器上啟動故事書:
npm run storybook # Then visit http://localhost:6006
您也可以訪問https://cofacts.github.io/lumors-line-bot,以獲取master
分支的預構建故事書。
在生產中,LIFF文件將被編譯為/liff
目錄,並由聊天機器人服務器用作靜態文件。
如果您在LIFF中收到400 bad request
,請搜索liff.init
函數在編譯JS二進製文件中,查看LIFF ID是否與您的LIFF URL一致,這應該是不帶領https://liff.line.me/
路徑。 。
LIFF ID是在構建過程中使用WebPack定義插件設置的,因此在不重建LIFF二進製文件的情況下交換LIFF URL ENV變量將導致400個不良請求。
我們使用TTAG來支持聊天機器人的構建時間I18N。
請參閱TTAG文檔以進行註釋的字符串翻譯。
要將註釋的字符串提取到翻譯文件,請使用:
$ npm run i18n:extract
翻譯文件位於i18n/
下,以getText po格式。
en_US.po
:由於代碼中使用的語言已經是英語,因此存在該空的翻譯文件以簡化設置。zh_TW.po
:傳統中文翻譯。ja.po
:日語翻譯。 您可以通過利用getText msginit
命令來替換您想要支持的任何語言。
您將需要更改i18n:extract
和i18n: package.json
中i18n:validate
腳本以反映區域更改。
默認情況下,聊天機器人將在en_US
語言環境下構建。
在Heroku上,請將LOCALE
設置為en_US
, zh_TW
或i18n/
Directory下的任何其他語言代碼之一。
如果要使用Docker構建,則可能需要修改Dockerfile以包括所需的LOCALE
。
先決條件:
要使用推送消息:在.env
文件中,sets NOTIFY_METHOD=PUSH_MESSAGE
使用線路通知:
Callback Url
: RUMORS_LINE_BOT_URL
/authcallback /line_notify.env
文件中,設置 LINE_NOTIFY_CLIENT_ID=
LINE_NOTIFY_CLIENT_SECRET=
NOTIFY_METHOD=LINE_NOTIFY
RUMORS_LINE_BOT_URL=
LINE_FRIEND_URL=https://line.me/R/ti/p/
您可以在客戶經理 - > Rich菜單中設置設置頁面入口點( LIFF_URL
?p =設置)
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
Rumors-Line-Bot使用Google Cloud Services使用Google Cloud Service帳戶和應用程序默認憑據進行身份驗證和授權。
請在項目下創建一個服務帳戶,下載其密鑰並使用GOOGLE_APPLICATION_CREDENTIALS
env var,為您下載的服務帳戶密鑰提供路徑。有關詳細信息,請參見文檔。
我們使用DialogFlow來檢測用戶是否試圖聊天。如果用戶輸入與任何對話流的意圖匹配,我們可以直接返回該意圖中的預定響應。
要使用DialogFlow,請進行以下設置:
dialogflow.sessions.detectIntent
許可。DAILOGFLOW_LANGUAGE
:空為代理的默認語言,也可以指定一種語言。DAILOGFLOW_ENV
:默認為草稿代理,或者您可以創建不同的版本。為Message Source
創建一個自定義(用戶範圍)dimemsion,並為Group Members Count
創建一個自定義(HIT範圍)METRIX。他們兩個默認索引均為1。如果創建的索引GA不是1,則在代碼中找到cd1
和cm1
,然後將它們更改為cd$theIndexGACreated
和cm$theIndexGACreated
。
使用npm run typecheck
檢查類型;使用npm run typegen
從GraphQl架構生成類型。
準備.env
文件(應與您的部署環境相同)並運行docker build .
生成Docker映像。
.env
將被複製到構建器映像上,以生成LIFF靜態文件。構建圖像時,您只需在.env
中包括“構建時間變量”(以.env.sample
表示),以確保在構建的客戶端代碼中不會洩漏服務器憑據。
由於已構建的Docker映像將將公共URL編碼到靜態構建的文件中,因此當我們將圖像作為容器運行時,這些構建時間變量。因此,每個單獨的部署環境將需要單獨的圖像構建。
您可以使用docker-compose.yml
在本地測試構建的圖像;只需輸入管線機器人部分,並提供構建的圖像名稱。
有關生產,請參閱謠言 - 示威者docker-coompose.yml
,以運行此類圖像。
當用戶與LIFF進行交互時,我們在Google標籤管理器的dataLayer
中推動變量和事件。
您可以在.env
文件中準備以下設置:
GTM_ID
:Google標籤管理器容器ID( GTM-XXXXXXX
)該應用程序將在GTM dataLayer
中啟動以下自定義事件:
dataLoaded
- 當數據加載到文章,評論或反饋LIFF中時。routeChangeComplete
加載LIFF或更改路徑時。feedbackVote
- 用戶提交反饋時。chooseArticle
當用戶選擇文章Liff中的文章時。此外,它將將以下自定義變量推向dataLayer
;
pagePath
設置當routeChangeComplete
fires fires時設置。 LIFF路由器的頁面路徑。userId
設置LIFF獲得ID令牌,並在內部解碼行用戶ID。articleId
和replyId
:在文章,評論和反饋上設置了命名生命onMount()
。或者發射chooseArticle
事件時。doc
設置dataLoaded
射擊時。對像中加載的內容本身(文章LIFF中的文章,評論LIFF中的評論和反饋LIFF中的反饋)。 發送事件格式: Event category
/ Event action
/ Event label
我們使用尺寸Message Source
(自定義dimemsion1)來對不同的事件源進行分類
user
1一郵件room
|小組消息的group
UserInput
/ MessageType
/
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
找到的每篇文章UserInput
/ ArticleSearch
/ ArticleNotFound
UserInput
/ ArticleSearch
/ ArticleFoundButNoHit
UserInput
/ IsForwarded
/ Yes
| No
UserInput
/ IsCooccurrence
/ Yes
| No
UserInput
/ ChatWithBot
/
Article
/ Selected
/
Reply
/ Search
/
每個答复Article
/ NoReply
/
Reply
/ Selected
/
Reply
/ Type
/
UserInput
/ Feedback-Vote
/ /
/feedback/yes
或/feedback/no
。Article
/ Create
/ Yes
Article
/ Create
/ No
Article
/ ProvidingReason
/
/reason
。/articles
的頁面視圖utm_source=rumors-line-bot&utm_medium=richmenu
utm_source=rumors-line-bot&utm_medium=push
LIFF
/ ChooseArticle
/
utm_medium
utm_source
等URL參數。/setting
的頁面視圖已發送utm_source=rumors-line-bot&utm_medium=reply-request
&utm_source=rumors-line-bot&utm_medium=tutorial
Tutorial
/ Step
/ ON_BOARDING
Tutorial
/ Step
/ RICH_MENU
Tutorial
/ Step
/
Group
/ Join
/ 1
( Event category
/ Event action
/ Event value
)Group Members Count
(自定義metric1)記錄小組成員在聊天機器人加入時計數。Group
/ Leave
/ -1
( Event category
/ Event action
/ Event value
)筆記:
- 我們將GA事件值1設置為JOIN,-1為休假。要知道當前加入的總體計數聊天機器人,您可以直接查看總事件值(詳細信息請參見隱式計數)。
- 要知道當前加入或脫身的組,您應該找到最後的
Join
或Leave
Client Id
的操作。- 另外,您應該找到
Client Id
的最後一個Join
操作,以獲得更準確的Group Members Count
。僅在聊天機器人加入組時才記錄Group Members Count
,以了解確切的計數,您應該直接從線路消息API獲得它。
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
找到的每篇文章Article
/ Selected
/
Reply
/ Selected
/
UserInput
/ Intro
/ContentProxy
/ Forward
/
/
(value) LICENSE
在此存儲庫中定義了源代碼的許可協議。
LEGAL.md
是Cofacts網站用戶的用戶協議。