メッセージにインターネットの噂が含まれているかどうかをチェックするラインボット。
これは真的假的。のサブプロジェクトの1つです
この状態図は、ラインボットがユーザーにどのように話し合うかを説明しています。
噂ラインボットを開発するには、次の設定を完了する必要があります。
このリポジトリと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 Tag Manager ID。イベントと変数については、 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 Serverと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
が他の人に占有されていない限り、ラインチャネル設定に繰り返しコピーパスティングしないことを意味します)。
メッセージAPIチャンネルの内部ライン開発者コンソール、メッセージAPI> WebHook設定の下で、 WebHook URLを${ngrok_url}/callback
に設定し、 Webhookを使用してオンにします。 [確認]をクリックして、ローカルマシンに正常に接続されていることを確認します。
記事と否定的なフィードバックを送信する際に、ユーザーの理由を収集するためにLIFFを使用しています。
LIFFを開発する必要がない場合は、LIFFサイトのステージングにリンクする.env.sample
で提供されるLIFF_URL
直接使用できます。
LIFFを変更する場合は、次の手順に従う必要がある場合があります。
LIFFアプリを作成するには、公式文書に基づいて指示に従ってください。
chat_message.write
in scope(liff for liff for sendメッセージ)を選択して、liff urlを取得した後、 LIFF_URL
として.env
に配置します。Endpoint URL
設定してChabbot Endpointで開始し、 /liff/index.html
をpostfixとして追加します。 liffを開発するには、 npm run dev
の後、dev server(http:// localhost:5001)または生産チャットボットサーバーの/liff/index.html
でアクセスできます。
開発モードでは、 localhost:
(デフォルトに8080
)にWebpack-dev-serverをスピンし、チャットボットサーバーの/liff
はすべての要求をWebpack-dev-serverにプロキシします。
ブラウザでリフを開発するためのヒントは次のとおりです。
https:///liff/index.html?p=&...
デスクトップブラウザーにアクセスしてください。liff.logout()
入力して、再ロギンをトリガーする必要があります。 liff.init()
引き続きデスクトップブラウザで動作するため、アプリがレンダリングされ、デスクトップでWebレイアウトをデバッグできます。ただし、 liff.sendMessages()
機能しません。 liff.closeWindow()
、ブラウザウィンドウがログインリダイレクトを通過した場合でも機能しません。
Line Bot Serverは、ラインチャットボットに固有のGraphQL APIとAPIを補助するグラフクルサーバーを起動します。
APIの更新を補助するときはいつでも、 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
が表示された場合は、 liff.init
関数コールをコンパイルされたJSバイナリで検索し、liff IDがliff URLと一致しているかどうかを確認してください。これはhttps://liff.line.me/
。
LIFF IDは、ビルド中にWebPack Defineプラグインを使用して設定されます。したがって、LIFFバイナリを再構築せずに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では、 i18n/
ディレクトリの下に存在するen_US
、 zh_TW
、またはその他の言語コードのいずれかにLOCALE
設定してください。
代わりにDockerを使用してビルドしたい場合は、DockerFileを変更して目的のLOCALE
を含める必要がある場合があります。
前提条件:
プッシュメッセージを使用するには:in .env
ファイル、 NOTIFY_METHOD=PUSH_MESSAGE
を設定します
Line Notifyを使用するには:
Callback Url
: RUMORS_LINE_BOT_URL
/authcallback /line_notifyをセットアップします.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)を設定できます
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
Rumors-line-botは、Google Cloud Serviceアカウントとアプリケーションのデフォルトの資格情報を使用して認証および承認されたGoogle Cloud Servicesを使用しています。
プロジェクトの下にサービスアカウントを作成し、キーをダウンロードし、 GOOGLE_APPLICATION_CREDENTIALS
Env varを使用して、ダウンロードしたサービスアカウントキーへのパスを提供します。詳細については、ドキュメントを参照してください。
DialOgFlowを使用して、ユーザーがチャットを試みようとしているかどうかを検出します。ユーザー入力がDialogFlowの意図のいずれかと一致する場合、その意図で事前定義された応答を直接返すことができます。
DialogFlowを使用するには、次のセットアップを実行してください。
dialogflow.sessions.detectIntent
許可があることを確認してください。DAILOGFLOW_LANGUAGE
:エージェントのデフォルト言語に空いているか、言語を指定できます。DAILOGFLOW_ENV
:デフォルトでドラフトエージェントになるか、異なるバージョンを作成できます。Message Source
のカスタム(ユーザースコープ)ディメンションと、 Group Members Count
のカスタム(ヒットスコープ)メトリックスを作成します。どちらもデフォルトのインデックスが1です。作成したインデックスGAが1でない場合、コードでcd1
とcm1
見つけて、それぞれcd$theIndexGACreated
に変更し、 cm$theIndexGACreated
に変更します。
npm run typecheck
使用してタイプを確認します。 npm run typegen
使用して、GraphQLスキーマからタイプを生成します。
.env
ファイル(展開環境と同一である必要があります)を準備し、 docker build .
Docker画像を生成します。
.env
Builder画像にコピーされ、ENVを使用してLIFF静的ファイルを生成します。画像を構築する場合、「ビルドタイム変数」( .env.sample
で示されている)を.env
に含めるだけで、構築されたクライアントコードにサーバーの資格情報が漏れないようにします。
構築されたDocker画像はパブリックURLを静的に構築されたファイルにエンコードするため、これらのビルドタイム変数はコンテナとして画像を実行するときに使用します。したがって、個別の展開環境には、画像の個別のビルドが必要になります。
docker-compose.yml
使用して、構築された画像をローカルにテストできます。ラインボットセクションを除外して、構築された画像名を提供します。
制作については、そのような画像を実行するサンプルdocker-coompose.yml
については、噂を展開することをご覧ください。
ユーザーがLIFFと対話するときに、Google Tag ManagerのdataLayer
で変数とイベントをプッシュします。
次のセットアップを.env
ファイルで準備できます。
GTM_ID
:GoogleタグマネージャーコンテナID( GTM-XXXXXXX
)アプリケーションは、GTM dataLayer
で次のカスタムイベントを起動します。
dataLoaded
データが記事にロードされている場合、コメントまたはフィードバックLIFF。routeChangeComplete
リフがロードされたり、パスを変更したりした場合。feedbackVote
ユーザーがフィードバックを送信するとき。chooseArticle
ユーザーが記事liffで記事を選択したとき。また、次のカスタム変数をdataLayer
にプッシュします。
pagePath
-RegeChangeCompleteイベントrouteChangeComplete
発火するときに設定します。 Liffのルーターからのページパス。userId
-liffがIDトークンを取得し、内部のユーザーIDをデコードした後に設定します。articleId
and replyId
:記事、コメント、フィードバックonMount()
Lifecycleが呼び出されます。または、 chooseArticle
イベントが解雇されたとき。doc
dataLoaded
イベントが発射されたときに設定します。ロードされたコンテンツ自体はオブジェクトにあります(記事のliffの記事、コメントliffのコメント、フィードバックliffのフィードバック)。 送信イベント形式: Event category
/ Event action
/ Event label
Dimension Message Source
(カスタム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
のようなURLパラメーション、 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
(カスタムメトリック1)。Group
/ Leave
/ -1
( Event category
/ Event action
/ Event value
)注記:
- GAイベント値1を結合として設定し、-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
/
/
(値) LICENSE
このリポジトリのソースコードのライセンス契約を定義します。
LEGAL.md
、CoFACTS Webサイトユーザーのユーザー契約です。