Line Bot, который проверяет, содержит ли сообщение слухи в Интернете.
Это один из субпроектов 真的假的。
Эта диаграмма состояния описывает, как бот линии разговаривает с пользователями:
Разработка слухов требует, чтобы вы закончили следующие настройки.
После клонирования этого хранилища и компакт -диска в каталог проектов, затем установите зависимости.
$ git clone --recursive [email protected]:cofacts/rumors-line-bot.git # --recursive for the submodules
$ cd rumors-line-bot
Пожалуйста, выполните все шаги в официальном учебном пособии.
Создайте файл .env
из шаблона .env.sample
, по крайней мере, заполните:
API_URL=https://dev-api.cofacts.tw/graphql
LINE_CHANNEL_SECRET=
LINE_CHANNEL_TOKEN=
LINE_LOGIN_CHANNEL_ID=
LIFF_URL=
Другие настраиваемые env vars:
REDIS_URL
: если не указано, redis://127.0.0.1:6379
используется.PORT
: какой порт сервер линии бот будет прослушать.GTM_ID
: идентификатор менеджера тегов Google. Для событий и переменных мы подталкиваем к dataLayer
, см. Раздел «Google Tag Manager» ниже.DEBUG_LIFF
: Отключает внешний браузер. Проверка в Liff. Полезно при отладке LIFF во внешнем браузере. Не включайте это на производство.RUMORS_LINE_BOT_URL
: Общественный URL -адрес сервера, который используется для создания URL -адресов изображения учебного пособия и URL -адреса обратного вызова Вам понадобится Node.JS
16+, чтобы продолжить.
$ npm i
Выверните периферийные устройства, такие как Redis и Mongodb, используя:
$ docker-compose up -d
Затем разверните приложение, включая сервер Chatbot и Webpack-Dev-Server для Liff, используя:
$ npm run dev
Сервер будет запущен на localhost:5001
(или PORT
который вы указали в вашем файле .env
.)
Если вы хотите остановить периферийные устройства, запустите docker-compose stop
.
Просто запустите npm test
. Он автоматически раскрутит вышеупомянутый докер и запустит модульные тесты.
Мы рекомендуем использовать ngrok
для создания публичного адреса, который направляет трафик с сервера Line на вашу локальную машину. С ngrok
на вашем пути, просто
$ ngrok http 5001
ngrok
даст вам публичный URL. Используйте это, чтобы установить URL -адрес вашего канала WebHook (см. Раздел «Консоль канала» в официальном учебном пособии).
Мы рекомендуем использовать файл конфигурации NGROK для настройки туннеля с фиксированным subdomain
. Таким образом, общедоступный URL может быть исправлен (означает отсутствие повторной копии на настройки канала!) До тех пор, пока subdomain
не занят другими.
Консоль Developers Inside Line в вашем канале API сообщения, в соответствии с API обмена сообщениями> Настройки WebHook Установите URL Webhook на ${ngrok_url}/callback
и включите использование WebHook . Нажмите «Проверьте», чтобы подтвердить, что он успешно подключен к вашей локальной машине.
Мы используем LIFF для сбора причин пользователя при отправке статьи и отрицательных отзывов.
Если вам не нужно разрабатывать LIFF, вы можете напрямую использовать LIFF_URL
предоставленную в .env.sample
, что связано с постановкой сайта Liff.
Если вы хотите изменить LIFF, вам может потребоваться выполнить эти шаги:
Чтобы создать приложения LIFF, пожалуйста, следуйте инструкциям в соответствии с официальным документом, который включает в себя
chat_message.write
В SCOPE (для LIFF отправлять сообщения) После получения URL LIFF, поместите LIFF_URL
в .env
Endpoint URL
, чтобы начать с вашей конечной точки Chabbot, и добавить /liff/index.html
в качестве Postfix. Чтобы разработать LIFF, после npm run dev
, он доступен в соответствии с /liff/index.html
из Dev Server (http: // localhost: 5001) или производственный сервер чат -бот.
В режиме разработки он вращает WebPack-Dev-Server на localhost:
(по умолчанию к 8080
) и /liff
of Proxies Server Server-все запросы на WebPack-Dev-Server.
Совет для развития LIFF в браузере:
https:///liff/index.html?p=&...
в браузере настольных компьютеров.liff.logout()
вручную в консоли JS, чтобы вызвать повторный логин. liff.init()
все равно будет работать в настольном браузере, так что приложение рендерирует, что позволяет нам отладить веб -макеты на рабочем столе. liff.sendMessages()
не будет работать, хотя. liff.closeWindow()
также не будет работать, если окно вашего браузера прошел через перенаправление входа в систему.
Сервер Line Bot запускает сервер graphQL, который уклоняется от CofActs GraphQL API и API, специфичный для чат -бота Line.
Всякий раз, когда CofActs обновляется API, используйте npm run cofactsapi
чтобы принести последнюю схему API COFACTS.
Во время разработки используйте следующую команду, чтобы запустить сборник рассказов на вашей локальной машине:
npm run storybook # Then visit http://localhost:6006
Вы также можете посетить https://cofacts.github.io/rumors-line-bot для создания сборника рассказов на master
филиале.
При производстве файлы LIFF собираются в каталог /liff
и служат статическими файлами сервером Chatbot.
Если вы получите 400 bad request
в Liff, пожалуйста, найдите вызов функции liff.init
в составленном JS Binary и посмотрите, соответствует ли Liff ID ваш URL -адрес Liff, который должен быть пути без лидирования https://liff.line.me/
Полем
Идентификатор LIFF устанавливается с использованием плагина WebPack Define во время сборки, тем самым обмениваясь переменной ENV LIFF без восстановления двоичных файлов LIFF, вызовет 400 плохой запрос.
Мы используем TTAG для поддержки времени сборки I18N для чат-бота.
Пожалуйста, обратитесь к документации TTAG для аннотирования строк для перевода.
Чтобы извлечь аннотированные строки в файлы перевода, используйте:
$ npm run i18n:extract
Файлы перевода расположены под i18n/
, в формате GetText PO.
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, вам может потребоваться изменить DockerFile, чтобы включить желаемую LOCALE
.
Предварительные условия:
Для использования Push NOTIFY_METHOD=PUSH_MESSAGE
: в .env
Для использования линии уведомления:
Callback Url
: RUMORS_LINE_BOT_URL
/authcallback /line_notify.env
file, наборы 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 = настройка) в менеджере учетных записей -> Rich Menu
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
Слухи-Line-Bot использует Google Cloud Services, которые аутентифицируются и авторизованы с использованием учетных записей Google Cloud Services и приложений по умолчанию.
Пожалуйста, создайте учетную запись службы в рамках проекта, загрузите его ключ и используйте GOOGLE_APPLICATION_CREDENTIALS
Env var, чтобы предоставить путь к загруженной ключке учетной записи службы. Смотрите документацию для деталей.
Мы используем Dialogflow, чтобы обнаружить, пытается ли пользователь Chit-Chat. Если ввод пользователя соответствует любому из намерений диалога, мы можем непосредственно вернуть предопределенные ответы в этом намерении.
Чтобы использовать диалог, сделайте следующую настройку:
dialogflow.sessions.detectIntent
разрешение.DAILOGFLOW_LANGUAGE
: пусто для языка по умолчанию агента, или вы можете указать язык.DAILOGFLOW_ENV
: по умолчанию, чтобы набросить агент, или вы можете создавать разные версии. Создайте индивидуальную (пользовательская область) амортизация для Message Source
и пользовательский Metrix для Group Members Count
. Оба они индекс по умолчанию равны 1. Если созданные индексы не являются 1, найдите cd1
и cm1
в коде и измените их на cd$theIndexGACreated
и cm$theIndexGACreated
соответственно.
Используйте npm run typecheck
чтобы проверить типы; Используйте npm run typegen
для генерации типа из схемы GraphQL.
Подготовьте файл .env
(который должен быть идентичен вашей среде развертывания) и запустите docker build .
Чтобы сгенерировать изображение Docker.
.env
будет скопирован на изображение застройщика, чтобы сгенерировать статический файл LIFF с помощью ENV. При создании изображения вы можете просто включить «переменные времени настройки» (обозначенные в .env.sample
) в .env
чтобы гарантировать, что в застроенном клиентском коде не протекает учетные данные сервера.
Поскольку созданные изображения Docker будут кодировать публичные URL-адреса в статически построенные файлы, эти переменные времени сборки, когда мы запускаем изображение в качестве контейнера. Следовательно, каждая отдельная среда развертывания потребует отдельной сборки изображения.
Вы можете проверить встроенное изображение локально, используя docker-compose.yml
; Просто расстроен раздел линии бота и предоставьте встроенное имя изображения.
Для производства, пожалуйста, смотрите слухи о том, как образец docker-coompose.yml
, который управляет таким изображением.
Мы разжигаем переменные и события в dataLayer
Google Tag Manager, когда пользователь взаимодействует с Liff.
Вы можете подготовить следующую настройку в файле .env
:
GTM_ID
: идентификатор контейнера Manager Google Tag ( GTM-XXXXXXX
) Приложение запустит следующие пользовательские события в GTM dataLayer
:
dataLoaded
- Когда данные загружаются в статье, комментариях или обратной связи Liff.routeChangeComplete
- Когда Liff загружается или изменяет путь.feedbackVote
: когда пользователь подает отзыв.chooseArticle
- Когда пользователь выбирает статью в статьях Liff. Кроме того, он подтолкнет следующую пользовательскую переменную в dataLayer
;
pagePath
- Установите при стрельбе routeChangeComplete
Event. Путь страницы от маршрутизатора Лиффа.userId
- установлен после того, как Liff получает токен идентификатор и декодирует линейный идентификатор пользователя внутри.articleId
и replyId
: установлен на статье, комментариях и отзывах onMount()
жизненный цикл. Или когда выстрел chooseArticle
целеустремленность.doc
- Установите, когда нагружены dataLoaded
Event Fire. Сам загруженный контент в объекте (статья в статье Liff, комментарий в комментарии Liff и обратная связь в отзывах Liff). Отправленный формат событий Event label
Event category
Event action
Мы используем Message Source
измерения (пользовательский Dimemsion1) для классификации различных источников событий
user
для 1 на 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_source
, utm_medium
./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), чтобы записать членов группы, учитывая, когда присоединился Chatbot.Group
/ Leave
/ -1
( Event category
/ Event action
/ Event value
)Примечание:
- Мы установили значение события GA как присоединение, -1 в качестве отпуска. Чтобы узнать общее количество групп, подсчитанное Chatbot, в настоящее время присоединившись, вы можете напрямую увидеть общее значение события (подробности см. Неявное количество).
- Чтобы узнать, что группа в настоящее время присоединяется или лишена, вы должны найти последнее
Join
илиLeave
действиеClient Id
.- Кроме того, вы должны найти последнее действие
Join
Client Id
, чтобы получить более точныеGroup Members Count
.Group Members Count
записывается только тогда, когда Chatbot присоединился к группе, чтобы узнать точное количество, вы должны напрямую получить его от линейных сообщений-API.
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
для каждой найденной статьиArticle
/ Selected
/
Reply
/ Selected
/
UserInput
/ Intro
/ContentProxy
/ Forward
/
/
(значение) LICENSE
определяет лицензионное соглашение для исходного кода в этом хранилище.
LEGAL.md
- это пользовательское соглашение для пользователей веб -сайта COFACTS.