{"id":1471,"date":"2023-07-05T00:00:00","date_gmt":"2023-07-04T22:00:00","guid":{"rendered":"https:\/\/demo.sidekick.be\/itenium\/ai-the-slack-meme-bot\/"},"modified":"2025-11-28T13:31:43","modified_gmt":"2025-11-28T12:31:43","slug":"ai-the-slack-meme-bot","status":"publish","type":"post","link":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/","title":{"rendered":"The itenium Slack Meme Bot\u00ae : with AI?"},"content":{"rendered":"<p>We\u2019re talking a whole whopping 180 lines of code here, including newlines and comments. ChatGPT is all the hype, so surely it must be able to write this very very simple app, right?<\/p>\n<h1 id=\"initial-prompt\">Initial Prompt<\/h1>\n<p>Let\u2019s dumb it down a bit, forgetting about Docker, the static file server and the <code>already-sent<\/code> folder for now.<\/p>\n<blockquote>\n<p>Hello there ChatGPT. Could you create a program for me that, every friday at 16 hours selects a random image from a directory and sends it to a Slack channel?<\/p>\n<\/blockquote>\n<p>It created a small Python script with inline configuration for Slack API token and meme directory. And then suggested using <code>cron<\/code> or <code>Task Scheduler<\/code> for the friday 16h part. That\u2019s actually a good idea, I should add Windows instructions to the installation blog post for non-Docker usage \ud83d\ude03<\/p>\n<p>Anyway, let\u2019s try it out!<\/p>\n<pre><code class=\"language-sh\">pip install slack-sdk\npython 1-InitialPrompt.py\n<\/code><\/pre>\n<p>Well, that didn\u2019t quite work:<\/p>\n<pre><code class=\"language-py\">  File \".1-InitialPrompt.py\", line 26\n    print(f\"Image sent to Slack channel '{channel}' successfully!\")\n                                                                 ^\nSyntaxError: invalid syntax\n<\/code><\/pre>\n<p>Uhoh, still using Python 2.7 in 2023, let\u2019s quickly update my <code>$env:PATH<\/code>.<\/p>\n<p>The full script:<\/p>\n<pre><code class=\"language-py\">import os\nimport random\nimport glob\nfrom slack_sdk import WebClient\nfrom slack_sdk.errors import SlackApiError\n\nSLACK_API_TOKEN = \"&lt;your-slack-api-token&gt;\"\nIMAGE_DIRECTORY = \"\/path\/to\/your\/image\/directory\"\nslack_channel = \"#your-channel-name\"\n\nslack_client = WebClient(token=SLACK_API_TOKEN)\n\ndef send_image_to_slack(channel, file_path):\n    try:\n        response = slack_client.files_upload(\n            channels=channel,\n            file=file_path,\n            title=\"Random Image\",\n        )\n        print(f\"Image sent to Slack channel '{channel}' successfully!\")\n    except SlackApiError as e:\n        print(f\"Failed to send image to Slack channel '{channel}': {e.response['error']}\")\n\n\nimage_files = glob.glob(os.path.join(IMAGE_DIRECTORY, \"*.jpg\"))\nrandom_image = random.choice(image_files)\nsend_image_to_slack(slack_channel, random_image)\n<\/code><\/pre>\n<p>The main reason I used the WebHook in the first place because, well getting an API to work\u2026<\/p>\n<ul>\n<li>Fixed a warning by replacing <code>slack_client.files_upload<\/code> to <code>_v2<\/code> with single channel<\/li>\n<li>And then a barrage of API errors\n<ul>\n<li>not_allowed_token_type: <code>xapp<\/code> tokens vs <code>xoxp<\/code> and <code>xoxb<\/code> etc<\/li>\n<li>missing_scope: needed OAuth scopes: <code>files:write<\/code>, \u2026<\/li>\n<li>not_in_channel<\/li>\n<li>channel_not_found: <code>\/invite @MemeBot<\/code> did not solve this nor did <code>chat:write.public<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>At this point I was a bit at a loss, the channel most surely exists and I added the bot to it. So\u2026 Let\u2019s ask ChatGPT?<\/p>\n<blockquote>\n<p>What Slack OAuth scopes do I need to upload a file to a channel using the API?<\/p>\n<\/blockquote>\n<p>It gave me some additional scopes but they seemed irrelevant and I indeed got the same error after.<\/p>\n<h1 id=\"webhook-prompt\">WebHook Prompt<\/h1>\n<p>Let\u2019s go back to the WebHook then..<\/p>\n<blockquote>\n<p>Could you generate code using a Slack Webhook instead?<\/p>\n<\/blockquote>\n<p>Which resulted in code that can actually send a message to Slack. But not with a picture\u2026 It used <code>attachments: []<\/code> but that doesn\u2019t actually work. Even if it did, you would still need something to serve the files\u2026<\/p>\n<p>The program:<\/p>\n<pre><code class=\"language-py\">import os\nimport random\nimport glob\nimport requests\n\nSLACK_WEBHOOK_URL = \"https:\/\/hooks.slack.com\/services\/...\"\nIMAGE_DIRECTORY = \".\/memes\"\n\ndef send_image_to_slack(webhook_url, file_path):\n    try:\n        payload = {\n            \"text\": \"Random Image\",\n            \"attachments\": [\n                {\n                    \"image_url\": file_path\n                }\n            ]\n        }\n        response = requests.post(webhook_url, json=payload)\n        response.raise_for_status()\n        print(f\"Image sent to Slack successfully!\")\n    except requests.exceptions.RequestException as e:\n        print(f\"Failed to send image to Slack: {str(e)}\")\n\nimage_files = glob.glob(os.path.join(IMAGE_DIRECTORY, \"*.jpg\"))\nrandom_image = random.choice(image_files)\n\nsend_image_to_slack(SLACK_WEBHOOK_URL, random_image)\n<\/code><\/pre>\n<p>It did manage to fix this with an additional prompt!<\/p>\n<blockquote>\n<p>Could you generate a Slack Webhook payload with text and an image?<\/p>\n<\/blockquote>\n<p>Which generated a working payload:<\/p>\n<pre><code>payload = {\n    \"text\": \"Random Image\",\n    \"attachments\": [\n        {\n            \"fallback\": \"Image\",\n            \"image_url\": file_path\n        }\n    ]\n}\n<\/code><\/pre>\n<p>Progress!! \ud83c\udf89<\/p>\n<h1 id=\"file-server\">File Server<\/h1>\n<blockquote>\n<p>Can you create a docker-compose with a service that executes a Python script with a cron job and a static file server service?<\/p>\n<\/blockquote>\n<p>This created<\/p>\n<ul>\n<li><code>docker-compose.yml<\/code>: Used nginx to create a working static file server<\/li>\n<li><code>Dockerfile<\/code>: Took a different approach to what I ended up with<\/li>\n<li><code>cronjob<\/code>: It even remembered I wanted to run this on fridays at 16h!<\/li>\n<\/ul>\n<p>It was time to integrate the two solutions. Some manual fixes and additional prompts later, it had generated something that seemed like it would work.<\/p>\n<blockquote>\n<p>Could you replace the python-script.py with the one you generated earlier?<\/p>\n<\/blockquote>\n<blockquote>\n<p>Can we bring this all together?<br \/> A docker-compose that schedules a cron job that selects a random image from a mounted volume and sends the url as served by an nginx service to Slack using a webhook?<\/p>\n<\/blockquote>\n<blockquote>\n<p>You didn\u2019t include the Python script\u2026<br \/> This does not use the docker-compose variables you used in your earlier answer<br \/> The dockerfile should do a pip install of requests<\/p>\n<\/blockquote>\n<p>However it did not actually run the cron job\u2026 No logs to be found, it just sat there.<\/p>\n<p>Here it seemed I either ran against the limits of ChatGPT or against the limitations of my \u201cAI Prompt Engineering\u201d-skillz.<\/p>\n<h2 id=\"backtrack-hello-world\">Backtrack: Hello World<\/h2>\n<p>I then tried for over an hour to get ChatGPT to create a docker-compose that prints \u201cHello World\u201d.<\/p>\n<blockquote>\n<p>Let\u2019s try again: Can you create a docker-compose that schedules a cron job to print \u201cHello World\u201d every minute?<\/p>\n<\/blockquote>\n<p>Some of the things it tried:<\/p>\n<ul>\n<li><code>crontab<\/code> file with <code>echo<\/code><\/li>\n<li><code>docker-compose<\/code> with <code>Command<\/code><\/li>\n<li><code>startup.sh<\/code> to print Hello World instead<\/li>\n<li>\u2026<\/li>\n<li>Back to a Python script<\/li>\n<li>The <code>vixiecron<\/code> package<\/li>\n<\/ul>\n<p>At this point I was just copy pasting the code and nothing worked.<\/p>\n<h2 id=\"being-sassy\">Being Sassy<\/h2>\n<blockquote>\n<p>Do you think that if I keep asking changes that at some point it will actually work?<\/p>\n<\/blockquote>\n<p><em>\u2026 While I do my best to understand and assist with your requests, troubleshooting specific technical issues can be challenging without having direct access to your environment. \u2026<\/em><\/p>\n<p>And here is me, thinking that the entire philosophy of Docker is to not be dependent on the developer environment. Oh and I\u2019m also asking for a freaking \u201cHello World\u201d app here\u2026<\/p>\n<h1 id=\"troubleshooting\">Troubleshooting<\/h1>\n<p>ChatGPT pretty much gave up after a while and shifted into troubleshooting mode.<\/p>\n<p>It came up with some interesting suggestions, most of which I had already tried at that point.<\/p>\n<pre><code class=\"language-sh\">docker logs &lt;container_id_or_name&gt;\n\ndocker exec -it &lt;container_id_or_name&gt; sh\npython \/app\/python-script.py\ncat \/etc\/cron.d\/cronjob\nservice cron status\ncat \/var\/log\/syslog\n<\/code><\/pre>\n<h1 id=\"conclusion\">Conclusion<\/h1>\n<p>It is a gadget, nothing more.<\/p>\n<p>I felt like I was asking questions to a junior developer who copy pasted code from somewhere and handed it over without any testing. Everything it does needs to be reviewed thoroughly. To me, it doesn\u2019t seem like it can be used for much more than generating some skeleton code, saving you a few keystrokes.<\/p>\n<h2 id=\"the-horror\">The Horror<\/h2>\n<p>During technical interviews, I sometimes come across what I call a \u201cTrial &amp; Error\u201d-programmer: They try something and then run the code, check if the result is correct and if it is not, they try something different. Rinse and repeat.<\/p>\n<p>I hope that ChatGPT and the like are not raising a generation of Trial &amp; Error programmers because that is exactly how I am feeling after copy pasting code for a few hours and making small adjustments here and there.<\/p>\n<p>I quit this exercise the moment it spewed out the following:<\/p>\n<pre><code class=\"language-py\">while True:\n  schedule.run_pending()\n  time.sleep(1)\n<\/code><\/pre>\n<blockquote>\n<p>Is it a good idea to do that?<\/p>\n<\/blockquote>\n<p><em>You raise a valid concern. Using an infinite loop with a sleep statement in the main script might not be the most efficient approach, as it can consume unnecessary resources.<\/em><\/p>\n<p>After which it generated code without scheduling \ud83d\ude03<\/p>\n<h3 id=\"reading-vs-writing\">Reading vs Writing<\/h3>\n<blockquote>\n<p>\u201cIndeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code. \u2026[Therefore,] making it easy to read makes it easier to write.\u201d \u2015 Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship<\/p>\n<\/blockquote>\n<p>Or how about this one:<\/p>\n<blockquote>\n<p>\u201cDebugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.\u201d &#8211; Brian W<\/p>\n<\/blockquote>\n<p>ChatGPT is not helping you by generating code you do not understand, it is just making debugging and future feature development that much harder, if it succeeded in producing something that works.<\/p>\n<h2 id=\"the-good\">The Good<\/h2>\n<p>If you already know how to code and want to have 80% of your code generated for you, you may want to have a look at using ChatGPT. Just remember that:<\/p>\n<ul>\n<li>It spits out random bugs, even in things that it got correct earlier (ex: \u201cImage\u201d -&gt; \u201cRandom Image\u201d in the Slack webhook payload)<\/li>\n<li>It generates code and configuration that it does not actually use<\/li>\n<\/ul>\n<p>One thing that did impress me was that after I told it a few times \u201cNope, also doesn\u2019t work\u201d, it gave some pretty good recommendations on how to debug and troubleshoot its (broken) solutions.<\/p>\n<p>It seems to be quite good at solving really small very well known problems. I always forget the exact syntax for <code>docker exec<\/code>. A simple prompt gave me a correct copy-pastable answer! That is to be expected considering how it works beneath the hood I guess.<\/p>\n<h2 id=\"introspection\">Introspection<\/h2>\n<p>From ChatGPT itself:<\/p>\n<p><em>Programming requires creativity, problem-solving skills, and a deep understanding of various technologies. While I can offer guidance, suggestions, and code examples, it\u2019s important to remember that human programmers bring their unique expertise, experience, and insights to the table. The human element is crucial in the programming process, and no AI can replicate the entirety of human skills and knowledge.<\/em><\/p>\n<p><strong>Please consider me as a tool that can assist you in your programming journey, providing information, ideas, and helping with specific tasks.<\/strong><em>However, the ingenuity and skill of human programmers remain essential for developing robust and innovative solutions.<\/em><\/p>\n<p><em>If you have any further questions or need assistance with any programming topic, feel free to ask. I\u2019m here to help in any way I can!<\/em><\/p>\n<p>It was unable to tell me if that response was hardcoded or not.<\/p>\n<h2 id=\"final-thoughts\">Final Thoughts<\/h2>\n<p>I\u2019m disappointed, for sure. It created a working Python script quite fast which got my hopes up, but then it failed at what is typically the hardest part anyway: integration.<\/p>\n<p>I will be using this to generate small things on the side. Like my Bash skills are below par, I\u2019m sure ChatGPT can give me something that already mostly works.<\/p>\n<p>Oh man, I feel old, bitter and out of touch now.<\/p>\n<h1>Also in this series<\/h1>\n<ul>\n<li>Part 1: <a href=\"\/javascript\/install-the-slack-meme-bot\/\">The itenium Slack Meme Bot\u00ae : Installation<\/a><\/li>\n<li>Part 2: <a href=\"\/javascript\/implementing-the-slack-meme-bot\/\">The itenium Slack Meme Bot\u00ae : Implementation<\/a><\/li>\n<li>This Part: The itenium Slack Meme Bot\u00ae : with AI?<\/li>\n<\/ul>\n<h1>Extras<\/h1>\n<p><b>Stuff that came into being during the making of this post<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/itenium-be\/slack-meme-poster-ai\">Some of the code that ChatGPT created<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A few hours of fun, playing around with Docker, Cron, Node, Shell and a FileServer. Can ChatGPT do this too? And maybe in less time?<\/p>\n<p>To be honest, I am very biased against ChatGPT but still hoping, very hard, that it can just do this, so that I can start using it for simple stuff, POCs and more!<\/p>\n","protected":false},"author":1,"featured_media":2021,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[3],"tags":[20,4],"class_list":["post-1471","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-fun","tag-product"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The itenium Slack Meme Bot\u00ae : with AI? - Itenium<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The itenium Slack Meme Bot\u00ae : with AI? - Itenium\" \/>\n<meta property=\"og:description\" content=\"A few hours of fun, playing around with Docker, Cron, Node, Shell and a FileServer. Can ChatGPT do this too? And maybe in less time?To be honest, I am very biased against ChatGPT but still hoping, very hard, that it can just do this, so that I can start using it for simple stuff, POCs and more!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/\" \/>\n<meta property=\"og:site_name\" content=\"Itenium\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-04T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T12:31:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"360\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Usdevelop\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Usdevelop\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/\",\"name\":\"The itenium Slack Meme Bot\u00ae : with AI? - Itenium\",\"isPartOf\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png\",\"datePublished\":\"2023-07-04T22:00:00+00:00\",\"dateModified\":\"2025-11-28T12:31:43+00:00\",\"author\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\"},\"breadcrumb\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#primaryimage\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png\",\"contentUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png\",\"width\":360,\"height\":300,\"caption\":\"a slack meme bot written by chatgpt\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/demo.sidekick.be\/itenium\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The itenium Slack Meme Bot\u00ae : with AI?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/\",\"name\":\"Itenium\",\"description\":\"We build software. We build careers.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\",\"name\":\"Usdevelop\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"caption\":\"Usdevelop\"},\"sameAs\":[\"https:\/\/demo.sidekick.be\/itenium\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The itenium Slack Meme Bot\u00ae : with AI? - Itenium","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"The itenium Slack Meme Bot\u00ae : with AI? - Itenium","og_description":"A few hours of fun, playing around with Docker, Cron, Node, Shell and a FileServer. Can ChatGPT do this too? And maybe in less time?To be honest, I am very biased against ChatGPT but still hoping, very hard, that it can just do this, so that I can start using it for simple stuff, POCs and more!","og_url":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/","og_site_name":"Itenium","article_published_time":"2023-07-04T22:00:00+00:00","article_modified_time":"2025-11-28T12:31:43+00:00","og_image":[{"width":360,"height":300,"url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png","type":"image\/png"}],"author":"Usdevelop","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Usdevelop","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/","url":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/","name":"The itenium Slack Meme Bot\u00ae : with AI? - Itenium","isPartOf":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#website"},"primaryImageOfPage":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#primaryimage"},"image":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#primaryimage"},"thumbnailUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png","datePublished":"2023-07-04T22:00:00+00:00","dateModified":"2025-11-28T12:31:43+00:00","author":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022"},"breadcrumb":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#primaryimage","url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png","contentUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/slack-meme-bot3.png","width":360,"height":300,"caption":"a slack meme bot written by chatgpt"},{"@type":"BreadcrumbList","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/ai-the-slack-meme-bot\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/demo.sidekick.be\/itenium\/"},{"@type":"ListItem","position":2,"name":"The itenium Slack Meme Bot\u00ae : with AI?"}]},{"@type":"WebSite","@id":"https:\/\/demo.sidekick.be\/itenium\/#website","url":"https:\/\/demo.sidekick.be\/itenium\/","name":"Itenium","description":"We build software. We build careers.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022","name":"Usdevelop","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","caption":"Usdevelop"},"sameAs":["https:\/\/demo.sidekick.be\/itenium"]}]}},"_links":{"self":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1471","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/comments?post=1471"}],"version-history":[{"count":3,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1471\/revisions"}],"predecessor-version":[{"id":2271,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1471\/revisions\/2271"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media\/2021"}],"wp:attachment":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media?parent=1471"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/categories?post=1471"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/tags?post=1471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}