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=
Vars Env الأخرى القابلة للتخصيص هي:
REDIS_URL
: إذا لم يتم إعطاء ، يتم استخدام redis://127.0.0.1:6379
.PORT
: أي منفذ سيستمع خادم BOT.GTM_ID
: معرف مدير علامة Google. للاطلاع على الأحداث والمتغيرات ، ندفع إلى dataLayer
، راجع قسم "Google Tag Manager" أدناه.DEBUG_LIFF
: تعطيل المتصفح الخارجي تحقق في LIFF. مفيد عند تصحيح الأخطاء في المتصفح الخارجي. لا تمكن هذا من الإنتاج.RUMORS_LINE_BOT_URL
: عنوان URL العام الخادم الذي يتم استخدامه لإنشاء عناوين URL لتصوير الصور التعليمية وعنوان الاتصال الخاص بـ Auth Callback لإخطار الخط. ستحتاج إلى Node.JS
16+ للمتابعة.
$ npm i
تدور فوق الأجهزة الطرفية مثل redis و mongodb باستخدام:
$ docker-compose up -d
ثم قم بتدوير التطبيق ، بما في ذلك خادم chatbot و webpack-dev-server for liff ، باستخدام:
$ npm run dev
سيتم بدء الخادم على localhost:5001
(أو PORT
الذي حددته في ملف .env
الخاص بك.)
إذا كنت ترغب في إيقاف الأجهزة الطرفية ، قم بتشغيل docker-compose stop
.
فقط قم بتشغيل npm test
. ستقوم تلقائيًا بتدوير اختبارات Docker المذكورة أعلاه وتشغيل الوحدة.
نوصي باستخدام ngrok
لإنشاء عنوان عام يوجه حركة المرور من خادم الخط إلى جهازك المحلي. مع ngrok
في طريقك ، فقط
$ ngrok http 5001
سوف يعطيك ngrok
عنوان URL العام. استخدم هذا لتعيين عنوان URL لـ WebHook لقنتك (انظر القسم "CHANNEL CONSOLE" في الخط التعليمي الرسمي).
نوصي باستخدام ملف تكوين NGROK لإعداد نفق مع subdomain
ثابت. وبهذه الطريقة ، يمكن إصلاح عنوان URL العام (يعني عدم وجود نسخ متكررة لإعدادات قناة الخط!) طالما أن subdomain
لا يشغله الآخرون.
وحدة تحكم مطوري الخطوط الداخلية في قناة واجهة برمجة تطبيقات الرسائل الخاصة بك ، ضمن إعدادات WebHook Mataging> قم بتعيين عنوان URL لـ WebHook على ${ngrok_url}/callback
واستخدم استخدام webhook . انقر فوق التحقق لتأكيد أنه يتم توصيله بنجاح بجهازك المحلي.
نحن نستخدم LIFF لجمع سبب المستخدم عند إرسال المقالة والتعليقات السلبية.
إذا لم تكن بحاجة إلى تطوير LIFF ، فيمكنك استخدام LIFF_URL
المقدمة مباشرة في .env.sample
، والتي ترتبط بموقع LIFF التدريجي.
إذا كنت ترغب في تعديل LIFF ، فقد تحتاج إلى اتباع هذه الخطوات:
لإنشاء تطبيقات LIFF ، يرجى اتباع التعليمات تحت المستند الرسمي ، والتي تتضمن
chat_message.write
في النطاق (حتى يرسل LIFF رسائل) بعد الحصول على عنوان URL LIFF ، ضعه في .env
كـ LIFF_URL
.Endpoint URL
للبدء بنقطة نهاية chabbot الخاصة بك ، وإضافة /liff/index.html
كـ postfix. لتطوير LIFF ، بعد npm run dev
، يمكن الوصول إليه تحت /liff/index.html
من Dev Server (http: // localhost: 5001) أو production chatbot server.
في وضع التطوير ، يدور خادم Webpack-Dev على localhost:
(افتراضي إلى 8080
) ، و /liff
of chatbot server وكل طلبات إلى حزمة الويب-DEV.
نصيحة لتطوير liff في المتصفح هي:
https:///liff/index.html?p=&...
في متصفح سطح المكتب.liff.logout()
يدويًا في وحدة التحكم في JS لتشغيل إعادة توصيل. سيظل liff.init()
يعمل في متصفح سطح المكتب ، بحيث يتم تقديم التطبيق ، مما يتيح لنا تصحيح تخطيطات الويب على سطح المكتب. liff.sendMessages()
لن يعمل ، رغم ذلك. لن يعمل liff.closeWindow()
إما إذا كانت نافذة المتصفح قد مررت بإعادة توجيه تسجيل الدخول.
يبدأ خادم BOT Line خادم GRATEQL الذي يقوم بتثبيط COFACTS GRAPHQL API و API محددة إلى chatbot السطر.
عندما تقوم 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 متسقًا مع عنوان URL LIFF الخاص بك ، والذي يجب أن يكون المسار دون قيادة https://liff.line.me/
.
يتم تعيين معرف LIFF باستخدام PODPACK DEFINE أثناء الإنشاء ، وبالتالي تبديل متغير env url LIFF دون إعادة بناء ثنائيات LIFF سيؤدي إلى 400 طلب سيء.
نستخدم TTAG لدعم وقت البناء I18N لـ chatbot.
يرجى الرجوع إلى وثائق TTAG لشرح سلاسل الترجمة.
لاستخراج السلاسل المشروحة إلى ملفات الترجمة ، استخدم:
$ npm run i18n:extract
توجد ملفات الترجمة تحت i18n/
، بتنسيق GetText PO.
en_US.po
: نظرًا لأن اللغة المستخدمة في الكود هي بالفعل الإنجليزية ، فإن ملف الترجمة الفارغ هذا موجود لتبسيط الإعدادات.zh_TW.po
: الترجمة الصينية التقليدية.ja.po
: الترجمة اليابانية. يمكنك استبدال هذا بأي لغة تريد دعمها ، من خلال الاستفادة من أمر getText msginit
.
ستحتاج إلى تغيير i18n:extract
و i18n:validate
البرنامج النصي في package.json
لتعكس تغيير اللغة.
بشكل افتراضي ، سيتم بناء chatbot تحت لغة en_US
.
على Heroku ، يرجى تعيين LOCALE
على واحدة من en_US
أو zh_TW
أو أي رمز لغة آخر موجود تحت i18n/
DIRECTORY.
إذا كنت ترغب في البناء باستخدام Docker بدلاً من ذلك ، فقد تحتاج إلى تعديل DockerFile لتضمين LOCALE
المطلوبة.
المتطلبات الأساسية:
لاستخدام رسالة الدفع: في ملف .env
، يعين NOTIFY_METHOD=PUSH_MESSAGE
لاستخدام خط الإخطار:
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 = الإعداد) في مدير الحساب -> القائمة الغنية
$ npm run notify
$ node build/scripts/scanRepliesAndNotify.js
تستخدم Rumors-Line-Bot خدمات Google Cloud Services التي يتم مصادقةها ومصرح بها باستخدام حسابات خدمة Google Cloud وبيانات الاعتماد الافتراضية للتطبيق.
يرجى إنشاء حساب خدمة ضمن المشروع ، وقم بتنزيل مفتاحه واستخدام GOOGLE_APPLICATION_CREDENTIALS
env var لتوفير المسار إلى مفتاح حساب الخدمة الذي تم تنزيله. انظر الوثائق لمزيد من التفاصيل.
نستخدم DialogFlow لاكتشاف ما إذا كان المستخدم يحاول Chit Chat. إذا كان إدخال المستخدم يطابق أيًا من نوايا الحوار ، فيمكننا إرجاع الاستجابات المحددة مسبقًا بشكل مباشر في تلك القصد.
لاستخدام DialogFlow ، يرجى القيام بالإعداد التالي:
dialogflow.sessions.detectIntent
إذن.DAILOGFLOW_LANGUAGE
: فارغة للغة الافتراضية للوكيل ، أو يمكنك تحديد لغة.DAILOGFLOW_ENV
: افتراضي ل Praph Agent ، أو يمكنك إنشاء إصدارات مختلفة. قم بإنشاء dimemsion مخصص (نطاق المستخدم) Message Source
، ومقياس مخصص (HIT SCOPE) Group Members Count
. كلاهما الفهرس الافتراضي هو 1. إذا لم تكن الفهارس التي تم إنشاؤها هي 1 ، فابحث عن cd1
و cm1
في الكود وقم بتغييرها إلى cd$theIndexGACreated
و cm$theIndexGACreated
على التوالي.
استخدم npm run typecheck
للتحقق من الأنواع ؛ استخدم npm run typegen
لإنشاء نوع من مخطط GraphQL.
قم بإعداد ملف .env
(الذي يجب أن يكون مطابقًا لبيئة النشر الخاصة بك) وتشغيل docker build .
لإنشاء صورة Docker.
سيتم نسخ .env
إلى صورة البناء لإنشاء ملف ثابت مع ENV. عند إنشاء الصورة ، يمكنك فقط تضمين "متغيرات وقت البناء" (المشار إليها في .env.sample
) في .env
للتأكد من عدم تسرب بيانات اعتماد الخادم في رمز العميل المبني.
نظرًا لأن صور Docker المصممة ستشفر عناوين URL العامة في ملفات مدمجة بشكل ثابت ، فإن متغيرات وقت الإنشاء هذه عندما ندير الصورة كحاوية. لذلك ، سوف تتطلب كل بيئة نشر منفصلة بناء منفصل للصورة.
يمكنك اختبار الصورة المصممة محليًا باستخدام docker-compose.yml
؛ فقط قم بإلغاء التخلص من قسم BOT وتوفير اسم الصورة المبني.
بالنسبة للإنتاج ، يرجى الاطلاع على شائعات-Deploy لعينة docker-coompose.yml
التي تدير هذه الصورة.
ندفع المتغيرات والأحداث في dataLayer
من Google Tag Manager عندما يتفاعل المستخدم مع LIFF.
يمكنك إعداد الإعداد التالي في ملف .env
:
GTM_ID
: معرف حاوية العلامة Google Tag ( GTM-XXXXXXX
) سيطرد التطبيق الأحداث المخصصة التالية في GTM dataLayer
:
dataLoaded
- عند تحميل البيانات في المقالة أو التعليق أو التعليقات.routeChangeComplete
- عند تحميل LIFF أو يغير المسار.feedbackVote
- عندما يقدم المستخدم ردود الفعل.chooseArticle
- عندما يختار المستخدم مقالًا في المقالات. أيضًا ، سوف يدفع المتغير المخصص التالي إلى dataLayer
؛
pagePath
- تعيين عند حرائق الحدث routeChangeComplete
. مسار الصفحة من جهاز توجيه Liff.userId
- تعيين بعد الحصول على رمز معرف معرف المعرف وفك تشفير معرف المستخدم في الداخل.articleId
replyId
: تم تعيينه على المقالة والتعليقات والتعليقات onMount()
تسمى دورة الحياة. أو عندما يتم إطلاق حدث chooseArticle
.doc
- تعيين عند حرائق الحدث dataLoaded
. المحتوى المحمّل نفسه في كائن (مقال في المقالة LIFF ، التعليق في التعليقات والتعليقات في ردود الفعل LIFF). تنسيق الحدث المرسل: Event category
/ Event action
/ Event label
نستخدم Message Source
Dimension (مخصص dimemsion1) لتصنيف مصادر الأحداث المختلفة
user
ل 1 على رسائل 1room
| 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 كـ Join ، -1 as Element. لمعرفة إجمالي المجموعات ، انضم chatbot إلى chatbot حاليًا ، يمكنك الاطلاع مباشرة على إجمالي قيمة الأحداث (التفاصيل انظر العد الضمني).
- لمعرفة مجموعة ما انضم إلى المجموعة حاليًا أو تعثر عليها ، يجب أن تجد آخر
Join
أوLeave
إجراءClient Id
.- أيضًا ، يجب أن تجد
Join
الأخير منClient Id
للحصول علىGroup Members Count
دقة. يتم تسجيلGroup Members Count
فقط عندما انضم Chatbot إلى Group ، لمعرفة العدد الدقيق ، يجب عليك الحصول عليه مباشرة من خطوط الرسائل.
UserInput
/ ArticleSearch
/ ArticleFound
Article
/ Search
/
لكل مقالة تم العثور عليهاArticle
/ Selected
/
Reply
/ Selected
/
UserInput
/ مقدمة / Intro
/ContentProxy
/ Forward
/
/
(القيمة) يحدد LICENSE
اتفاقية الترخيص للرمز المصدر في هذا المستودع.
LEGAL.md
هي اتفاقية المستخدم لمستخدمي موقع الويب COFACTS.