Bot baris yang memeriksa apakah suatu pesan berisi rumor internet.
Ini adalah salah satu subproyek dari 真的假的。
Diagram keadaan ini menjelaskan bagaimana bot LINE berbicara kepada pengguna:
Mengembangkan rumor-line-bot mengharuskan Anda menyelesaikan pengaturan berikut.
Setelah mengkloning repositori & cd ini ke direktori proyek, kemudian instal dependensinya.
$ git clone --recursive [email protected]:cofacts/rumors-line-bot.git # --recursive for the submodules
$ cd rumors-line-bot
Silakan ikuti semua langkah dalam tutorial resmi LINE.
Buat file .env
dari template .env.sample
, minimal isi:
API_URL=https://dev-api.cofacts.tw/graphql
LINE_CHANNEL_SECRET=<paste Messaging API's channel secret here>
LINE_CHANNEL_TOKEN=<paste Messaging API's channel access token here>
LINE_LOGIN_CHANNEL_ID=<paste LINE Login channel ID here>
LIFF_URL=<paste LIFF app's LiFF URL>
Var env lainnya yang dapat disesuaikan adalah:
REDIS_URL
: Jika tidak diberikan, digunakan redis://127.0.0.1:6379
.PORT
: Port mana yang akan didengarkan oleh server bot baris.GTM_ID
: ID Google Pengelola Tag. Untuk peristiwa dan variabel yang kami masukkan ke dataLayer
, lihat bagian "Google Pengelola Tag" di bawah.DEBUG_LIFF
: Menonaktifkan pemeriksaan browser eksternal di LIFF. Berguna saat men-debug LIFF di browser eksternal. Jangan aktifkan ini pada produksi.RUMORS_LINE_BOT_URL
: URL publik server yang digunakan untuk menghasilkan url gambar tutorial dan url panggilan balik autentikasi LINE Notify. Anda memerlukan Node.JS
16+ untuk melanjutkan.
$ npm i
Jalankan periferal seperti Redis dan MongoDB menggunakan:
$ docker-compose up -d
Kemudian jalankan aplikasinya, termasuk server chatbot dan webpack-dev-server untuk LIFF, menggunakan:
$ npm run dev
Server akan dimulai pada localhost:5001
(atau PORT
yang Anda tentukan di file .env
Anda.)
Jika Anda ingin menghentikan periferal, jalankan docker-compose stop
.
Jalankan saja npm test
. Ini secara otomatis akan menjalankan buruh pelabuhan yang disebutkan di atas dan menjalankan pengujian unit.
Kami merekomendasikan penggunaan ngrok
untuk membuat alamat publik yang mengarahkan lalu lintas dari server LINE ke mesin lokal Anda. Dengan ngrok
di jalanmu, adil
$ ngrok http 5001
ngrok
akan memberi Anda URL publik. Gunakan ini untuk menyetel URL webhook Saluran Anda (Lihat bagian "Konsol Saluran" di tutorial resmi LINE).
Kami merekomendasikan penggunaan file konfigurasi ngrok untuk menyiapkan terowongan dengan subdomain
tetap. Dengan cara ini URL publik dapat diperbaiki (berarti tidak ada copy-paste berulang ke pengaturan Saluran LINE!) selama subdomain
tersebut tidak ditempati oleh orang lain.
Di dalam konsol Pengembang LINE di saluran API Pesan Anda, di bawah API Pesan > Pengaturan Webhook, atur URL Webhook ke ${ngrok_url}/callback
dan aktifkan Gunakan webhook . Klik verifikasi untuk mengonfirmasi bahwa itu berhasil terhubung ke mesin lokal Anda.
Kami menggunakan LIFF untuk mengumpulkan alasan pengguna saat mengirimkan artikel & masukan negatif.
Jika Anda tidak perlu mengembangkan LIFF, Anda dapat langsung menggunakan LIFF_URL
yang disediakan di .env.sample
, yang tertaut ke situs pementasan LIFF.
Jika Anda ingin mengubah LIFF, Anda mungkin perlu mengikuti langkah-langkah berikut:
Untuk membuat aplikasi LIFF, ikuti petunjuk di bawah dokumen resmi, yang melibatkan
chat_message.write
dalam cakupan (agar LIFF mengirim pesan) Setelah memperoleh URL LIFF, letakkan di .env
sebagai LIFF_URL
.Endpoint URL
untuk memulai dengan titik akhir chabbot Anda, dan tambahkan /liff/index.html
sebagai postfix. Untuk mengembangkan LIFF, setelah npm run dev
, LIFF dapat diakses di /liff/index.html
server dev (http://localhost:5001) atau server chatbot produksi.
Dalam mode pengembangan, ia memutar webpack-dev-server di localhost:<LIFF_DEV_PORT>
(defaultnya adalah 8080
), dan /liff
dari server chatbot memproksi semua permintaan ke webpack-dev-server.
Tip untuk mengembangkan LIFF di browser adalah:
https://<your-dev-chatbot.ngrok.io>/liff/index.html?p=<page>&...
di browser desktop.liff.logout()
secara manual di konsol JS untuk memicu login ulang. liff.init()
akan tetap berfungsi di browser desktop, sehingga aplikasi dirender, memungkinkan kita melakukan debug tata letak web di desktop. liff.sendMessages()
tidak akan berfungsi. liff.closeWindow()
juga tidak akan berfungsi jika jendela browser Anda telah melalui pengalihan login.
Server bot LINE memulai server GraphQL yang menggabungkan API Cofacts GraphQL dan API khusus untuk chatbot LINE.
Setiap kali Cofacts API diperbarui, gunakan npm run cofactsapi
untuk mengambil skema Cofacts API terbaru.
Selama pengembangan, gunakan perintah berikut untuk memulai buku cerita di mesin lokal Anda:
npm run storybook # Then visit http://localhost:6006
Anda juga dapat mengunjungi https://cofacts.github.io/rumors-line-bot untuk buku cerita siap pakai di cabang master
.
Pada produksi, file LIFF dikompilasi ke direktori /liff
dan disajikan sebagai file statis oleh server chatbot.
Jika Anda mendapatkan 400 bad request
di LIFF, silakan cari pemanggilan fungsi liff.init
dalam biner JS yang dikompilasi dan lihat apakah ID LIFF konsisten dengan URL LIFF Anda, yang seharusnya menjadi jalur tanpa awalan https://liff.line.me/
.
ID LIFF disetel menggunakan plugin Webpack Define selama pembuatan, sehingga menukar variabel env URL LIFF tanpa membangun kembali biner LIFF akan menyebabkan 400 permintaan buruk.
Kami menggunakan ttag untuk mendukung i18n waktu build untuk chatbot.
Silakan merujuk ke dokumentasi ttag untuk memberi anotasi pada string yang akan diterjemahkan.
Untuk mengekstrak string beranotasi ke file terjemahan, gunakan:
$ npm run i18n:extract
File terjemahan terletak di bawah i18n/
, dalam format Gettext PO.
en_US.po
: Karena bahasa yang digunakan dalam kode sudah bahasa Inggris, file terjemahan kosong ini ada untuk menyederhanakan pengaturan.zh_TW.po
: Terjemahan tradisional Tiongkok.ja.po
: Terjemahan bahasa Jepang. Anda dapat menggantinya dengan bahasa apa pun yang ingin Anda dukung, dengan memanfaatkan perintah Gettext msginit
.
Anda perlu mengubah skrip i18n:extract
dan i18n:validate
di package.json
untuk mencerminkan perubahan lokal.
Secara default, chatbot akan dibuat di bawah lokal en_US
.
Di Heroku, harap setel LOCALE
ke salah satu en_US
, zh_TW
atau kode bahasa lain yang ada di direktori i18n/
.
Jika Anda ingin membangun menggunakan buruh pelabuhan, Anda mungkin perlu memodifikasi Dockerfile untuk menyertakan LOCALE
yang diinginkan.
Prasyarat :
Untuk menggunakan pesan push : dalam file .env
, setel NOTIFY_METHOD=PUSH_MESSAGE
Untuk menggunakan LINE Beritahu :
Callback Url
: RUMORS_LINE_BOT_URL
/authcallback/line_notify.env
, set LINE_NOTIFY_CLIENT_ID=<paste LINE Notify Client ID here>
LINE_NOTIFY_CLIENT_SECRET=<paste LINE Notify Client Secret here>
NOTIFY_METHOD=LINE_NOTIFY
RUMORS_LINE_BOT_URL=<line bot server url>
LINE_FRIEND_URL=https://line.me/R/ti/p/<paste your chatbot ID here>
Anda dapat mengatur titik masuk halaman pengaturan ( LIFF_URL
?p=setting) di manajer akun -> menu kaya
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
rumor-line-bot menggunakan layanan cloud Google yang diautentikasi dan diotorisasi menggunakan akun layanan Google Cloud dan Kredensial Default Aplikasi.
Harap buat akun layanan di bawah proyek, unduh kuncinya dan gunakan GOOGLE_APPLICATION_CREDENTIALS
env var untuk memberikan jalur ke kunci akun layanan yang Anda unduh. Lihat dokumentasi untuk detailnya.
Kami menggunakan Dialogflow untuk mendeteksi apakah pengguna mencoba mengobrol. Jika masukan pengguna cocok dengan salah satu maksud Dialogflow, kami dapat langsung mengembalikan respons yang telah ditentukan sebelumnya dalam maksud tersebut.
Untuk menggunakan Dialogflow, silakan lakukan pengaturan berikut:
dialogflow.sessions.detectIntent
.DAILOGFLOW_LANGUAGE
: Kosongkan untuk bahasa default agen, atau Anda dapat menentukan bahasa.DAILOGFLOW_ENV
: Default untuk agen draf, atau Anda dapat membuat versi berbeda. Buat dimensi khusus (cakupan pengguna) untuk Message Source
, dan metrik khusus (cakupan hit) untuk Group Members Count
. Indeks default keduanya adalah 1. Jika indeks yang dibuat GA bukan 1, temukan cd1
dan cm1
dalam kode dan ubah menjadi cd$theIndexGACreated
dan cm$theIndexGACreated
.
Gunakan npm run typecheck
untuk memeriksa tipe; gunakan npm run typegen
untuk menghasilkan tipe dari skema GraphQL.
Siapkan file .env
(yang harus identik dengan lingkungan penerapan Anda) dan jalankan docker build .
untuk menghasilkan gambar buruh pelabuhan.
.env
akan disalin ke gambar pembuat untuk menghasilkan file statis LIFF dengan env. Saat membuat image, Anda cukup menyertakan "Variabel waktu pembuatan" (dilambangkan dengan .env.sample
) di .env
untuk memastikan bahwa tidak ada kredensial server yang bocor dalam kode klien yang dibuat.
Karena gambar buruh pelabuhan yang dibuat akan mengkodekan URL publik ke dalam file yang dibuat secara statis, variabel waktu pembuatan ini ketika kita menjalankan gambar sebagai sebuah wadah. Oleh karena itu, setiap lingkungan penerapan yang terpisah akan memerlukan build image yang terpisah.
Anda dapat menguji gambar yang dibuat secara lokal menggunakan docker-compose.yml
; cukup hapus komentar pada bagian bot baris dan berikan nama gambar yang dibuat.
Untuk produksi, silakan lihat rumor-deploy untuk contoh docker-coompose.yml
yang menjalankan gambar tersebut.
Kami memasukkan variabel dan peristiwa di dataLayer
Google Pengelola Tag saat pengguna berinteraksi dengan LIFF.
Anda dapat menyiapkan pengaturan berikut dalam file .env
:
GTM_ID
: ID Penampung Google Pengelola Tag ( GTM-XXXXXXX
) Aplikasi akan mengaktifkan peristiwa khusus berikut di GTM dataLayer
:
dataLoaded
- ketika data dimuat dalam artikel, komentar atau umpan balik LIFF.routeChangeComplete
- ketika LIFF dimuat atau mengubah jalur.feedbackVote
- saat pengguna mengirimkan umpan balik.chooseArticle
- ketika pengguna memilih artikel di Artikel LIFF. Selain itu, ini akan mendorong variabel khusus berikut ke dataLayer
;
pagePath
- Tetapkan kapan peristiwa routeChangeComplete
diaktifkan. Jalur halaman dari router LIFF.userId
- Ditetapkan setelah LIFF mendapatkan token ID dan menerjemahkan ID pengguna LINE di dalamnya.articleId
dan replyId
: disetel pada siklus hidup Artikel, Komentar, dan Umpan Balik onMount()
disebut. Atau saat acara chooseArticle
diaktifkan.doc
- Menyetel kapan peristiwa dataLoaded
diaktifkan. Konten yang dimuat itu sendiri di objek (artikel di Artikel LIFF, komentar di Komentar LIFF, dan umpan balik di umpan balik LIFF). Format acara yang dikirim: Event category
/ Event action
/ Event label
Kami menggunakan Message Source
dimensi (Dimemsi Khusus1) untuk mengklasifikasikan sumber peristiwa yang berbeda
user
untuk pesan 1 lawan 1room
| group
untuk pesan grupUserInput
/ MessageType
/ <text | image | video | ...>
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/ <article id>
untuk setiap artikel yang ditemukanUserInput
/ ArticleSearch
/ ArticleNotFound
UserInput
/ ArticleSearch
/ ArticleFoundButNoHit
UserInput
/ IsForwarded
/ Yes
| No
UserInput
/ IsCooccurrence
/ Yes
| No
UserInput
/ ChatWithBot
/ <intent name>
Article
/ Selected
/ <selected article id>
Reply
/ Search
/ <reply id>
untuk setiap balasanArticle
/ NoReply
/ <selected article id>
Reply
/ Selected
/ <selected reply id>
Reply
/ Type
/ <selected reply's type>
UserInput
/ Feedback-Vote
/ <articleId>/<replyId>
/feedback/yes
atau /feedback/no
juga dikirimkan.Article
/ Create
/ Yes
Article
/ Create
/ No
Article
/ ProvidingReason
/ <articleId>
/reason
juga dikirimkan./articles
dikirimkanutm_source=rumors-line-bot&utm_medium=richmenu
utm_source=rumors-line-bot&utm_medium=push
LIFF
/ ChooseArticle
/ <articleId>
utm_source
, utm_medium
juga berlaku./setting
dikirimutm_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
/ <TUTORIAL_STEPS>
Group
/ Join
/ 1
( Event category
/ Event action
/ Event value
)Group Members Count
(Metrik Khusus1) untuk mencatat jumlah anggota grup saat chatbot bergabung.Group
/ Leave
/ -1
( Event category
/ Event action
/ Event value
)Catatan:
- Kami menetapkan nilai acara ga 1 sebagai bergabung, -1 sebagai keluar. Untuk mengetahui total jumlah grup chatbot yang saat ini bergabung, Anda dapat langsung melihat total nilai event (Detail lihat Jumlah Implisit).
- Untuk mengetahui suatu grup saat ini bergabung atau keluar, Anda harus menemukan tindakan
Join
atauLeave
terakhir dariClient Id
.- Selain itu, Anda juga harus menemukan tindakan
Join
terakhir dariClient Id
untuk mendapatkanGroup Members Count
yang lebih akurat.Group Members Count
hanya dicatat ketika chatbot bergabung dengan grup, untuk mengetahui jumlah pastinya, Anda harus langsung mendapatkannya dari line messages-api.
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/ <article id>
untuk setiap artikel yang ditemukanArticle
/ Selected
/ <selected article id>
Reply
/ Selected
/ <selected reply id>
UserInput
/ Intro
/ContentProxy
/ Forward
/ <content type>
/ <content length>
(nilai) LICENSE
mendefinisikan perjanjian lisensi untuk kode sumber dalam repositori ini.
LEGAL.md
adalah perjanjian pengguna untuk pengguna situs web Cofacts.