메시지에 인터넷 소문이 포함되어 있는지 확인하는 라인 봇.
이것은 真的假的。의 하위 프로젝트 중 하나입니다.
이 상태 다이어그램은 라인 봇이 사용자와 대화하는 방법을 설명합니다.
소문을 개발하려면 다음 설정을 완료해야합니다.
이 저장소 및 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
: 어떤 포트 라인 봇 서버가들을 것입니다.GTM_ID
: Google 태그 관리자 ID. 이벤트 및 변수는 dataLayer
로 추진하고 아래의 "Google Tag Manager"섹션을 참조하십시오.DEBUG_LIFF
: LIFF에서 외부 브라우저 점검을 비활성화합니다. 외부 브라우저에서 liff를 디버깅 할 때 유용합니다. 생산에서 이것을 활성화하지 마십시오.RUMORS_LINE_BOT_URL
: 자습서 이미지 URL 및 AUTH CALLBACK URL을 생성하는 데 사용되는 서버 공개 URL. 진행하려면 Node.JS
16+가 필요합니다.
$ npm i
Redis 및 MongoDB와 같은 주변 장치를 사용하여 다음을 사용하십시오.
$ docker-compose up -d
그런 다음 Chatbot Server 및 Liff 용 Webpack-Dev-Server를 포함한 응용 프로그램을 사용하여 다음을 사용하십시오.
$ npm run dev
서버는 localhost:5001
(또는 .env
파일에 지정된 PORT
)에서 시작됩니다.)
주변 장치를 중지하려면 docker-compose stop
실행하십시오.
npm test
만 실행하십시오. 앞서 언급 한 Docker를 자동으로 돌리고 단위 테스트를 실행합니다.
ngrok
사용하여 라인 서버에서 로컬 컴퓨터로 트래픽을 지시하는 공개 주소를 작성하는 것이 좋습니다. 당신의 길에 ngrok
과 함께
$ ngrok http 5001
ngrok
공개 URL을 제공합니다. 이를 사용하여 채널의 WebHook URL을 설정하십시오 (공식 튜토리얼의 "채널 콘솔"섹션 참조).
NGROK 구성 파일을 사용하여 고정 subdomain
있는 터널을 설정하는 것이 좋습니다. 이런 식으로 공용 URL을 고정 할 수 있습니다 ( subdomain
다른 사람이 점유하지 않는 한 공개 URL은 채널 설정을 반복적으로 파악할 수 없습니다!).
내부 라인 개발자는 메시지 API 채널의 콘솔을 사용합니다. 메시징 API> Webhook 설정에서 WebHook URL을 ${ngrok_url}/callback
으로 설정하고 WebHook을 사용합니다 . 확인을 클릭하여 로컬 컴퓨터에 성공적으로 연결되어 있는지 확인하십시오.
우리는 LIFF를 사용하여 기사 및 부정적인 피드백을 제출할 때 사용자의 이유를 수집하고 있습니다.
liff를 개발할 필요가 없다면, .env.sample
에서 제공되는 LIFF_URL
직접 사용할 수 있으며, 이는 Staging Liff 사이트와 연결됩니다.
LIFF를 수정하려면 다음을 수행해야 할 수도 있습니다.
LIFF 앱을 만들려면 공식 문서의 지침을 따르십시오.
chat_message.write
(liff to send message)를 선택한 후 LIFF_URL
로 .env
에 배치하십시오.Endpoint URL
설정하고 postfix로 /liff/index.html
추가하십시오. LIFF를 개발하려면 npm run dev
이후 Dev 서버 (http : // localhost : 5001) 또는 Production Chatbot Server의 /liff/index.html
에서 액세스 할 수 있습니다.
개발 모드에서는 localhost:
(기본값으로 8080
) 및 /liff
of Chatbot Server 프록시는 모든 요청을 Webpack-Dev-Server에 대한 모든 요청을 프록시합니다.
브라우저에서 liff를 개발하는 팁은 다음과 같습니다.
https:///liff/index.html?p=&...
방문하십시오.liff.logout()
입력해야합니다. liff.init()
여전히 데스크탑 브라우저에서 작동하여 앱을 렌더링하여 데스크탑에서 웹 레이아웃을 디버그 할 수 있도록합니다. 그러나 liff.sendMessages()
작동하지 않습니다. 브라우저 창이 로그인 리디렉션을 통과 한 경우 liff.closeWindow()
작동하지 않습니다.
Line Bot Server는 Line Chatbot에 특화된 GraphQL API 및 API를 COFACTS에 stichs로 만드는 GraphQL 서버를 시작합니다.
Cofacts가 업데이트 될 때마다 npm run cofactsapi
사용하여 최신 COFACTS API 스키마를 가져옵니다.
개발 중에 다음 명령을 사용하여 로컬 컴퓨터에서 스토리 북을 시작하십시오.
npm run storybook # Then visit http://localhost:6006
master
브랜치의 사전 제작 된 스토리 북을 보려면 https://cofacts.github.io/rumors-line-bot을 방문하십시오.
생산시 LIFF 파일은 /liff
디렉토리로 컴파일되며 챗봇 서버에서 정적 파일로 사용됩니다.
liff에서 400 bad request
받으면 편집 된 JS Binary에서 liff.init
함수 호출을 검색하고 liff id가 liff URL과 일치하는지 확인하십시오. https://liff.line.me/
이끌지 않고 경로가되어야합니다. .
LIFF ID는 빌드 중에 WebPack Defin Plugin을 사용하여 설정되므로 LIFF BINARIES를 재건하지 않고 LIFF URL ENV 변수를 교환하면 400 불량 요청이 발생합니다.
우리는 TTAG를 사용하여 챗봇의 빌드 타임 i18N을 지원합니다.
통합 문자열에 대한 TTAG 문서를 참조하십시오.
번역 파일에 주석이 달린 문자열을 추출하려면 다음을 사용하십시오.
$ npm run i18n:extract
번역 파일은 gettext po 형식의 i18n/
아래에 있습니다.
en_US.po
: 코드에 사용 된 언어는 이미 영어 이므로이 빈 번역 파일은 설정을 단순화하기 위해 존재합니다.zh_TW.po
: 전통적인 중국어 번역.ja.po
: 일본어 번역. GetText msginit
명령을 활용하여 지원하려는 모든 언어로 교체 할 수 있습니다.
i18n:extract
및 i18n:validate
로케일 변경을 반영하기 위해 package.json
의 스크립트를 확인하십시오.
기본적으로 챗봇은 en_US
로케일에 구축됩니다.
Heroku에서는 LOCALE
en_US
, zh_TW
또는 i18n/
DIRECTORY 아래에 존재하는 다른 언어 코드 중 하나에 설정하십시오.
대신 Docker를 사용하여 빌드하려면 원하는 LOCALE
포함하도록 Dockerfile을 수정해야 할 수도 있습니다.
전제 조건 :
푸시 메시지를 사용하려면 : .env
파일에서 NOTIFY_METHOD=PUSH_MESSAGE
설정합니다.
라인 알림을 사용하려면 :
RUMORS_LINE_BOT_URL
다음 Callback Url
설정합니다.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/
계정 관리자에서 설정 페이지 입력 지점 ( LIFF_URL
? p = setting)을 설정할 수 있습니다 -> Rich Menu
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
소문 라인-바트는 Google Cloud 서비스 계정 및 응용 프로그램 기본 자격 증명을 사용하여 인증 및 승인 된 Google Cloud Services를 사용합니다.
프로젝트에 따라 서비스 계정을 만들고 키를 다운로드하고 GOOGLE_APPLICATION_CREDENTIALS
Env var를 사용하여 다운로드 된 서비스 계정 키의 경로를 제공하십시오. 자세한 내용은 문서를 참조하십시오.
대화 플로우를 사용하여 사용자가 Chit-Chat을 시도하는 경우를 감지합니다. 사용자 입력이 대화식 의도와 일치하면 해당 의도에서 사전 정의 된 응답을 직접 반환 할 수 있습니다.
DialogFlow를 사용하려면 다음 설정을 수행하십시오.
dialogflow.sessions.detectIntent
권한이 있는지 확인하십시오.DAILOGFLOW_LANGUAGE
: 에이전트의 기본 언어에 비어 있거나 언어를 지정할 수 있습니다.DAILOGFLOW_ENV
: 기본적으로 드래프트 에이전트 또는 다른 버전을 만들 수 있습니다. Message Source
에 대한 사용자 정의 (사용자 스코프) Dimemsion을 생성하고 Group Members Count
에 대한 사용자 정의 (HIT SCOPE) 메트릭스를 만듭니다. 둘 다 기본 인덱스는 1입니다. 생성 된 인덱스 GA가 1이 아닌 경우 코드에서 cd1
과 cm1
찾아 cd$theIndexGACreated
및 cm$theIndexGACreated
로 변경하십시오.
npm run typecheck
사용하여 유형을 확인하십시오. npm run typegen
사용하여 GraphQL 스키마에서 유형을 생성하십시오.
.env
파일을 준비하고 (배포 환경과 동일해야 함) docker build .
Docker 이미지를 생성합니다.
.env
빌더 이미지로 복사하여 ENV와 LIFF 정적 파일을 생성합니다. 이미지를 빌드 할 때는 빌드 클라이언트 코드에서 서버 자격 증명이 유출되지 않도록 .env
에 "빌드 타임 변수"( .env.sample
)을 포함시킬 수 있습니다.
빌드 된 Docker 이미지는 공개 URL을 정적으로 제작 된 파일로 인코딩하기 때문에 이미지를 컨테이너로 실행할 때 이러한 빌드 타임 변수. 따라서 각 별도의 배포 환경에는 별도의 이미지 빌드가 필요합니다.
docker-compose.yml
사용하여 로컬로 내장 이미지를 테스트 할 수 있습니다. 라인 봇 섹션을 타협하고 내장 이미지 이름을 제공하십시오.
제작은 그러한 이미지를 실행하는 샘플 docker-coompose.yml
에 대한 소문 배포를 참조하십시오.
사용자가 LIFF와 상호 작용할 때 Google Tag Manager의 dataLayer
에서 변수와 이벤트를 푸시합니다.
.env
파일에서 다음 설정을 준비 할 수 있습니다.
GTM_ID
: Google 태그 관리자 컨테이너 ID ( GTM-XXXXXXX
) 응용 프로그램은 GTM dataLayer
에서 다음과 같은 사용자 정의 이벤트를 시작합니다.
dataLoaded
기사, 댓글 또는 피드백에 데이터가로드 될 때.routeChangeComplete
LIFF가로드되거나 경로를 변경할 때.feedbackVote
- 사용자가 피드백을 제출할 때.chooseArticle
사용자가 기사 liff에서 기사를 선택할 때. 또한 다음과 같은 사용자 정의 변수를 dataLayer
로 푸시합니다.
pagePath
routeChangeComplete
이벤트가 시작될 때 설정하십시오. Liff의 라우터에서 페이지 경로.userId
LIFF가 ID 토큰을 가져오고 라인 사용자 ID를 디코딩 한 후 설정하십시오.articleId
and replyId
: 기사, 댓글 및 피드백 onMount()
라이프 사이클이 호출됩니다. 또는 chooseArticle
이벤트가 해고 될 때.doc
dataLoaded
이벤트가 발사 될 때 설정합니다. 로드 된 컨텐츠 자체는 객체에 있습니다 (기사 liff의 기사, 의견 liff의 의견 및 피드백 LIFF의 피드백). 이벤트 형식 : Event category
/ Event action
/ Event label
우리는 Dimension Message Source
(Custom Dimemsion1)를 사용하여 다른 이벤트 소스를 분류합니다.
user
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_source
utm_medium
같은 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
(Custom Metric1).Group
/ Leave
/ -1
( Event category
/ Event action
/ Event value
)메모:
- GA 이벤트 값 1을 결합으로, -1로 설정합니다. 총 그룹이 현재 가입 한 챗봇 수를 알기 위해 총 이벤트 값을 직접 확인할 수 있습니다 (세부 사항은 암시 적 카운트 참조).
- 그룹이 현재 가입하거나 도약한다는 것을 알기 위해서는
Client Id
의 마지막Join
찾거나 동작을Leave
합니다.- 또한보다 정확한
Group Members Count
얻으려면Client Id
의 마지막Join
조치를 찾아야합니다.Group Members Count
Chatbot이 그룹에 가입 한 경우에만 기록되어 정확한 수를 알기 위해 Line Messaging-API에서 직접 가져와야합니다.
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
Article
/ Selected
/
Reply
/ Selected
/
UserInput
/ Intro
/ContentProxy
/ Forward
/
/
(value) LICENSE
이 저장소의 소스 코드에 대한 라이센스 계약을 정의합니다.
LEGAL.md
는 Cofacts 웹 사이트 사용자의 사용자 계약입니다.