{"id":1216,"date":"2024-03-30T02:18:29","date_gmt":"2024-03-30T02:18:29","guid":{"rendered":"https:\/\/sparkonelabs.com\/home\/?p=1216"},"modified":"2024-04-01T15:18:05","modified_gmt":"2024-04-01T15:18:05","slug":"building-an-oxford-house-chat-bot","status":"publish","type":"post","link":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/","title":{"rendered":"Building an Oxford House Chat Bot"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">So I decided I wanted to build a chat bot, specifically for Oxford House; which will allow natural language queries concerning the rules and data associated with the particular house and organization in my locale. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After looking into this a bit, and experimenting with some more naive implementations using selenium and other automation solutions, I found a few video tutorials online that suggested a more professional approach. After all I do not want to get banned from platforms or services because of improper implementation. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the desired front-end, for this project, at this point in time, is Facebook Messenger. Specifically, the messenger attached to my SparkOne() Labs page. Here are two tutorials I will be following in order to implement this. <\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\"><a href=\"https:\/\/www.youtube.com\/watch?v=RP8nhiiQnTc \">https:\/\/www.youtube.com\/watch?v=RP8nhiiQnTc <\/a> &#8212; Flask app running on NGinx on a Digital Ocean droplet<\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/www.youtube.com\/watch?v=OL5fC7RpK4Y&amp;list=PL7eGS_IL1eWSMHUeVmIbZ2G7UQ3KLoqR9&amp;index=13&amp;t=2245s\">https:\/\/www.youtube.com\/watch?v=OL5fC7RpK4Y&amp;list=PL7eGS_IL1eWSMHUeVmIbZ2G7UQ3KLoqR9&amp;index=13&amp;t=2245s<\/a> &#8212; Facebook Messenger API with Webhook<\/li>\n\n\n\n<li class=\"\"><em><a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04<\/a><\/em> &#8212; Quick and easy way to deploy flask nginx and SSL with certbot<\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/www.freenom.com\/en\/index.html\">https:\/\/www.freenom.com\/en\/index.html<\/a> &#8212; Free domains<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">So after reviewing these excellent video tutorials, I decided to follow this implementation. I already have a domain, sparkonelabs.com, so I created a subdomain through the hostgator cPanel and pointed to the reserved IP of the DO droplet which was created for this project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This involved creating an A record for the subdomain. The subdomain is webhook.sparkonelabs.com<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ok, so two droplets were created, but was having trouble with getting Nginx and uwsgi to talk to each other. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the meantime I went on github and searched for a python based FB messenger webhook project with a python base and found the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\"><a href=\"https:\/\/github.com\/iTeam-S\/Ampalibe?tab=readme-ov-file\">https:\/\/github.com\/iTeam-S\/Ampalibe?tab=readme-ov-file<\/a> &#8212; A quick easy FB messenger boilerplate<\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/ngrok.com\/\">https:\/\/ngrok.com\/<\/a> &#8212; A reverse tunnel solution for deploying localhost with https for testing<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Well here we are and I feel pretty dumb. A week! Just to get some webhooks and API calls to work&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anyway, the following script was created and run against an Ampalibe server running on localhost at port 4555:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#!\/bin\/bash\nCHALLENGE_ACCEPTED = 'ok'\necho &quot;This script tests the webhook located at localhost:4555, proper functioning will generate a console print 'CHALLENGE_ACCEPTED'&quot;\ncurl -X GET &quot;localhost:4555?hub.verify_token=8af92b1dc35e60f7&amp;hub.challenge=CHALLENGE_ACCEPTED&amp;hub.mode=subscribe&quot;\n\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">#!\/bin\/bash<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">CHALLENGE_ACCEPTED<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">ok<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">echo<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">This script tests the webhook located at localhost:4555, proper functioning will generate a console print &#39;CHALLENGE_ACCEPTED&#39;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">curl<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">X<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">GET<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">localhost:4555?hub.verify_token=8af92b1dc35e60f7&amp;hub.challenge=CHALLENGE_ACCEPTED&amp;hub.mode=subscribe<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">So the verification function works, and the proper Verification request type is GET.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anyway, There is another line to the testing, and it crashes the Ampalibe server with a key-error, however&#8230; Worrying about that is co-lateral with the issue at hand. Obviously the problem here is not with the webhook. It is working, or at least working enough when I send the message template from the localhost.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In order to determine if the problem is with a local firewall, I can run the same test from the VPS droplet, with localhost&#8217;s port 4555 open. However, I suspect that the FB messenger app itself it not sending out the requests these webhooks are expecting, in fact not sending out any requests at all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>So I decided I wanted to build a chat bot, specifically for Oxford House; which will allow natural language queries concerning the rules and data associated with the particular house and organization in my locale. After looking into this a bit, and experimenting with some more naive implementations using selenium and other automation solutions, I<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","om_disable_all_campaigns":false,"pagelayer_contact_templates":[],"_pagelayer_content":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1216","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building an Oxford House Chat Bot - SparkOne() Labs Official Site<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building an Oxford House Chat Bot - SparkOne() Labs Official Site\" \/>\n<meta property=\"og:description\" content=\"So I decided I wanted to build a chat bot, specifically for Oxford House; which will allow natural language queries concerning the rules and data associated with the particular house and organization in my locale. After looking into this a bit, and experimenting with some more naive implementations using selenium and other automation solutions, I\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/\" \/>\n<meta property=\"og:site_name\" content=\"SparkOne() Labs Official Site\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61551444286908\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-30T02:18:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-01T15:18:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png?fit=1152%2C896&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1152\" \/>\n\t<meta property=\"og:image:height\" content=\"896\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sparkonelabs\" \/>\n<meta name=\"twitter:site\" content=\"@sparkonelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/person\\\/ee3bd21f007818ac04abf178e749642c\"},\"headline\":\"Building an Oxford House Chat Bot\",\"datePublished\":\"2024-03-30T02:18:29+00:00\",\"dateModified\":\"2024-04-01T15:18:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/\"},\"wordCount\":501,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#organization\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/\",\"name\":\"Building an Oxford House Chat Bot - SparkOne() Labs Official Site\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#website\"},\"datePublished\":\"2024-03-30T02:18:29+00:00\",\"dateModified\":\"2024-04-01T15:18:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/2024\\\/03\\\/30\\\/building-an-oxford-house-chat-bot\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building an Oxford House Chat Bot\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#website\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/\",\"name\":\"SparkOne() Labs Official Site\",\"description\":\"SparkOne Labs is a Science, Art and Technology blog. Email: sparkonelabs@sparkonelabs.com\",\"publisher\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#organization\"},\"alternateName\":\"SparkOne Labs\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#organization\",\"name\":\"SparkOne() Labs\",\"alternateName\":\"SparkOne Labs\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo_sparkone_12.png\",\"contentUrl\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo_sparkone_12.png\",\"width\":1152,\"height\":896,\"caption\":\"SparkOne() Labs\"},\"image\":{\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61551444286908\",\"https:\\\/\\\/x.com\\\/sparkonelabs\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/#\\\/schema\\\/person\\\/ee3bd21f007818ac04abf178e749642c\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\\\/\\\/sparkonelabs.com\\\/home\"],\"url\":\"https:\\\/\\\/sparkonelabs.com\\\/home\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building an Oxford House Chat Bot - SparkOne() Labs Official Site","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/","og_locale":"en_US","og_type":"article","og_title":"Building an Oxford House Chat Bot - SparkOne() Labs Official Site","og_description":"So I decided I wanted to build a chat bot, specifically for Oxford House; which will allow natural language queries concerning the rules and data associated with the particular house and organization in my locale. After looking into this a bit, and experimenting with some more naive implementations using selenium and other automation solutions, I","og_url":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/","og_site_name":"SparkOne() Labs Official Site","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61551444286908","article_published_time":"2024-03-30T02:18:29+00:00","article_modified_time":"2024-04-01T15:18:05+00:00","og_image":[{"width":1152,"height":896,"url":"https:\/\/i0.wp.com\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png?fit=1152%2C896&ssl=1","type":"image\/png"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@sparkonelabs","twitter_site":"@sparkonelabs","twitter_misc":{"Written by":"admin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/#article","isPartOf":{"@id":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/"},"author":{"name":"admin","@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/person\/ee3bd21f007818ac04abf178e749642c"},"headline":"Building an Oxford House Chat Bot","datePublished":"2024-03-30T02:18:29+00:00","dateModified":"2024-04-01T15:18:05+00:00","mainEntityOfPage":{"@id":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/"},"wordCount":501,"commentCount":0,"publisher":{"@id":"https:\/\/sparkonelabs.com\/home\/#organization"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/","url":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/","name":"Building an Oxford House Chat Bot - SparkOne() Labs Official Site","isPartOf":{"@id":"https:\/\/sparkonelabs.com\/home\/#website"},"datePublished":"2024-03-30T02:18:29+00:00","dateModified":"2024-04-01T15:18:05+00:00","breadcrumb":{"@id":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sparkonelabs.com\/home\/2024\/03\/30\/building-an-oxford-house-chat-bot\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sparkonelabs.com\/home\/"},{"@type":"ListItem","position":2,"name":"Building an Oxford House Chat Bot"}]},{"@type":"WebSite","@id":"https:\/\/sparkonelabs.com\/home\/#website","url":"https:\/\/sparkonelabs.com\/home\/","name":"SparkOne() Labs Official Site","description":"SparkOne Labs is a Science, Art and Technology blog. Email: sparkonelabs@sparkonelabs.com","publisher":{"@id":"https:\/\/sparkonelabs.com\/home\/#organization"},"alternateName":"SparkOne Labs","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sparkonelabs.com\/home\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sparkonelabs.com\/home\/#organization","name":"SparkOne() Labs","alternateName":"SparkOne Labs","url":"https:\/\/sparkonelabs.com\/home\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/logo\/image\/","url":"https:\/\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png","contentUrl":"https:\/\/sparkonelabs.com\/home\/wp-content\/uploads\/2024\/01\/logo_sparkone_12.png","width":1152,"height":896,"caption":"SparkOne() Labs"},"image":{"@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61551444286908","https:\/\/x.com\/sparkonelabs"]},{"@type":"Person","@id":"https:\/\/sparkonelabs.com\/home\/#\/schema\/person\/ee3bd21f007818ac04abf178e749642c","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8a8c84ca952e624e7407ec63589bc91e7996574dee7a01c13a96c536c341e9?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/sparkonelabs.com\/home"],"url":"https:\/\/sparkonelabs.com\/home\/author\/admin\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts\/1216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/comments?post=1216"}],"version-history":[{"count":5,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts\/1216\/revisions"}],"predecessor-version":[{"id":1226,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/posts\/1216\/revisions\/1226"}],"wp:attachment":[{"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/media?parent=1216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/categories?post=1216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sparkonelabs.com\/home\/wp-json\/wp\/v2\/tags?post=1216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}