Bot bot yang memeriksa apakah pesan berisi rumor internet.
Ini adalah salah satu sub-proyek 真的假的。
Diagram keadaan ini menjelaskan bagaimana bot baris berbicara kepada pengguna:
Mengembangkan Rumor-Bot-Bot mengharuskan Anda untuk menyelesaikan pengaturan berikut.
Setelah mengkloning Repositori & CD ini ke Direktori Proyek, lalu pasang dependensi.
$ git clone --recursive [email protected]:cofacts/rumors-line-bot.git # --recursive for the submodules
$ cd rumors-line-bot
Harap ikuti semua langkah dalam antrean tutorial resmi.
Buat file .env
dari template .env.sample
, setidaknya isi:
API_URL=https://dev-api.cofacts.tw/graphql
LINE_CHANNEL_SECRET=
LINE_CHANNEL_TOKEN=
LINE_LOGIN_CHANNEL_ID=
LIFF_URL=
VAR Vars yang dapat disesuaikan lainnya adalah:
REDIS_URL
: jika tidak diberikan, redis://127.0.0.1:6379
digunakan.PORT
: port mana server bot baris akan mendengarkan.GTM_ID
: ID Tag Manager Google. Untuk acara dan variabel yang kami dorong ke dataLayer
, lihat bagian "Google Tag Manager" di bawah ini.DEBUG_LIFF
: Menonaktifkan peramban eksternal check in liff. Berguna saat men -debug LIFF di browser eksternal. Jangan mengaktifkan ini pada produksi.RUMORS_LINE_BOT_URL
: URL publik server yang digunakan untuk menghasilkan URL gambar tutorial dan URL callback auth dari line notify. Anda akan memerlukan Node.JS
16+ untuk melanjutkan.
$ npm i
Pintu periferal seperti Redis dan MongoDB menggunakan:
$ docker-compose up -d
Kemudian putar aplikasi, termasuk server chatbot dan webpack-dev-server untuk LIFF, menggunakan:
$ npm run dev
Server akan dimulai di localhost:5001
(atau PORT
yang Anda tentukan dalam file .env
Anda.)
Jika Anda ingin menghentikan periferal, jalankan docker-compose stop
.
Jalankan saja npm test
. Ini akan secara otomatis memutar Docker yang disebutkan di atas dan menjalankan tes unit.
Kami merekomendasikan menggunakan ngrok
untuk membuat alamat publik yang mengarahkan lalu lintas dari server garis ke mesin lokal Anda. Dengan ngrok
di jalan Anda, hanya
$ ngrok http 5001
ngrok
akan memberi Anda URL publik. Gunakan ini untuk mengatur URL webhook dari saluran Anda (lihat bagian "Konsol Saluran" di baris tutorial resmi).
Kami sarankan menggunakan file konfigurasi NGROK untuk mengatur terowongan dengan subdomain
tetap. Dengan cara ini URL publik dapat diperbaiki (berarti tidak ada copy-pasting yang berulang untuk mengatur pengaturan saluran!) Selama subdomain
tidak ditempati oleh orang lain.
Inside Line Developer Console di saluran API pesan Anda, di bawah Appesaging API> Pengaturan WebHook Atur URL WebHook ke ${ngrok_url}/callback
dan nyalakan Gunakan WebHook . Klik Verifikasi untuk mengonfirmasi itu berhasil terhubung ke mesin lokal Anda.
Kami menggunakan LIFF untuk mengumpulkan alasan pengguna saat mengirimkan artikel & umpan balik negatif.
Jika Anda tidak perlu mengembangkan LIFF, Anda dapat secara langsung menggunakan LIFF_URL
yang disediakan di .env.sample
, yang tautan ke pementasan situs LIFF.
Jika Anda ingin memodifikasi LIFF, Anda mungkin perlu mengikuti langkah -langkah ini:
Untuk membuat aplikasi LIFF, silakan ikuti instruksi di bawah dokumen resmi, yang melibatkan
chat_message.write
in scope (untuk LIFF untuk mengirim pesan) setelah mengakuisisi 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
, dapat diakses di bawah /liff/index.html
dari Dev Server (http: // localhost: 5001) atau server chatbot produksi.
Dalam mode pengembangan, ini memutar webpack-dev-server di localhost:
(default ke 8080
), dan /liff
proxy server chatbot semua permintaan ke webpack-dev-server.
Tip untuk mengembangkan LIFF di browser adalah:
https:///liff/index.html?p=&...
di browser desktop.liff.logout()
secara manual di konsol JS untuk memicu login. liff.init()
masih akan bekerja di browser desktop, sehingga aplikasi tersebut membuat, memungkinkan kami untuk men -debug tata letak web di desktop. liff.sendMessages()
tidak akan berhasil. liff.closeWindow()
tidak akan berfungsi baik jika jendela browser Anda telah melalui pengalihan login.
Server bot baris memulai server graphql yang stiches cofacts graphql API dan API spesifik untuk chatbot line.
Setiap kali pembaruan API COFACTS, gunakan npm run cofactsapi
untuk mengambil skema API COFACTS 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 pra-dibangun di master
Branch.
Pada produksi, file LIFF dikompilasi ke /liff
Directory dan berfungsi sebagai file statis oleh server chatbot.
Jika Anda mendapatkan 400 bad request
di LIFF, silakan cari panggilan fungsi liff.init
di Binary JS yang dikompilasi dan lihat apakah ID LIFF konsisten dengan URL LIFF Anda, yang seharusnya menjadi jalan tanpa memimpin https://liff.line.me/
.
ID LIFF diatur menggunakan plugin Define Webpack selama build, sehingga bertukar variabel LIFF URL LIFF tanpa membangun kembali binari Liff akan menyebabkan 400 permintaan buruk.
Kami menggunakan TTAG untuk mendukung Build-Time I18N untuk chatbot.
Silakan merujuk ke dokumentasi TTAG untuk anotasi string untuk diterjemahkan.
Untuk mengekstrak string beranotasi ke file terjemahan, gunakan:
$ npm run i18n:extract
File terjemahan terletak di bawah i18n/
, dalam format PO gettext.
en_US.po
: Karena bahasa yang digunakan dalam kode sudah berbahasa Inggris, file terjemahan kosong ini ada untuk menyederhanakan pengaturan.zh_TW.po
: Terjemahan Cina Tradisional.ja.po
: Terjemahan Jepang. Anda dapat mengganti ini dengan bahasa apa pun yang ingin Anda dukung, dengan memanfaatkan perintah Gettext msginit
.
Anda perlu mengubah i18n:extract
dan i18n:validate
skrip dalam package.json
untuk mencerminkan perubahan lokal.
Secara default, chatbot akan dibangun di bawah Locale en_US
.
Di Heroku, silakan atur LOCALE
ke salah satu en_US
, zh_TW
atau kode bahasa lain yang ada di bawah i18n/
Direktori.
Jika Anda ingin membangun menggunakan Docker sebagai gantinya, Anda mungkin perlu memodifikasi DockerFile untuk memasukkan LOCALE
yang diinginkan.
Prasyarat:
Untuk menggunakan pesan push: dalam file .env
, set NOTIFY_METHOD=PUSH_MESSAGE
Untuk menggunakan line notify:
Callback Url
: RUMORS_LINE_BOT_URL
/authcallback /line_notify.env
, set 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/
Anda dapat mengatur titik masuk halaman pengaturan ( LIFF_URL
? P = pengaturan) di manajer akun -> menu kaya
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
Rumor-line-Bot menggunakan layanan Google Cloud yang diautentikasi dan diizinkan menggunakan akun Google Cloud Service dan kredensial default aplikasi.
Harap buat akun layanan di bawah proyek, unduh kuncinya dan gunakan GOOGLE_APPLICATION_CREDENTIALS
env var untuk menyediakan jalur ke kunci akun layanan yang diunduh Anda. Lihat dokumentasi untuk detail.
Kami menggunakan dialogflow untuk mendeteksi jika pengguna mencoba untuk mengobrol. Jika input pengguna cocok dengan salah satu niat dialogFlow, kami dapat secara langsung mengembalikan respons yang telah ditentukan dalam maksud itu.
Untuk menggunakan dialogflow, silakan lakukan pengaturan berikut:
dialogflow.sessions.detectIntent
.DAILOGFLOW_LANGUAGE
: kosong ke bahasa default agen, atau Anda dapat menentukan bahasa.DAILOGFLOW_ENV
: default ke draft agen, atau Anda dapat membuat versi yang berbeda. Buat Dimemsion Kustom (Lingkup Pengguna) untuk Message Source
, dan metriks kustom (Hit Scope) untuk Group Members Count
. Keduanya indeks default adalah 1. Jika indeks yang dibuat GA bukan 1, temukan cd1
dan cm1
dalam kode dan mengubahnya menjadi cd$theIndexGACreated
dan cm$theIndexGACreated
masing -masing.
Gunakan npm run typecheck
untuk memeriksa jenis; Gunakan npm run typegen
untuk menghasilkan jenis dari skema GraphQL.
Siapkan file .env
(yang harus identik dengan lingkungan penyebaran Anda) dan menjalankan docker build .
untuk menghasilkan gambar Docker.
.env
akan disalin ke gambar pembangun untuk menghasilkan file statis Liff dengan env. Saat membangun gambar, Anda dapat memasukkan "variabel waktu build" (dilambangkan dalam .env.sample
) di .env
untuk memastikan bahwa tidak ada kredensial server yang bocor dalam kode klien yang dibangun.
Karena gambar Docker yang dibangun akan mengkodekan URL publik ke dalam file yang dibangun secara statis, variabel waktu pembuatan ini ketika kita menjalankan gambar sebagai wadah. Oleh karena itu, setiap lingkungan penyebaran yang terpisah akan membutuhkan build yang terpisah dari gambar.
Anda dapat menguji gambar yang dibangun secara lokal menggunakan docker-compose.yml
; Cukup buka komentar bagian bot garis dan berikan nama gambar yang dibangun.
Untuk produksi, silakan lihat Rumor-Diploy untuk sampel docker-coompose.yml
yang menjalankan gambar tersebut.
Kami mendorong variabel dan acara di dataLayer
Tag Manager Google ketika pengguna berinteraksi dengan LIFF.
Anda dapat menyiapkan pengaturan berikut di file .env
:
GTM_ID
: ID Kontainer Manajer Tag Google ( GTM-XXXXXXX
) Aplikasi akan memecat acara kustom berikut di GTM dataLayer
:
dataLoaded
- Saat data dimuat dalam artikel, komentar atau umpan balik LIFF.routeChangeComplete
- Saat LIFF dimuat atau mengubah jalur.feedbackVote
- Ketika pengguna mengirimkan umpan balik.chooseArticle
- Ketika pengguna memilih artikel dalam artikel LIFF. Juga, itu akan mendorong variabel kustom berikut ke dataLayer
;
pagePath
- Set saat acara routeChangeComplete
api. Jalur halaman dari router Liff.userId
- Set setelah LIFF mendapat token ID dan Decodes Line User ID di dalam.articleId
dan replyId
: Tetapkan pada artikel, komentar, dan umpan balik onMount()
siklus hidup dipanggil. Atau saat acara chooseArticle
dipecat.doc
- Set saat acara dataLoaded
Fires. Konten yang dimuat sendiri di objek (artikel dalam artikel LIFF, komentar dalam komentar LIFF dan umpan balik dalam umpan balik LIFF). Format Acara Terkirim: Event category
/ Event label
Event action
/ Acara Acara
Kami menggunakan Message Source
Dimensi (Dimemsion Kustom1) untuk mengklasifikasikan berbagai sumber acara
user
untuk 1 lawan 1 pesanroom
| group
untuk pesan grupUserInput
/ MessageType
/
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
untuk setiap artikel yang ditemukanUserInput
/ ArticleSearch
/ ArticleNotFound
UserInput
/ ArticleSearch
/ ArticleFoundButNoHit
UserInput
/ IsForwarded
/ Yes
| No
UserInput
/ IsCooccurrence
/ Yes
| No
UserInput
/ ChatWithBot
/
Article
/
Selected
Reply
/ Search
/
untuk setiap balasanArticle
/ NoReply
/
Reply
/ Selected
/
Reply
/ Type
/
UserInput
/ Feedback-Vote
/ /
/feedback/yes
atau /feedback/no
juga dikirim.Article
/ Create
/ Yes
Article
/ Create
/ No
Article
/ ProvidingReason
/
/reason
juga dikirim./articles
dikirimutm_source=rumors-line-bot&utm_medium=richmenu
utm_source=rumors-line-bot&utm_medium=push
LIFF
/ ChooseArticle
/
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
/
Group
/ Join
/ 1
( Event category
/ Event action
/ Event value
)Group Members Count
(Metric1 khusus) untuk merekam anggota grup saat Chatbot bergabung.Group
/ Leave
/ -1
( Event category
/ Event value
Event action
)Catatan:
- Kami menetapkan nilai acara GA 1 sebagai bergabung, -1 sebagai cuti. Untuk mengetahui total grup menghitung chatbot saat ini bergabung, Anda dapat langsung melihat nilai peristiwa total (detail lihat jumlah implisit).
- Untuk mengetahui suatu grup saat ini bergabung atau berdaun, Anda harus menemukan tindakan
Join
terakhir atauLeave
Client Id
.- Juga, Anda harus menemukan tindakan
Join
terakhir dariClient Id
untuk mendapatkanGroup Members Count
yang lebih akurat.Group Members Count
hanya direkam ketika Chatbot bergabung dengan grup, untuk mengetahui jumlah yang tepat, Anda harus langsung mendapatkannya dari Line Messaging-API.
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
untuk setiap artikel yang ditemukanArticle
/
Selected
Reply
/ Selected
/
UserInput
/ Intro
/ContentProxy
/ Forward
/
/
(Nilai) LICENSE
menentukan perjanjian lisensi untuk kode sumber di repositori ini.
LEGAL.md
adalah perjanjian pengguna untuk pengguna situs web COFACTS.