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网站用户的用户协议。