Advertisement
lilos404

Untitled

May 31st, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.52 KB | None | 0 0
  1. 'use strict';
  2.  
  3. // Messenger API integration example
  4. // We assume you have:
  5. // * a Wit.ai bot setup (https://wit.ai/docs/quickstart)
  6. // * a Messenger Platform setup (https://developers.facebook.com/docs/messenger-platform/quickstart)
  7. // You need to `npm install` the following dependencies: body-parser, express, request.
  8. //
  9. // 1. npm install body-parser express request
  10. // 2. Download and install ngrok from https://ngrok.com/download
  11. // 3. ./ngrok http 8445
  12. // 4. WIT_TOKEN=your_access_token FB_APP_SECRET=your_app_secret FB_PAGE_TOKEN=your_page_token node examples/messenger.js
  13. // 5. Subscribe your page to the Webhooks using verify_token and `https://<your_ngrok_io>/webhook` as callback URL.
  14. // 6. Talk to your bot on Messenger!
  15.  
  16. const bodyParser = require('body-parser');
  17. const crypto = require('crypto');
  18. const express = require('express');
  19. const fetch = require('node-fetch');
  20. const request = require('request');
  21. const fs = require('fs');
  22. var date = require('date-and-time');
  23.  
  24. let Wit = null;
  25. let log = null;
  26. try {
  27. // if running from repo
  28. Wit = require('../').Wit;
  29. log = require('../').log;
  30. } catch (e) {
  31. Wit = require('node-wit').Wit;
  32. log = require('node-wit').log;
  33. }
  34.  
  35. // Webserver parameter
  36. const PORT = process.env.PORT || 8445;
  37.  
  38. // Wit.ai parameters
  39. const WIT_TOKEN = process.env.WIT_TOKEN;
  40.  
  41. // Messenger API parameters
  42. const FB_PAGE_TOKEN = process.env.FB_PAGE_TOKEN;
  43. if (!FB_PAGE_TOKEN) { throw new Error('missing FB_PAGE_TOKEN') }
  44. const FB_APP_SECRET = process.env.FB_APP_SECRET;
  45. if (!FB_APP_SECRET) { throw new Error('missing FB_APP_SECRET') }
  46.  
  47. let FB_VERIFY_TOKEN = null;
  48. crypto.randomBytes(8, (err, buff) => {
  49. if (err) throw err;
  50. FB_VERIFY_TOKEN = buff.toString('hex');
  51. console.log(`/webhook will accept the Verify Token "${FB_VERIFY_TOKEN}"`);
  52. });
  53.  
  54. // ----------------------------------------------------------------------------
  55. // Messenger API specific code
  56.  
  57. // See the Send API reference
  58. // https://developers.facebook.com/docs/messenger-platform/send-api-reference
  59.  
  60. var yesNo =[ {
  61. content_type:"text",
  62. title:"نعم اجبتني",
  63. payload:"yes" ,
  64. },
  65. {
  66. content_type:"text",
  67. title:"لا لم تجبني",
  68. payload:"no" ,
  69. }
  70.  
  71. ] ;
  72.  
  73. var string = {
  74.  
  75. "الفاتحة" : 1 ,
  76. "البقرة": 2 ,
  77. "آل عمران": 3 ,
  78. "النساء": 4 ,
  79. "المائدة":5 ,
  80. "الأنعام": 6 ,
  81. "الأعراف": 7 ,
  82. "الأنفال": 8 ,
  83. "التوبة": 9 ,
  84. "يونس": 10 ,
  85. "هود": 11 ,
  86. "يوسف": 12 ,
  87. "الرعد": 13 ,
  88. "إبراهيم": 14 ,
  89. "الحجر": 15 ,
  90. "النحل": 16 ,
  91. "الإسراء":17 ,
  92. "الكهف": 18 ,
  93. "مريم": 19 ,
  94. "طه": 20 ,
  95. "الأنبياء":21 ,
  96. "الحج": 22 ,
  97. "المؤمنون": 23 ,
  98. "النور": 24,
  99. "الفرقان": 25 ,
  100. "الشعراء": 26 ,
  101. "النمل": 27 ,
  102. "القصص": 28 ,
  103. "العنكبوت": 29 ,
  104. "الروم": 30,
  105. "لقمان": 31 ,
  106. "السجدة": 32 ,
  107. "الأحزاب": 33,
  108. "سبأ": 34,
  109. "فاطر": 35 ,
  110. "يس": 36 ,
  111. "الصافات": 37 ,
  112. "ص": 38 ,
  113. "الزمر": 39 ,
  114. "غافر": 40 ,
  115. "فصلت": 41 ,
  116. "الشورى": 42 ,
  117. "الزخرف": 43 ,
  118. "الدخان": 44 ,
  119. "الجاثية": 45 ,
  120. "الأحقاف": 46 ,
  121. "محمد": 47 ,
  122. "الفتح": 48 ,
  123. "الحجرات": 49 ,
  124. "ق": 50 ,
  125. "الذاريات": 51 ,
  126. "الطور": 52 ,
  127. "النجم": 53 ,
  128. "القمر": 54 ,
  129. "الرحمن": 55 ,
  130. "الواقعة": 56 ,
  131. "الحديد": 57 ,
  132. "المجادلة": 58 ,
  133. "الحشر": 59 ,
  134. "الممتحنة": 60 ,
  135. "الصف": 61 ,
  136. "الجمعة": 62 ,
  137. "المنافقون": 63 ,
  138. "التغابن": 64 ,
  139. "الطلاق": 65 ,
  140. "التحريم": 66 ,
  141. "الملك": 67 ,
  142. "القلم": 68 ,
  143. "الحاقة": 69 ,
  144. "المعارج": 70 ,
  145. "نوح": 71 ,
  146. "الجن": 72 ,
  147. "المزمل": 73 ,
  148. "المدثر": 74 ,
  149. "القيامة": 75 ,
  150. "الإنسان": 76 ,
  151. "المرسلات": 77 ,
  152. "النبأ": 78 ,
  153. "النازعات": 79 ,
  154. "عبس": 80 ,
  155. "التكوير": 81 ,
  156. "الانفطار": 82 ,
  157. "المطففين": 83 ,
  158. "الانشقاق": 84 ,
  159. "البروج": 85 ,
  160. "الطارق": 86 ,
  161. "الأعلى": 87 ,
  162. "الغاشية": 88,
  163. "الفجر": 89 ,
  164. "البلد": 90 ,
  165. "الشمس": 91 ,
  166. "الليل": 92 ,
  167. "الضحى": 93 ,
  168. "الشرح": 94 ,
  169. "التين": 95 ,
  170. "العلق": 96 ,
  171. "القدر": 97 ,
  172. "البينة": 98 ,
  173. "الزلزلة": 99 ,
  174. "العاديات": 100 ,
  175. "القارعة": 101 ,
  176. "التكاثر": 102 ,
  177. "العصر": 103 ,
  178. "الهمزة": 104 ,
  179. "الفيل":105 ,
  180. "قريش": 106 ,
  181. "الماعون": 107 ,
  182. "الكوثر": 108 ,
  183. "الكافرون": 109 ,
  184. "اﻟﻨﺼﺮ": 110 ,
  185. "المسد": 111 ,
  186. "الإخلاص": 112 ,
  187. "الفلق": 113,
  188. "الناس":114
  189.  
  190. }
  191.  
  192. var Responses = {
  193.  
  194. help: [
  195. 'هل أستطيع مساعدتك',
  196. 'هل يمكنني مساعدتك',
  197. 'أيمكنني مساعدتك',
  198. 'هل بإمكاني مساعدتك',
  199. 'هل أساعدك',
  200. 'أيمكنني أن أساعدك',
  201. 'هل أستطيع أن أساعدك',
  202. 'هل من خدمة',
  203. 'لي أن أخدمك',
  204. 'هل يمكنني أن أساعدك',
  205. 'هل لي بمساعدتك',
  206. 'هل بوسعي مساعدتك',
  207. 'كيف أساعدك',
  208. ],
  209. fine: [
  210. 'جيد جدا',
  211. 'الحمد لله ',
  212. 'في احسن حال',
  213. 'بخير' ,
  214. 'في خير و الحمد لله',
  215. ],
  216.  
  217. sorry: [
  218. 'أنا آسف لسَمْاع ذلك , انا نعمل على تحسين قدراتي ',
  219. 'يؤسفني ذلك, سبحان من هو على كل شيء عليم ',
  220. ' يؤسفني عدم قدرتي على اجابتك',
  221. 'آسف لذلك' ,
  222. ],
  223.  
  224. good: [
  225. 'انه شرف لي مرحبا بكم ',
  226. 'يسرني ذلك, مرحبا بك ',
  227. ' من دواعي سروري, أهلاً بك',
  228. 'و ما توفيقي الا بالله .مرحبا بك ' ,
  229. ],
  230.  
  231.  
  232. askVerification: [
  233. 'هل أجبت على سؤالك ؟ ',
  234. 'هل أجبت بشكل كافي على سؤالك ',
  235. ' هل اجبتك بشكل صحيح؟',
  236.  
  237. ],
  238.  
  239. badWordsResponse: [
  240. 'لا حول ولا قوة الا بالله ',
  241. 'ربي يهديك ',
  242. ' احشم',
  243. 'ربي يتوب عليك يا وليدي ',
  244. 'لماذا هذا الكلام ',
  245. 'ربي يهديك ويتوب عليك ',
  246. 'وَجَزَاءُ سَيِّئَةٍ سَيِّئَةٌ مِثْلُهَا فَمَنْ عَفَا وَأَصْلَحَ فَأَجْرُهُ عَلَى اللَّهِ ',
  247.  
  248. ],
  249. salem: [
  250. 'لسلام عليكم ',
  251. 'مرحبا ',
  252. ' السلام عليكم',
  253. 'اهلا بك ',
  254. 'اهلا ',
  255. ],
  256.  
  257. HelloNoAr: [
  258. 'السلام عليكم ورحمة الله وبركاته نسأل الله لكم الخير و السلامة نتمنى منكم أن نتواصل باللغة العربية.',
  259. 'السلام عليكم و مرحبا نسأل الله أن تكونوا بخير و سلامة. نرجوا من سيادتكم الكتابة باللغة العربية.',
  260. ],
  261.  
  262. onlyArabic: [
  263. 'نسأل الله لكم الخير و السلامة نتمنى منكم أن نتواصل باللغة العربية. لنواصل الحديث',
  264. 'نرجوا من سيادتكم الكتابة باللغة العربية. لنستمر في الحوار ',
  265. 'الله يبارك فيكم نرجوا من سيادتكم الكتابة باللغة العربية. لنكمل المحادثة',
  266. 'لو تكرمتم نرجوا منكم التواصل و باللغة العربية. لنواصل الحديث ',
  267.  
  268.  
  269. ],
  270.  
  271. HelloAr: [
  272.  
  273. 'الله يحييك و مرحبا بكم في هذا التطبيق. نسأل الله أن ينال اعجابكم. نحن في خدمتكم و في انتظار أسئلتكم و استفساراتكم.',
  274. 'حياكم الله و مرحبا بكم في هذا التطبيق. نسأل الله أن ينال اعجابكم. نحن في خدمتكم و في انتظار أسئلتكم و استفساراتكم.',
  275. 'السلام ورحمة الله وبركاته و مرحبا بكم في هذا التطبيق. نسأل الله أن ينال اعجابكم. نحن في خدمتكم و في انتظار أسئلتكم و استفساراتكم.',
  276. 'أحييكم بتحية الإسلام و دار السلام و مرحبا بكم في هذا التطبيق. نسأل الله أن ينال اعجابكم. نحن في خدمتكم و في انتظار أسئلتكم و استفساراتكم.',
  277.  
  278. ],
  279. correctAnswer: [
  280. 'يسرنا ذلك بارك الله فيك في لقاء موالي.',
  281. 'ننتظركم ثانية نسأل الله لكم التوفيق. ',
  282. 'مرحبا بكم في قادم استفساراتكم نتمنى لكم القَبول و السداد',
  283. 'نحن في انتظاركم مرة أخرى شكر الله سعيكم و وفقكم لما يحب و يرضى. ',
  284.  
  285.  
  286. ],
  287. wrongAnswer: [
  288. 'أنا مجرد "رُوبُوت" ، أملك ذكاء اصطناعي ، وقدراتي على الإسْتِيعَاب محدودة و يصعب عليّ فهم كل شي. لكنّي أبشركم بإجابة كافية بإذن الله في الساعات القليلة القادمة مباشرة من مشائخ التطبيق.شكرا لتفهمكم بإمكانكم مواصلة إلقاء أسئلتكم.',
  289.  
  290.  
  291.  
  292. ],
  293.  
  294. }
  295.  
  296.  
  297. const firstEntityValue = (entities, entity) => {
  298. const val = entities && entities[entity] &&
  299. Array.isArray(entities[entity]) &&
  300. entities[entity].length > 0 &&
  301. entities[entity][0].value
  302. ;
  303. if (!val) {
  304. return null;
  305. }
  306. return typeof val === 'object' ? val.value : val;
  307. };
  308.  
  309.  
  310. const sendResponse = (text,category ,recipientId ,sessionId ) => {
  311.  
  312. console.log("sending.........."+category);
  313. sessions[sessionId].question = text ;
  314. sessions[sessionId].category = category ;
  315. var urlencode = require('urlencode');
  316.  
  317. var request = require("request")
  318.  
  319. var url = "http://41.231.54.87/api/getresponsev2?categorie="+category+"&content="+urlencode(text)
  320.  
  321.  
  322. request({
  323. url: url,
  324. json: true
  325. }, function (error, response, body) {
  326. {
  327. if (body)
  328.  
  329. var res = body['0']["reply"];
  330.  
  331. if (res)
  332. {
  333.  
  334.  
  335. fbMessage(recipientId, res);
  336. }
  337.  
  338. else {
  339.  
  340.  
  341.  
  342. console.log("not found");
  343.  
  344. } }})}
  345.  
  346.  
  347.  
  348. const storeQuestion = (sessionId ) => {
  349.  
  350.  
  351. const text = sessions[sessionId].question ;
  352. const category = sessions[sessionId].category ;
  353. const Id = sessions[sessionId].fbid;
  354.  
  355.  
  356. var urlencode = require('urlencode');
  357.  
  358. var request = require("request")
  359.  
  360. var now = new Date();
  361. //var url = "http://askthecheikh.tk/api/addquestion?question=" + sessions[sessionId].question + "&userId=" + Id + "&received=" + date.format(now, 'YYYY-MM-DD HH:mm:ss')
  362. var url = "http://askthecheikh.tk/api/addquestion2?question=" + sessions[sessionId].question + "&userId=" + Id + "&received=" + date.format(now, 'YYYY-MM-DD HH:mm:ss')+ "&something="+ category
  363.  
  364. console.log(url)
  365.  
  366. request({
  367. url: url,
  368. json: true
  369. }, function (error, response, body) {
  370.  
  371.  
  372. })}
  373.  
  374.  
  375.  
  376. const isWriting = (id ,sender_action) =>
  377.  
  378. {
  379. const body = JSON.stringify({
  380. recipient: { id },
  381. sender_action
  382.  
  383. });
  384.  
  385. const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
  386. return fetch('https://graph.facebook.com/me/messages?' + qs, {
  387. method: 'POST',
  388. headers: {'Content-Type': 'application/json'},
  389. body,
  390. })
  391. .then(rsp => rsp.json())
  392. .then(json => {
  393. if (json.error && json.error.message) {
  394. throw new Error(json.error.message);
  395. }
  396. return json;
  397. });
  398. };
  399.  
  400.  
  401. const fbMessage = (id, text) => {
  402. const body = JSON.stringify({
  403. recipient: { id },
  404. message: { text },
  405. });
  406. const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
  407. return fetch('https://graph.facebook.com/me/messages?' + qs, {
  408. method: 'POST',
  409. headers: {'Content-Type': 'application/json'},
  410. body,
  411. })
  412. .then(rsp => rsp.json())
  413. .then(json => {
  414. if (json.error && json.error.message) {
  415. throw new Error(json.error.message);
  416. }
  417. return json;
  418. });
  419. };
  420.  
  421. const quickReplay = (id, text ,quick_replies) => {
  422. const body = JSON.stringify({
  423. recipient: { id },
  424. message: {text , quick_replies, },
  425.  
  426. });
  427.  
  428. const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
  429. return fetch('https://graph.facebook.com/me/messages?' + qs, {
  430. method: 'POST',
  431. headers: {'Content-Type': 'application/json'},
  432. body,
  433. })
  434. .then(rsp => rsp.json())
  435. .then(json => {
  436. if (json.error && json.error.message) {
  437. throw new Error(json.error.message);
  438. }
  439. return json;
  440. });
  441. };
  442.  
  443.  
  444.  
  445. const fbAudioMessage = (id, url) => {
  446. const body = JSON.stringify({
  447. recipient: { id },
  448. message: {
  449. attachment : {
  450. type : "audio" ,
  451. payload :{
  452. url
  453. }
  454. }
  455. },
  456. });
  457.  
  458. const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN);
  459. return fetch('https://graph.facebook.com/me/messages?' + qs, {
  460. method: 'POST',
  461. headers: {'Content-Type': 'application/json'},
  462. body,
  463. })
  464. .then(rsp => rsp.json())
  465. .then(json => {
  466. if (json.error && json.error.message) {
  467. throw new Error(json.error.message);
  468. }
  469. return json;
  470. });
  471. };
  472. // ----------------------------------------------------------------------------
  473. // Wit.ai bot specific code
  474.  
  475. // This will contain all user sessions.
  476. // Each session has an entry:
  477. // sessionId -> {fbid: facebookUserId, context: sessionState}
  478. const sessions = {};
  479.  
  480. const findOrCreateSession = (fbid) => {
  481. let sessionId;
  482. // Let's see if we already have a session for the user fbid
  483. Object.keys(sessions).forEach(k => {
  484. if (sessions[k].fbid === fbid) {
  485. // Yep, got it!
  486. sessionId = k;
  487. }
  488. });
  489. if (!sessionId) {
  490. // No session found for user fbid, let's create a new one
  491. sessionId = new Date().toISOString();
  492. sessions[sessionId] = {fbid: fbid, context: {}};
  493. }
  494. return sessionId;
  495. };
  496.  
  497. // Our bot actions
  498. const actions = {
  499. send({sessionId}, {text}) {
  500. // Our bot has something to say!
  501. // Let's retrieve the Facebook user whose session belongs to
  502. const recipientId = sessions[sessionId].fbid;
  503. if (recipientId) {
  504. // Yay, we found our recipient!
  505. // Let's forward our bot response to her.
  506. // We return a promise to let our bot know when we're done sending
  507. return fbMessage(recipientId, text)
  508. .then(() => null)
  509. .catch((err) => {
  510. console.error(
  511. 'Oops! An error occurred while forwarding the response to',
  512. recipientId,
  513. ':',
  514. err.stack || err
  515. );
  516. });
  517. } else {
  518. console.error('Oops! Couldn\'t find user for session:', sessionId);
  519. // Giving the wheel back to our bot
  520. return Promise.resolve()
  521. }
  522. },
  523.  
  524.  
  525. getDouaa({context, entities , sessionId , text}) {
  526.  
  527.  
  528. var fs = require('fs');
  529. fs.readFile('douaa.js', 'utf8', function (err,data) {
  530. if (err) {
  531. return console.log(err);
  532. }
  533. var jsonFile = JSON.parse(data)
  534. if (jsonFile[text])
  535. var res = jsonFile[text][Math.floor(Math.random()*jsonFile[text].length)];
  536. else
  537. var res = "اسف هذا النوع من الدعاء ليس متوفر حاليا" ;
  538.  
  539. const recipientId = sessions[sessionId].fbid;
  540. if (recipientId) {
  541.  
  542. return fbMessage(recipientId, res);
  543. }
  544. else {
  545.  
  546. return fbMessage(recipientId, res);
  547. }
  548.  
  549. });
  550.  
  551.  
  552.  
  553. },
  554.  
  555. getHelp({context, entities , sessionId, text }) {
  556. const recipientId = sessions[sessionId].fbid;
  557. if (recipientId) {
  558. var quick_replies = [
  559. {
  560. content_type:"text",
  561. title:"اريد ان اسال سؤال",
  562. payload:"1" ,
  563. },
  564. {
  565. content_type:"text",
  566. title:"اﺳﺘﻤﻊ اﻟﻰ اﻟﻘﺮاﻥ",
  567. payload:"3" ,
  568. },
  569. {
  570. content_type:"text",
  571. title:"ﻗﺮاءﺓ ﺑﻌﺾ اﻻﺩﻋﻴﺔ",
  572. payload:"4" ,
  573. },
  574. {
  575. content_type:"text",
  576. title:" اﻭﻗﺎﺕ اﻟﺼﻼﺓ",
  577. payload:"4" ,
  578. }
  579.  
  580. ]
  581. return quickReplay(recipientId,"ﻛﻴﻒ ﻳﻤﻜﻨﻨﻲ ﻣﺴﺎﻋﺪﺗﻚ؟",quick_replies)
  582.  
  583. }
  584.  
  585. },
  586.  
  587.  
  588. getResponse({context, entities , sessionId, text }) {
  589.  
  590. if (firstEntityValue(entities,'intent')=="HelloNoAr") {
  591. var wantedtext = Responses['HelloNoAr']
  592. var text=wantedtext[Math.floor(Math.random() * wantedtext.length)]
  593. const recipientId = sessions[sessionId].fbid;
  594. if (recipientId) {
  595. return fbMessage(recipientId, text)
  596. } else {
  597. console.error('Oops! Couldn\'t find user for session:', sessionId);
  598. return Promise.resolve()
  599. }
  600. }
  601.  
  602.  
  603. else if (firstEntityValue(entities,'intent')=="HelloAr") {
  604. var wantedtext = Responses['HelloAr']
  605. var text=wantedtext[Math.floor(Math.random() * wantedtext.length)]
  606. const recipientId = sessions[sessionId].fbid;
  607. if (recipientId) {
  608. return fbMessage(recipientId, text)
  609. } else {
  610. console.error('Oops! Couldn\'t find user for session:', sessionId);
  611. return Promise.resolve()
  612. }
  613. }
  614.  
  615. else if (firstEntityValue(entities,'intent')=="askAboutName") {
  616. const recipientId = sessions[sessionId].fbid;
  617. if (recipientId) {
  618. return fbMessage(recipientId, "إسمي أكــــــرم نسأل الله أن يكرمكم تفضل بالسؤال")
  619. } else {
  620. console.error('Oops! Couldn\'t find user for session:', sessionId);
  621. return Promise.resolve()
  622. }
  623. }
  624.  
  625. else if (firstEntityValue(entities,'intent')=="askQuestion") {
  626. const recipientId = sessions[sessionId].fbid;
  627. if (recipientId) {
  628. var quick_replies = [
  629. {
  630. content_type:"text",
  631. title : "القرآن وعلومه" ,
  632. payload:"1" ,
  633. },
  634.  
  635. {
  636. content_type:"text",
  637. title : "احاديث نبوية وسير" ,
  638. payload:"2" ,
  639. },
  640. {
  641. content_type:"text",
  642. title : "العبادات" ,
  643. payload:"3" ,
  644. },
  645. {
  646. content_type:"text",
  647. title : "المعاملات" ,
  648. payload:"4" ,
  649. },
  650. {
  651. content_type:"text",
  652. title : "اسئلة اخرى عامة" ,
  653. payload:"5" ,
  654. },
  655.  
  656. ];
  657.  
  658. return quickReplay(recipientId,"سؤالك متعلق بـ ؟",quick_replies)
  659. } else {
  660. console.error('Oops! Couldn\'t find user for session:', sessionId);
  661. return Promise.resolve()
  662. }
  663. }
  664.  
  665. else if (text=="احاديث نبوية وسير") {
  666. const recipientId = sessions[sessionId].fbid;
  667. if (recipientId) {
  668.  
  669. console.log("*---------------------");
  670.  
  671. context.a7adith= true
  672. delete context.mou3amalet
  673. delete context.ibadet
  674. delete context.quran
  675. delete context.other
  676.  
  677. return context
  678.  
  679. } else {
  680. console.error('Oops! Couldn\'t find user for session:', sessionId);
  681. return Promise.resolve()
  682. }
  683. }
  684.  
  685. else if (text=="العبادات") {
  686. const recipientId = sessions[sessionId].fbid;
  687. if (recipientId) {
  688.  
  689. context.ibadet= true
  690. delete context.mou3amalet
  691. delete context.a7adith
  692. delete context.quran
  693. delete context.other
  694.  
  695. return context
  696.  
  697. } else {
  698. console.error('Oops! Couldn\'t find user for session:', sessionId);
  699. return Promise.resolve()
  700. }
  701. }
  702.  
  703. else if (text=="المعاملات") {
  704. const recipientId = sessions[sessionId].fbid;
  705. if (recipientId) {
  706.  
  707. context.mou3amalet= true
  708. delete context.ibadet
  709. delete context.a7adith
  710. delete context.quran
  711. delete context.other
  712.  
  713. return context
  714.  
  715. } else {
  716. console.error('Oops! Couldn\'t find user for session:', sessionId);
  717. return Promise.resolve()
  718. }
  719. }
  720.  
  721. else if (text=="اسئلة اخرى عامة") {
  722. const recipientId = sessions[sessionId].fbid;
  723. if (recipientId) {
  724. // fbMessage(recipientId, "تفضل ما هو سؤالك")
  725. delete context.quran ;
  726. delete context.ibadet
  727. delete context.a7adith
  728. delete context.mou3amalet
  729. context.other = "true" ;
  730.  
  731. return context ;
  732. } else {
  733. console.error('Oops! Couldn\'t find user for session:', sessionId);
  734. return Promise.resolve()
  735. }
  736. }
  737.  
  738. else if (text=="القرآن وعلومه") {
  739. const recipientId = sessions[sessionId].fbid;
  740. if (recipientId) {
  741. // fbMessage(recipientId, "تفضل ما هو سؤالك")
  742. delete context.other ;
  743. delete context.ibadet
  744. delete context.a7adith
  745. delete context.mou3amalet
  746. context.quran = "quran" ;
  747.  
  748. return context ;
  749. } else {
  750. console.error('Oops! Couldn\'t find user for session:', sessionId);
  751. return Promise.resolve()
  752. }
  753. }
  754.  
  755.  
  756.  
  757.  
  758.  
  759. },
  760.  
  761.  
  762. getChoice({context, entities , sessionId, text }) {
  763.  
  764.  
  765. const recipientId = sessions[sessionId].fbid;
  766.  
  767. if (context.a7adith) {
  768.  
  769.  
  770.  
  771.  
  772. var quick_replies = [
  773. {
  774. content_type:"text",
  775. title : "علوم الحديث" ,
  776. payload:"1" ,
  777. },
  778.  
  779. {
  780. content_type:"text",
  781. title : "التاريخ والسير" ,
  782. payload:"2" ,
  783. },
  784.  
  785.  
  786. ] ;
  787. quickReplay(recipientId,"بالتحديد ؟" ,quick_replies)
  788.  
  789. }
  790.  
  791. else if (context.ibadet) {
  792. var quick_replies = [
  793. {
  794. content_type:"text",
  795. title : "الطهارة" ,
  796. payload:"1" ,
  797. },
  798. {
  799. content_type:"text",
  800. title : "الصلاة" ,
  801. payload:"2" ,
  802. },
  803.  
  804. { content_type:"text",
  805. title : "الزكاة" ,
  806. payload:"3" ,
  807. },
  808. {content_type:"text",
  809. title : "الحج والعمرة" ,
  810. payload:"4" ,
  811. },
  812. {content_type:"text",
  813. title : "الصيام" ,
  814. payload:"5" ,
  815. },
  816. {content_type:"text",
  817. title : "جنائز" ,
  818. payload:"6" ,
  819. },
  820.  
  821.  
  822. ] ;
  823.  
  824.  
  825.  
  826.  
  827. quickReplay(recipientId,"بالتحديد ؟" ,quick_replies) }
  828.  
  829.  
  830.  
  831. else if (context.mou3amalet) {
  832.  
  833. var quick_replies = [
  834. {
  835. content_type:"text",
  836. title : "البيوع" ,
  837. payload:"1" ,
  838. },
  839.  
  840. {
  841. content_type:"text",
  842. title : "الحدود والاحكام" ,
  843. payload:"2" ,
  844. },
  845.  
  846. {
  847. content_type:"text",
  848. title : "فقه الاسرة" ,
  849. payload:"3" ,
  850. },
  851. {
  852. content_type:"text",
  853. title : "المواريث" ,
  854. payload:"4" ,
  855. },
  856.  
  857.  
  858. ] ;
  859. quickReplay(recipientId,"بالتحديد ؟", quick_replies)
  860.  
  861. }
  862.  
  863. return context
  864.  
  865. },
  866.  
  867.  
  868.  
  869. askTheChikh({context, entities , sessionId, text }) {
  870.  
  871. const recipientId = sessions[sessionId].fbid;
  872.  
  873.  
  874. if (context.other) {
  875. console.log("asking about other")
  876.  
  877.  
  878. sendResponse(text,"2",recipientId,sessionId);
  879. }
  880. else if (context.quran) {
  881. console.log("askign about quran")
  882.  
  883.  
  884. sendResponse(text,"1",recipientId,sessionId );
  885.  
  886. }
  887. else if (context.sira) {
  888. console.log("askign about sira")
  889.  
  890. sendResponse(text,"4",recipientId ,sessionId);
  891. }
  892. else if (context.hadith) {
  893. console.log("askign about hadith")
  894.  
  895. sendResponse(text,"3",recipientId,sessionId);
  896. }
  897.  
  898.  
  899.  
  900. setTimeout(function() {
  901. quickReplay(recipientId,"هل اجبت على سؤالك؟", yesNo)
  902. }, 1000);
  903.  
  904.  
  905. return context
  906.  
  907. },
  908.  
  909.  
  910. verify({context, entities , sessionId, text }) {
  911.  
  912.  
  913.  
  914. console.log("verify -------------------------------------");
  915.  
  916.  
  917. const recipientId = sessions[sessionId].fbid;
  918.  
  919. if (text=="نعم اجبتني") {
  920.  
  921.  
  922. var wantedtext = Responses['correctAnswer']
  923. var res = wantedtext[Math.floor(Math.random() * wantedtext.length)]
  924. return fbMessage(recipientId, res)
  925.  
  926.  
  927. }
  928. else {
  929.  
  930. var wantedtext = Responses['wrongAnswer']
  931. var res = wantedtext[Math.floor(Math.random() * wantedtext.length)]
  932.  
  933. // console.log(sessions[sessionId].question)
  934. storeQuestion(sessionId)
  935. return fbMessage(recipientId, res)
  936. // context.lost = "true" ;
  937. }
  938.  
  939.  
  940.  
  941.  
  942.  
  943. },
  944.  
  945.  
  946. askTheChikhMou2amalet({context, entities , sessionId, text }) {
  947.  
  948. const recipientId = sessions[sessionId].fbid;
  949.  
  950. if (context.typo1) {
  951. console.log("asking about typo1")
  952.  
  953. sendResponse(text,"11",recipientId,sessionId);
  954. }
  955. else if (context.typo2) {
  956. console.log("askign about typo2")
  957.  
  958. sendResponse(text,"12",recipientId,sessionId);
  959. }
  960. else if (context.typo3) {
  961. console.log("askign about typo3")
  962.  
  963. sendResponse(text,"13",recipientId,sessionId);
  964. }
  965. else if (context.typo4) {
  966. console.log("askign about typo4")
  967.  
  968. sendResponse(text,"14",recipientId,sessionId);
  969. }
  970.  
  971. setTimeout(function() {
  972. quickReplay(recipientId,"هل اجبت على سؤالك؟", yesNo)
  973. }, 1000);
  974.  
  975. return context
  976.  
  977. },
  978.  
  979.  
  980. askTheChikhIbadet({context, entities , sessionId, text }) {
  981. const recipientId = sessions[sessionId].fbid;
  982.  
  983. if (context.type1) {
  984. console.log("asking about type1")
  985.  
  986. sendResponse(text,"5",recipientId,sessionId);
  987. }
  988. else if (context.type2) {
  989. console.log("askign about type2")
  990.  
  991. sendResponse(text,"6",recipientId,sessionId);
  992. }
  993. else if (context.type3) {
  994. console.log("askign about type3")
  995.  
  996. sendResponse(text,"7",recipientId,sessionId);
  997. }
  998. else if (context.type4) {
  999. console.log("askign about type4")
  1000.  
  1001. sendResponse(text,"8",recipientId,sessionId);
  1002. }
  1003. else if (context.type5) {
  1004.  
  1005. console.log("askign about type5")
  1006.  
  1007. sendResponse(text,"9",recipientId,sessionId);}
  1008. else if (context.type6) {
  1009.  
  1010. console.log("askign about type6")
  1011.  
  1012. sendResponse(text,"10",recipientId,sessionId);
  1013.  
  1014. }
  1015.  
  1016.  
  1017.  
  1018. setTimeout(function() {
  1019. quickReplay(recipientId,"هل اجبت على سؤالك؟", yesNo)
  1020. }, 1000);
  1021.  
  1022. return context
  1023. },
  1024.  
  1025.  
  1026.  
  1027. whatIbadet({context, entities , sessionId, text }) {
  1028.  
  1029. const recipientId = sessions[sessionId].fbid;
  1030. if (recipientId) {
  1031.  
  1032. console.log("asking about the kinf of ibeda");
  1033. if (text=="الطهارة") {
  1034. delete context.type2
  1035. delete context.type3
  1036. delete context.type4
  1037. delete context.type5
  1038. delete context.type6
  1039. context.type1 = "true1" ;
  1040. }
  1041. else if (text=="الصلاة"){
  1042. delete context.type1
  1043. delete context.type3
  1044. delete context.type4
  1045. delete context.type5
  1046. delete context.type6
  1047. context.type2 = "true2" ;
  1048. }
  1049. else if (text=="الزكاة"){
  1050. delete context.type2
  1051. delete context.type1
  1052. delete context.type4
  1053. delete context.type5
  1054. delete context.type6
  1055. context.type3 = "true3" ;
  1056. }
  1057. else if (text=="الحج والعمرة") {
  1058.  
  1059. delete context.type2
  1060. delete context.type3
  1061. delete context.type1
  1062. delete context.type6
  1063. delete context.type5
  1064. context.type4 = "true4" ;
  1065. }
  1066. else if (text=="الصيام") {
  1067.  
  1068. delete context.type2
  1069. delete context.type3
  1070. delete context.type4
  1071. delete context.type1
  1072. delete context.type6
  1073. context.type5 = "true5" ;
  1074. }
  1075. else if (text=="جنائز") {
  1076.  
  1077. delete context.type2
  1078. delete context.type3
  1079. delete context.type4
  1080. delete context.type5
  1081. delete context.type1
  1082. context.type6 = "true6" ;
  1083. }
  1084.  
  1085. return context ;
  1086.  
  1087.  
  1088. }
  1089. },
  1090.  
  1091.  
  1092. whatMou2amalet({context, entities , sessionId, text }) {
  1093.  
  1094. const recipientId = sessions[sessionId].fbid;
  1095. if (recipientId) {
  1096.  
  1097. console.log("asking about the kinf of mou2amalet");
  1098. if (text=="البيوع") {
  1099. delete context.typo2
  1100. delete context.typo3
  1101. delete context.typo4
  1102.  
  1103. context.typo1 = "tre1" ;
  1104. }
  1105. else if (text=="الحدود والاحكام"){
  1106. delete context.typo1
  1107. delete context.typo3
  1108. delete context.typo4
  1109.  
  1110. context.typo2 = "tre2" ;
  1111. }
  1112. else if (text=="فقه الاسرة"){
  1113. delete context.typo2
  1114. delete context.typo1
  1115. delete context.typo4
  1116.  
  1117. context.typo3 = "tre3" ;
  1118. }
  1119. else if (text=="المواريث") {
  1120.  
  1121. delete context.typo2
  1122. delete context.typo3
  1123. delete context.typo1
  1124.  
  1125. context.typo4 = "tre4" ;
  1126. }
  1127.  
  1128.  
  1129. return context ;
  1130.  
  1131.  
  1132. }
  1133. },
  1134. hadithOrSira({context, entities , sessionId, text }) {
  1135.  
  1136. const recipientId = sessions[sessionId].fbid;
  1137.  
  1138. console.log("ena hna -----------");
  1139. if (recipientId) {
  1140.  
  1141.  
  1142. if (text=="علوم الحديث") {
  1143.  
  1144. console.log("ena hna ----------- hadith");
  1145. context.hadith = true ;
  1146. context.sira = false ;
  1147. } else if (text=="التاريخ والسير"){
  1148.  
  1149. console.log("ena hna ----------- sira");
  1150. context.sira = true ;
  1151. context.hadith = false ;
  1152. }
  1153.  
  1154.  
  1155.  
  1156. return context ;
  1157. }
  1158. },
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166. checkLanguage({context, entities , sessionId, text }) {
  1167. var franc = require('franc');
  1168. const recipientId = sessions[sessionId].fbid;
  1169. if (franc(text, {minLength: 2})!="arb" && franc(text, {minLength: 2})!="uig") {
  1170. if (recipientId) {
  1171. var wantedtext = Responses['onlyArabic']
  1172. var res = wantedtext[Math.floor(Math.random() * wantedtext.length)]
  1173. return fbMessage(recipientId, res)
  1174. }
  1175. } else {
  1176. if (recipientId) {
  1177. return fbMessage(recipientId, 'اسف لم افهم')
  1178. }
  1179. }
  1180.  
  1181.  
  1182.  
  1183. },
  1184.  
  1185. getPrayerTimes({context, entities , sessionId , text}) {
  1186.  
  1187. console.log("getPrayerTimes triiger");
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194. const request = require('request');
  1195. var urlencode = require('urlencode');
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205. var url = "http://muslimsalat.com/"+urlencode(text)+"/daily.json?key=16a741273a18579bdb7abdbae61b46d6&jsoncallback"
  1206.  
  1207.  
  1208. const recipientId = sessions[sessionId].fbid;
  1209. request({
  1210. url: url,
  1211. json: true
  1212. }, function (error, response, body) {
  1213.  
  1214. if (!error && response.statusCode === 200) {
  1215.  
  1216. console.log(body['status_valid'])
  1217. if (!body['status_valid']) {
  1218.  
  1219. return fbMessage(recipientId, "من فضلك تثبنت من ادخالك لاسم المدينة بالصحيح");
  1220. } else {
  1221.  
  1222. var res = 'اﻟﻔﺠﺮ' + body['items'][0]['fajr'] +'\n' + 'اﻟﺸﺮﻭﻕ' + body['items'][0]['shurooq'] +'\n' + 'اﻟﻈﻬﺮ' + body['items'][0]['dhuhr'] +'\n' +'اﻟﻌﺼﺮ' + body['items'][0]['asr'] +'\n' + 'اﻟﻤﻐﺮﺏ' + body['items'][0]['maghrib'] +'\n' + 'اﻟﻌﺸﺎء' + body['items'][0]['isha'] ;
  1223.  
  1224. return fbMessage(recipientId, res); }
  1225.  
  1226. }
  1227.  
  1228. })
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236. return context;
  1237. },
  1238.  
  1239.  
  1240. getSourasVoice({context, entities , sessionId , text }) {
  1241.  
  1242. var soura_name = firstEntityValue(entities, 'soura_name');
  1243.  
  1244. // if (soura_name) {
  1245.  
  1246.  
  1247. const recipientId = sessions[sessionId].fbid;
  1248. if (recipientId) {
  1249.  
  1250. if (string[text] ) {
  1251.  
  1252. var nb , x=string[text] ;
  1253. if (x<10)
  1254. nb = "00"+x ;
  1255. else if (x<100)
  1256. nb = "0"+x ;
  1257. else
  1258. nb = x ;
  1259.  
  1260.  
  1261. var url = "http://server12.mp3quran.net/maher/"+nb+".mp3"
  1262.  
  1263.  
  1264.  
  1265. return fbAudioMessage(recipientId,url) }
  1266. else {
  1267. return fbMessage(recipientId, "اسف لم اجد السورة ");
  1268. }
  1269.  
  1270. }
  1271.  
  1272. //}
  1273. },
  1274.  
  1275.  
  1276.  
  1277. };
  1278.  
  1279. // Setting up our bot
  1280. const wit = new Wit({
  1281. accessToken: WIT_TOKEN,
  1282. actions,
  1283. logger: new log.Logger(log.INFO)
  1284. });
  1285.  
  1286. // Starting our webserver and putting it all together
  1287. const app = express();
  1288. app.use(({method, url}, rsp, next) => {
  1289. rsp.on('finish', () => {
  1290. console.log(`${rsp.statusCode} ${method} ${url}`);
  1291. });
  1292. next();
  1293. });
  1294. app.use(bodyParser.json({ verify: verifyRequestSignature }));
  1295.  
  1296. // Webhook setup
  1297. app.get('/webhook', (req, res) => {
  1298. if (req.query['hub.mode'] === 'subscribe' &&
  1299. req.query['hub.verify_token'] === FB_VERIFY_TOKEN) {
  1300. res.send(req.query['hub.challenge']);
  1301. } else {
  1302. res.sendStatus(400);
  1303. }
  1304. });
  1305.  
  1306. // Message handler
  1307. app.post('/webhook', (req, res) => {
  1308. // Parse the Messenger payload
  1309. // See the Webhook reference
  1310. // https://developers.facebook.com/docs/messenger-platform/webhook-reference
  1311. const data = req.body;
  1312.  
  1313. if (data.object === 'page') {
  1314. data.entry.forEach(entry => {
  1315. entry.messaging.forEach(event => {
  1316. if (event.message && !event.message.is_echo) {
  1317. // Yay! We got a new message!
  1318. // We retrieve the Facebook user ID of the sender
  1319. const sender = event.sender.id;
  1320.  
  1321. // We retrieve the user's current session, or create one if it doesn't exist
  1322. // This is needed for our bot to figure out the conversation history
  1323. const sessionId = findOrCreateSession(sender);
  1324. isWriting(sessions[sessionId].fbid,"mark_seen")
  1325.  
  1326. isWriting(sessions[sessionId].fbid,"typing_on")
  1327. // We retrieve the message content
  1328. const {text, attachments} = event.message;
  1329.  
  1330. if (attachments) {
  1331. // We received an attachment
  1332. // Let's reply with an automatic message
  1333. fbMessage(sender, 'Sorry I can only process text messages for now.')
  1334. .catch(console.error);
  1335. } else if (text) {
  1336. // We received a text message
  1337.  
  1338. // Let's forward the message to the Wit.ai Bot Engine
  1339. // This will run all actions until our bot has nothing left to do
  1340. wit.runActions(
  1341. sessionId, // the user's current session
  1342. text, // the user's message
  1343. sessions[sessionId].context // the user's current session state
  1344. ).then((context) => {
  1345. // Our bot did everything it has to do.
  1346. // Now it's waiting for further messages to proceed.
  1347. console.log('Waiting for next user messages');
  1348.  
  1349. // Based on the session state, you might want to reset the session.
  1350. // This depends heavily on the business logic of your bot.
  1351. // Example:
  1352. // if (context['done']) {
  1353. // delete sessions[sessionId];
  1354. // }
  1355.  
  1356. // Updating the user's current session state
  1357. sessions[sessionId].context = context;
  1358. })
  1359. .catch((err) => {
  1360. console.error('Oops! Got an error from Wit: ', err.stack || err);
  1361. })
  1362. }
  1363. } else {
  1364. console.log('received event', JSON.stringify(event));
  1365. }
  1366. });
  1367. });
  1368. }
  1369. res.sendStatus(200);
  1370. });
  1371.  
  1372. /*
  1373. * Verify that the callback came from Facebook. Using the App Secret from
  1374. * the App Dashboard, we can verify the signature that is sent with each
  1375. * callback in the x-hub-signature field, located in the header.
  1376. *
  1377. * https://developers.facebook.com/docs/graph-api/webhooks#setup
  1378. *
  1379. */
  1380. function verifyRequestSignature(req, res, buf) {
  1381. var signature = req.headers["x-hub-signature"];
  1382.  
  1383. if (!signature) {
  1384. // For testing, let's log an error. In production, you should throw an
  1385. // error.
  1386. console.error("Couldn't validate the signature.");
  1387. } else {
  1388. var elements = signature.split('=');
  1389. var method = elements[0];
  1390. var signatureHash = elements[1];
  1391.  
  1392. var expectedHash = crypto.createHmac('sha1', FB_APP_SECRET)
  1393. .update(buf)
  1394. .digest('hex');
  1395.  
  1396. if (signatureHash != expectedHash) {
  1397. throw new Error("Couldn't validate the request signature.");
  1398. }
  1399. }
  1400. }
  1401.  
  1402. app.listen(PORT);
  1403. console.log('Listening on :' + PORT + '...');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement