Ligner le bot qui vérifie si un message contient des rumeurs Internet.
Ceci est l'un des sous-projets de 真的假的。
Ce diagramme d'état décrit comment le bot de ligne parle aux utilisateurs:
Le développement de rumeurs-ligne-bot vous oblige à terminer les paramètres suivants.
Après cloner ce référentiel et CD dans le répertoire de projet, puis installez les dépendances.
$ git clone --recursive [email protected]:cofacts/rumors-line-bot.git # --recursive for the submodules
$ cd rumors-line-bot
Veuillez suivre toutes les étapes du tutoriel officiel.
Créer un fichier .env
à partir du modèle .env.sample
, au moins à remplir:
API_URL=https://dev-api.cofacts.tw/graphql
LINE_CHANNEL_SECRET=
LINE_CHANNEL_TOKEN=
LINE_LOGIN_CHANNEL_ID=
LIFF_URL=
D'autres envars Env personnalisables sont:
REDIS_URL
: s'il n'est pas donné, redis://127.0.0.1:6379
est utilisé.PORT
: Quel port le serveur de bot ligne écoutera.GTM_ID
: ID Google Tag Manager. Pour les événements et variables que nous poussons vers dataLayer
, voir la section "Google Tag Manager" ci-dessous.DEBUG_LIFF
: désactive la vérification externe du navigateur dans Liff. Utile lors du débogage du Liff dans le navigateur externe. N'activez pas cela sur la production.RUMORS_LINE_BOT_URL
: URL publique du serveur qui est utilisé pour générer des URL d'image du didacticiel et une URL de rappel AUTH de Ligne Notify. Vous aurez besoin Node.JS
16+ pour continuer.
$ npm i
Tournez les périphériques comme Redis et MongoDB en utilisant:
$ docker-compose up -d
Ensuite, tournez l'application, y compris le serveur Chatbot et le serveur WebPack-Dev pour Liff, en utilisant:
$ npm run dev
Le serveur sera démarré sur localhost:5001
(ou le PORT
que vous avez spécifié dans votre fichier .env
.)
Si vous souhaitez arrêter les périphériques, exécutez docker-compose stop
.
Exécutez simplement npm test
. Il révèlera automatiquement le docker susmentionné et exécutera des tests unitaires.
Nous vous recommandons d'utiliser ngrok
pour créer une adresse publique qui dirige le trafic du serveur Line vers votre machine locale. Avec ngrok
sur votre chemin, juste
$ ngrok http 5001
ngrok
vous donnera une URL publique. Utilisez-le pour définir l'URL WebHook de votre chaîne (voir la section "Console de canal" en ligne de didacticiel officiel).
Nous vous recommandons d'utiliser le fichier de configuration NGROK pour configurer un tunnel avec un subdomain
fixe. De cette façon, l'URL publique peut être corrigée (signifie aucune copie répétitive aux paramètres de canal de ligne!) Tant que le subdomain
n'est pas occupé par d'autres.
Inside Line Developers Console dans votre canal API de message, sous API de messagerie> Paramètres WebHook Définissez l' URL de WEBHOOK sur ${ngrok_url}/callback
et activez l'utilisation de webhook . Cliquez sur Vérifier pour confirmer qu'il est connecté avec succès à votre machine locale.
Nous utilisons Liff pour collecter la raison de l'utilisateur lors de la soumission des commentaires de l'article et des commentaires négatifs.
Si vous n'avez pas besoin de développer du Liff, vous pouvez utiliser directement LIFF_URL
fourni dans .env.sample
, qui relie à la mise en scène du site Liff.
Si vous souhaitez modifier le Liff, vous devrez peut-être suivre ces étapes:
Pour créer des applications Liff, veuillez suivre les instructions sous un document officiel, qui implique
chat_message.write
dans Scope (pour que Liff puisse envoyer des messages) après avoir acquis URL Liff, placez-le dans .env
en LIFF_URL
.Endpoint URL
pour commencer par votre point de terminaison Chabbot et ajoutez /liff/index.html
comme postfix. Pour développer du Liff, après npm run dev
, il est accessible sous /liff/index.html
de Dev Server (http: // localhost: 5001) ou Production Chatbot Server.
En mode développement, il fait tourner un WebPack-Dev-Server sur localhost:
(par défaut au 8080
), et /liff
de chatbot serveur proxys toutes les demandes du Webpack-Dev-Server.
Un conseil pour développer un liff dans le navigateur est:
https:///liff/index.html?p=&...
dans le navigateur de bureau.liff.logout()
manuellement dans la console JS pour déclencher une réexploitation. liff.init()
fonctionnerait toujours dans le navigateur de bureau, afin que l'application soit en nous permettant de déboguer les dispositions Web sur le bureau. liff.sendMessages()
ne fonctionnerait pas, cependant. liff.closeWindow()
ne fonctionnera pas non plus si la fenêtre de votre navigateur est passée par des redirectes de connexion.
Le serveur Line Bot démarre un serveur GraphQL qui stiche Cofacts GraphQL API et API spécifique au chatbot linéaire.
Chaque fois que les mises à jour de l'API CoFacts, utilisez npm run cofactsapi
pour récupérer le dernier schéma API CoFacts.
Pendant le développement, utilisez la commande suivante pour démarrer un livre de contes sur votre machine locale:
npm run storybook # Then visit http://localhost:6006
Vous pouvez également visiter https://cofacts.github.io/rumors-line-bot pour le livre de contes pré-construit sur master
Branch.
En production, les fichiers Liff sont compilés vers le répertoire /liff
et servaient de fichiers statiques par le serveur de chatbot.
Si vous obtenez 400 bad request
in Liff, veuillez rechercher liff.init
Fonction Appel dans JS Binary compilé et voir si Liff ID est cohérent avec votre URL de Liff, qui devrait être le chemin sans diriger https://liff.line.me/
.
L'ID Liff est défini à l'aide du plugin de définition de WebPack pendant la construction, l'échange de variable Env URL Liff sans reconstruire les binaires de Liff provoquera 400 mauvaises demande.
Nous utilisons TTAG pour prendre en charge la création de Build-Time i18n pour le chatbot.
Veuillez vous référer à la documentation TTAG pour que les chaînes annotantes se traduisent.
Pour extraire les chaînes annotées dans les fichiers de traduction, utilisez:
$ npm run i18n:extract
Les fichiers de traduction sont situés sous i18n/
, au format GetText PO.
en_US.po
: Étant donné que la langue utilisée dans le code est déjà anglaise, ce fichier de traduction vide existe pour simplifier les paramètres.zh_TW.po
: traduction traditionnelle chinoise.ja.po
: Traduction japonaise. Vous pouvez le remplacer par n'importe quelle langue que vous souhaitez prendre en charge, en tirant parti de la commande GetText msginit
.
Vous devrez modifier i18n:extract
et i18n:validate
le script dans package.json
pour refléter le changement des paramètres régionaux.
Par défaut, le chatbot sera construit dans les paramètres régionaux en_US
.
Sur Heroku, veuillez définir LOCALE
sur l'un des en_US
, zh_TW
ou tout autre code linguistique qui existe sous i18n/
répertoire.
Si vous souhaitez construire à la place en utilisant Docker, vous devrez peut-être modifier Dockerfile pour inclure les LOCALE
souhaités.
Prérequis:
Pour utiliser le message push: dans .env
File, définit NOTIFY_METHOD=PUSH_MESSAGE
Pour utiliser LIGNE NOTIFY:
Callback Url
: RUMORS_LINE_BOT_URL
/ authcallback / line_notify.env
, sets 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/
Vous pouvez configurer un point d'entrée de page de paramètre ( LIFF_URL
? P = paramètre) dans le gestionnaire de compte -> Menu riche
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
Rumors-line-bot utilise Google Cloud Services qui est authentifié et autorisé à l'aide des comptes de services Google Cloud et des informations d'identification par défaut d'application.
Veuillez créer un compte de service dans le cadre du projet, télécharger sa clé et utiliser GOOGLE_APPLICATION_CREDENTIALS
Env Var pour fournir le chemin d'accès à la clé de votre compte de service téléchargé. Voir la documentation pour plus de détails.
Nous utilisons DialogFlow pour détecter si l'utilisateur essaie de chit-chat. Si l'entrée de l'utilisateur correspond à l'une des intentions de dialogue, nous pouvons renvoyer directement les réponses prédéfinies dans cette intention.
Pour utiliser DialogFlow, veuillez effectuer la configuration suivante:
dialogflow.sessions.detectIntent
.DAILOGFLOW_LANGUAGE
: vide à la langue par défaut de l'agent, ou vous pouvez spécifier une langue.DAILOGFLOW_ENV
: par défaut à l'agent de projet, ou vous pouvez créer différentes versions. Créez une dimème personnalisée (portée de l'utilisateur) pour Message Source
et une métrix personnalisée (Hit Scope) pour Group Members Count
. Les deux index par défaut sont 1. Si les index GA créés ne sont pas 1, recherchez cd1
et cm1
dans le code et les modifiez en cd$theIndexGACreated
et cm$theIndexGACreated
respectivement.
Utilisez npm run typecheck
pour vérifier les types; Utilisez npm run typegen
pour générer le type à partir du schéma GraphQL.
Préparez le fichier .env
(qui devrait être identique à votre environnement de déploiement) et exécutez docker build .
Pour générer une image Docker.
.env
sera copié sur l'image du constructeur pour générer un fichier statique Liff avec l'env. Lors de la création d'images, vous pouvez simplement inclure les "variables de construction" (indiquées dans .env.sample
) dans .env
pour s'assurer qu'aucune information de serveur n'est divulguée dans le code client construit.
Étant donné que les images docker construites codentont les URL publiques dans des fichiers construits statiquement, ces variables de build-temps lorsque nous exécutons l'image en tant que conteneur. Par conséquent, chaque environnement de déploiement distinct nécessitera une construction distincte de l'image.
Vous pouvez tester l'image construite localement à l'aide du docker-compose.yml
; Il suffit de décommenter la section Bot de ligne et de fournir le nom d'image construit.
Pour la production, veuillez consulter les rumeurs-déploiement pour un exemple docker-coompose.yml
qui exécute une telle image.
Nous poussons les variables et les événements dans dataLayer
de Google Tag Manager lorsque l'utilisateur interagit avec Liff.
Vous pouvez préparer la configuration suivante dans le fichier .env
:
GTM_ID
: ID de conteneur Google Tag Manager ( GTM-XXXXXXX
) L'application licenciera les événements personnalisés suivants dans GTM dataLayer
:
dataLoaded
- Lorsque les données sont chargées dans un article, des commentaires ou des commentaires.routeChangeComplete
- Lorsque le Liff est chargé ou modifie le chemin.feedbackVote
- Lorsque l'utilisateur soumet une rétroaction.chooseArticle
- Lorsque l'utilisateur choisit un article dans Articles Liff. Il poussera également la variable personnalisée suivante vers dataLayer
;
pagePath
- Définissez lorsque les événements routeChangeComplete
sont incendiés. Le chemin de la page du routeur de Liff.userId
- Définir après que Liff obtient un jeton ID et décode l'ID utilisateur de ligne à l'intérieur.articleId
et replyId
: Définir sur l'article, le commentaire et les commentaires onMount()
cycle de vie sur le cycle de vie. Ou lorsque l'événement chooseArticle
est licencié.doc
- Définissez lorsque l'événement dataLoaded
les tirs. Le contenu chargé lui-même dans l'objet (article dans l'article Liff, commentaire dans le liff de commentaires et commentaires dans Feedback Liff). Format d'événement envoyé: Event category
/ Event label
Event action
/ événement de l'événement
Nous utilisons Message Source
dimension (DIMEMSION1 CUSTOM) pour classer différentes sources d'événements
user
pour 1 sur 1 messagesroom
| group
pour les messages de groupeUserInput
/ MessageType
/
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
pour chaque article trouvéUserInput
/ ArticleSearch
/ ArticleNotFound
UserInput
/ ArticleSearch
/ ArticleFoundButNoHit
UserInput
/ IsForwarded
/ Yes
| No
UserInput
/ IsCooccurrence
/ Yes
| No
UserInput
/ ChatWithBot
/
Article
/ Selected
/
Reply
/ Search
/
pour chaque réponsesArticle
/ NoReply
/
Reply
/ Selected
/
Reply
/ Type
/
UserInput
/ Feedback-Vote
/ /
/feedback/yes
ou /feedback/no
est également envoyée.Article
/ Create
/ Yes
Article
/ Create
/ No
Article
/ ProvidingReason
/
/reason
est également envoyée./articles
sont envoyésutm_source=rumors-line-bot&utm_medium=richmenu
utm_source=rumors-line-bot&utm_medium=push
LIFF
/ ChooseArticle
/
utm_source
, utm_medium
s'appliquent également./setting
est envoyé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 personnalisé) pour enregistrer les membres du groupe compter lorsque Chatbot s'est joint.Group
/ Leave
/ -1
( Event category
/ Event action
/ Event value
)Note:
- Nous définissons la valeur de l'événement GA 1 comme join, -1 comme laisse. Pour savoir que les groupes totaux comptent le chatbot actuellement joint, vous pouvez voir directement la valeur totale de l'événement (détails voir le nombre implicite).
- Pour savoir qu'un groupe est actuellement rejoint ou élué, vous devriez trouver la dernière
Join
ouLeave
l'action de l'Client Id
.- En outre, vous devriez trouver la dernière action
Join
de l'Client Id
pour obtenir unGroup Members Count
plus précis.Group Members Count
n'est enregistré que lorsque Chatbot a rejoint le groupe, pour connaître le nombre exact, vous devez l'obtenir directement à partir de la messagerie de ligne-API.
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
pour chaque article trouvéArticle
/ Selected
/
Reply
/ Selected
/
UserInput
/ Intro
/ContentProxy
/ Forward
/
/
(valeur) LICENSE
définit le contrat de licence pour le code source dans ce référentiel.
LEGAL.md
est l'accord d'utilisateur pour les utilisateurs du site Web de Cofacts.