{"id":3237,"date":"2018-03-09T00:00:00","date_gmt":"2018-03-09T07:00:00","guid":{"rendered":"http:\/\/yyc.ninja\/index.php\/2018\/03\/09\/71-seconds-to-build-your-free-custom-webhook-illustrated-step-by-step-7a09b9e240ba\/"},"modified":"2026-10-19T12:18:15","modified_gmt":"2026-10-19T18:18:15","slug":"71-seconds-to-build-your-free-custom-webhook-illustrated-step-by-step-7a09b9e240ba","status":"publish","type":"post","link":"https:\/\/yyc.ninja\/index.php\/2018\/03\/09\/71-seconds-to-build-your-free-custom-webhook-illustrated-step-by-step-7a09b9e240ba\/","title":{"rendered":"71 seconds to build your free custom webhook (Illustrated step by\u00a0step)"},"content":{"rendered":"<h3 id=\"8520\" class=\"graf graf--h3 graf--leading graf--title\">71 seconds to build your free custom webhook (Illustrated step by\u00a0step)<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<blockquote id=\"e0bb\" class=\"graf graf--blockquote graf-after--figure\">Disclaimer\u00a0: I\u2019m not affiliated with gitlab in anyway, or being compensated from any recommendations I make, in fact this tutorial with minimal tweaking can work with Bitbucket-CI, Travis-CI, Circle-CI and others.<\/blockquote>\n<strong>[Unedited]<\/strong>\n<p id=\"1fff\" class=\"graf graf--p graf-after--blockquote\">If you you want to skip the discussion below and go straight to the instructions, scroll to where it says <strong class=\"markup--strong markup--p-strong\"><em class=\"markup--em markup--p-em\">Let\u2019s get you started.<\/em><\/strong><\/p>\n<p id=\"3284\" class=\"graf graf--p graf-after--p\">So Google is <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.com\/exploring-android\/exploring-background-execution-limits-on-android-oreo-ab384762a66c\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.com\/exploring-android\/exploring-background-execution-limits-on-android-oreo-ab384762a66c\">cracking down on android apps background services<\/a>.<\/p>\n<p id=\"47f6\" class=\"graf graf--p graf-after--p\">No wonder that the bitcoin app I\u2019m using did not alert me for the recent price dip.<\/p>\n<p id=\"6252\" class=\"graf graf--p graf-after--p\">There are many scenarios when you want a service to continuously check for a condition, and alert you when this condition is met. something like a webhook.<\/p>\n<p id=\"467a\" class=\"graf graf--p graf-after--p\">The first definition that pops up when you <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/webhooks.pbworks.com\/w\/page\/13385124\/FrontPage\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/webhooks.pbworks.com\/w\/page\/13385124\/FrontPage\">google webhook<\/a> is:<\/p>\n\n<blockquote id=\"a594\" class=\"graf graf--blockquote graf-after--p\">A <strong class=\"markup--strong markup--blockquote-strong\">WebHook<\/strong> is an HTTP callback: an HTTP POST that occurs when something happens; a simple event-notification via HTTP POST. A web application implementing <strong class=\"markup--strong markup--blockquote-strong\">WebHooks<\/strong> will POST a message to a URL when certain things happen.<\/blockquote>\n<p id=\"e804\" class=\"graf graf--p graf-after--blockquote\">In the previous tutorial we have tackled <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.com\/@YYC_Ninja\/56-seconds-to-get-gitlab-to-do-periodic-jobs-for-you-6a731b977559\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.com\/@YYC_Ninja\/56-seconds-to-get-gitlab-to-do-periodic-jobs-for-you-6a731b977559\">running periodic jobs with gitlab<\/a>.<\/p>\n<p id=\"df85\" class=\"graf graf--p graf-after--p\">In this very similar tutorial we will add conditions, we will create a webhook:<\/p>\n\n<ul class=\"postList\">\n \t<li id=\"438f\" class=\"graf graf--li graf-after--p\">A periodic job will run daily\u00a0: GET bitcoin price<\/li>\n \t<li id=\"adbd\" class=\"graf graf--li graf-after--li\">It will check if a condition is met\u00a0: if the bitcoin price is greater than x and lesser than y<\/li>\n \t<li id=\"1c6e\" class=\"graf graf--li graf-after--li\">If the condition is met it will POST an alert\u00a0: we will direct this post request to an http request inspector to see it in action, BUT we can also\u00a0,with the proper authentication, direct it to another service like IFTTT or Zapier to cause it to trigger 100s of connected services. For example let your smart lights turn green if bitcoin is within a specific price range, or even trigger a song to play.<\/li>\n<\/ul>\n<p id=\"cf75\" class=\"graf graf--p graf-after--li\"><a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.com\/@YYC_Ninja\/99-seconds-to-make-bitcoin-call-your-phone-number-a8cbd9740f76\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.com\/@YYC_Ninja\/99-seconds-to-make-bitcoin-call-your-phone-number-a8cbd9740f76\">In another article<\/a> we discuss in details how to connect this same project to IFTTT and have IFTTT alert us with a phone call, email, or tweet when the price of bitcoin reaches a specific range.<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"d0b0\" class=\"graf graf--p graf-after--figure\">There are many ways for creating webhooks, but this is my favourite way because:<\/p>\n\n<ol class=\"postList\">\n \t<li id=\"4d66\" class=\"graf graf--li graf-after--p\">It\u2019s easy, this whole tutorial can be completed from a browser, you can use your mobile phone and in 71 seconds you would have a functioning webhook.<\/li>\n \t<li id=\"0251\" class=\"graf graf--li graf-after--li\">It can be set up in seconds\u00a0: I don\u2019t need to set up a server on my own, not even a cloud instance, so I can focus on creating what I need, rather than get tangled in system admin tasks\u00a0.<\/li>\n \t<li id=\"09e9\" class=\"graf graf--li graf-after--li\">Although it\u2019s also easy to run a cron job from an always-on always-connected computer or a server, like a Raspberry Pi. This is not practical for everyone, specially travellers and digital nomads.<\/li>\n \t<li id=\"9192\" class=\"graf graf--li graf-after--li\">It provides more freedom and versatility\u00a0: you can obviously use IFTTT to trigger events, IFTTT is very slick with a great API and a nice free tier, but then you\u2019re limited to the integrations IFTTT does and does not provide, also you\u2019re limited by their caps, for example free IFTTT caps your tweets at 100\/day, although that\u2019s perfectly fine, you can\u2019t compare that to the actual Twitter cap of 2,400 tweets\/day.<\/li>\n \t<li id=\"3b4a\" class=\"graf graf--li graf-after--li\">This can last, with other services you\u2019ll end up getting a bill, either after you pass a certain quota or because it can run as long as gitlab continues to offer 2000 min\/month of free build time on shared build runners. this is enough to run our sample code here 16 times per day, this is once every 90 minutes each month. As of this writing Bitbucket on the other hand only offers 50 minutes\/month.<\/li>\n<\/ol>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"ffed\" class=\"graf graf--p graf-after--figure\">5. Gitlab integrates the code repo with the build system, sure you can host your code on Github and build with Travis or Circle-CI, but I would like to login once and manage both the repo and the build process, and I don\u2019t have to mess around with ssh keys to access another service.<\/p>\n<p id=\"25d2\" class=\"graf graf--p graf-after--p\">6. Gitlab allows private repos\u00a0: Travis CI allows free unlimited build minutes for personal projects, but the last I\u2019ve checked Travis-CI only supports free builds for public repos.<\/p>\n<p id=\"6887\" class=\"graf graf--p graf-after--p\">7. Gitlab uses containers to allow users to create their build stack, so although for this tutorial we\u2019re using a simple bash file, in reality you can specify a container that tests, builds and deploys your Android app, Java application using Maven or Gradle, Ruby, Node\u00a0, Python, Django and a long list of applications, better yet Gitlab has ready standard templates to automatically set the build stack for you. I\u2019ve forked <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/gitlab.com\/ninjayoto\/gitlab-ci-yml\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/gitlab.com\/ninjayoto\/gitlab-ci-yml\">a list of ready templates here<\/a>.<\/p>\n<p id=\"8bd9\" class=\"graf graf--p graf-after--p\">So in essence you provide your code, and Gitlab-CI provides the right environment to build your code (you just tweak the YAML file template provided by Gitlab-CI). Here is <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/docs.gitlab.com\/ce\/ci\/examples\/README.html\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/docs.gitlab.com\/ce\/ci\/examples\/README.html\">the official Gitlab-CI examples page<\/a>.<\/p>\n<p id=\"9fec\" class=\"graf graf--p graf-after--p\">If you are into browser automation, there\u2019s <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.freecodecamp.org\/4-steps-to-build-an-automated-testing-pipeline-with-gitlab-ci-24ccab95535e\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.freecodecamp.org\/4-steps-to-build-an-automated-testing-pipeline-with-gitlab-ci-24ccab95535e\">a cool tutorial by Joyz<\/a> for using Gitlab-CI to automatically spin up a docker container ready with chrome-headless to run Selenium tests.<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"dab6\" class=\"graf graf--p graf-after--figure\">8. The project build file\u00a0.gitlab-ci.yml is very similar to the configuration file used in many other services, including Travis-CI, Bitbucket-CI Circle-CI and others, even Jenkins has a YAML file plugin. this makes migration easy if the need arise.<\/p>\n<p id=\"dab7\" class=\"graf graf--p graf-after--p\">9. Not that we used an open API to retrieve Bitcoin price, this does not mean that we are limited to APIs that does not require private key or token authentication.<\/p>\n<p id=\"664c\" class=\"graf graf--p graf-after--p\">Like other services you can store private keys as variables in Gitlab-CI, for example MY_API_PRIVATE_KEY\u00a0, and then use \u2018$MY_API_PRIVATE_KEY\u2019 in your\u00a0.gitlab-ci.yml file to authenticate when calling the API.<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"4081\" class=\"graf graf--p graf-after--figure\">if you do that make sure that you set your build Pipeline toprivate, otherwise other will be able to see your keys in plain text.<\/p>\n\n<blockquote id=\"6b12\" class=\"graf graf--pullquote graf-after--p\">Let\u2019s get you\u00a0started:<\/blockquote>\n<blockquote id=\"52ff\" class=\"graf graf--blockquote graf-after--pullquote\"><strong class=\"markup--strong markup--blockquote-strong\">Level<\/strong>\u00a0: All levels<\/blockquote>\n<blockquote id=\"4075\" class=\"graf graf--blockquote graf-after--blockquote\"><strong class=\"markup--strong markup--blockquote-strong\">Requirements<\/strong>\u00a0: Any web browser<\/blockquote>\n<ol class=\"postList\">\n \t<li id=\"5e19\" class=\"graf graf--li graf-after--blockquote\"><strong class=\"markup--strong markup--li-strong\">Sign in<\/strong> (or create a new account) at G<a class=\"markup--anchor markup--li-anchor\" href=\"https:\/\/gitlab.com\/users\/sign_in\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/gitlab.com\/users\/sign_in\">itlab.com<\/a> (10 seconds)<\/li>\n<\/ol>\n<p id=\"a990\" class=\"graf graf--p graf-after--li\">2. <strong class=\"markup--strong markup--p-strong\">Create a new Project\u00a0:<\/strong> Click on <strong class=\"markup--strong markup--p-strong\"><em class=\"markup--em markup--p-em\">New Project<\/em><\/strong> button to create a new repo, in the name field type <em class=\"markup--em markup--p-em\">btc-webhook<\/em> or any other name. (9 seconds)<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"fda9\" class=\"graf graf--p graf-after--figure\">Then save it By clicking on <strong class=\"markup--strong markup--p-strong\"><em class=\"markup--em markup--p-em\">Create Project<\/em><\/strong> (1 second)<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"6343\" class=\"graf graf--p graf-after--figure\">3. <strong class=\"markup--strong markup--p-strong\">Create a<\/strong><em class=\"markup--em markup--p-em\"> btc-price-alert.sh<\/em><strong class=\"markup--strong markup--p-strong\"> file in this new project\u00a0: <\/strong>Click on <strong class=\"markup--strong markup--p-strong\"><em class=\"markup--em markup--p-em\">New File<\/em><\/strong>, copy and paste the following snippet into the <em class=\"markup--em markup--p-em\">btc-price-alert.sh<\/em> file then click save (10 seconds)<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<pre id=\"bed4\" class=\"graf graf--pre graf-after--figure\">#!\/bin\/bash\necho 'request Bitcoin price';\nx=$(curl <a class=\"markup--anchor markup--pre-anchor\" href=\"https:\/\/min-api.cryptocompare.com\/data\/price?fsym=BTC%5C&amp;tsyms=CAD\" target=\"_blank\" rel=\"nofollow noopener\" data-href=\"https:\/\/min-api.cryptocompare.com\/data\/price?fsym=BTC\\&amp;tsyms=CAD\">https:\/\/min-api.cryptocompare.com\/data\/price?fsym=BTC\\&amp;tsyms=CAD<\/a>)<\/pre>\n<pre id=\"4e7c\" class=\"graf graf--pre graf-after--pre\">echo 'removing all non digit from the response'\nx=${x\/\/[^0-9\\.]\/}<\/pre>\n<pre id=\"d255\" class=\"graf graf--pre graf-after--pre\">echo 'Bitcoin price is CA$ '\"$x\"<\/pre>\n<pre id=\"22bb\" class=\"graf graf--pre graf-after--pre\">echo 'removing decimals from the price'\nx=${x%.*}<\/pre>\n<pre id=\"0efc\" class=\"graf graf--pre graf-after--pre\">echo 'checking if the price within the defined range'<\/pre>\n<pre id=\"1fda\" class=\"graf graf--pre graf-after--pre\">    if [ \"$x\" -ge 10000 -a \"$x\" -lt 14000 ]; then \n        echo 'price is within range, will post an alert'\n        curl -i -X POST <a class=\"markup--anchor markup--pre-anchor\" href=\"https:\/\/putsreq.com\/wkDdMQWhaOyalisaIe49\" target=\"_blank\" rel=\"nofollow noopener\" data-href=\"https:\/\/putsreq.com\/wkDdMQWhaOyalisaIe49\">https:\/\/putsreq.com\/wkDdMQWhaOyalisaIe49<\/a> --data 'price='\"$x\"\n  \n    else echo 'Price is not within range, no alert posted this time'<\/pre>\n<pre id=\"3114\" class=\"graf graf--pre graf-after--pre\">fi<\/pre>\n<blockquote id=\"a02c\" class=\"graf graf--blockquote graf-after--pre\">This will check if the price of bitcoin above CA$ 10,000 and less than CA$ 14,000\u00a0. feel free to customize it.<\/blockquote>\n<p id=\"9a96\" class=\"graf graf--p graf-after--blockquote\">4. <strong class=\"markup--strong markup--p-strong\">Create another file, call it\u00a0.gitlab-ci.yml file\u00a0: <\/strong>(20 seconds) Click on the home menu icon to go back to your project\u2019s home page.<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<pre id=\"e7a1\" class=\"graf graf--pre graf-after--figure\">test:<\/pre>\n<pre id=\"fc23\" class=\"graf graf--pre graf-after--pre\"> script:<\/pre>\n<pre id=\"1b46\" class=\"graf graf--pre graf-after--pre\"> - bash btc-price-alert.sh<\/pre>\n<blockquote id=\"3ade\" class=\"graf graf--blockquote graf-after--pre\">this is a simple commands, to run the bash file that we\u2019ve created<\/blockquote>\n<p id=\"b6ad\" class=\"graf graf--p graf-after--blockquote\">Click on the <strong class=\"markup--strong markup--p-strong\"><em class=\"markup--em markup--p-em\">Commite changes<\/em><\/strong> button, this will trigger it to build and run.<\/p>\n<p id=\"da92\" class=\"graf graf--p graf-after--p\">5. <strong class=\"markup--strong markup--p-strong\">Schedule it to check price everyday\u00a0:<\/strong> click on the CI\/CD icon to expand the menu, select Schedules to set up a name and a timer for your webhook to trigger. (11 seconds)<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"24ef\" class=\"graf graf--p graf-after--figure\">6. <strong class=\"markup--strong markup--p-strong\">Congrats! you\u2019re done<\/strong>. if the price within the range you\u2019ve specified, the webhook will post an alert. go to to <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/putsreq.com\/wkDdMQWhaOyalisaIe49\/inspect\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/putsreq.com\/wkDdMQWhaOyalisaIe49\/inspect\">this link in putsreq.com<\/a> to see it in action. (10 seconds)<\/p>\n\n<figure><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*umKjHd7cq0UHOcwm6H9cCw.png\" alt=\"\" \/>\n\n<figcaption>IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services<\/figcaption><\/figure>\n<p id=\"ba98\" class=\"graf graf--p graf-after--figure\">This job will run everyday as long as your free 2000\/month build minutes do not run out.<\/p>\n<p id=\"1483\" class=\"graf graf--p graf-after--p\">You can find the <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/gitlab.com\/ninjayoto\/btc-webhook\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/gitlab.com\/ninjayoto\/btc-webhook\">sample code here<\/a> and previous read the jobs <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/gitlab.com\/ninjayoto\/btc-webhook\/-\/jobs\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/gitlab.com\/ninjayoto\/btc-webhook\/-\/jobs\">build logs here<\/a><\/p>\n\n<blockquote id=\"f971\" class=\"graf graf--pullquote graf-after--p\">we can still kick it up a\u00a0notch<\/blockquote>\n<p id=\"8a5e\" class=\"graf graf--p graf-after--pullquote\">If still want to integrate your webhook with IFTTT, this can be easily be done<\/p>\n<p id=\"c3c4\" class=\"graf graf--p graf-after--p graf--trailing\">This will be the topic of <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.com\/@YYC_Ninja\/99-seconds-to-make-bitcoin-call-your-phone-number-a8cbd9740f76\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.com\/@YYC_Ninja\/99-seconds-to-make-bitcoin-call-your-phone-number-a8cbd9740f76\">the coming tutorial<\/a><\/p>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Get the next one in your inbox<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Enjoyed this? I write about local AI, self-hosting, and cloud cost ninjutsu. Join the Ninja Dispatch for occasional, high-signal notes. No fluff.<\/p>\n\n\n\n\t\t\t<form id=\"sib_signup_form_2\" method=\"post\" class=\"sib_signup_form\">\n\t\t\t\t<div class=\"sib_loader\" style=\"display:none;\"><img\n\t\t\t\t\t\t\tsrc=\"https:\/\/yyc.ninja\/wp-includes\/images\/spinner.gif\" alt=\"loader\"><\/div>\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_action\" value=\"subscribe_form_submit\">\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_id\" value=\"2\">\n                <input type=\"hidden\" name=\"sib_form_alert_notice\" value=\"Please fill out all required fields.\">\n                <input type=\"hidden\" name=\"sib_form_invalid_email_notice\" value=\"Please enter a valid email address.\">\n                <input type=\"hidden\" name=\"sib_security\" value=\"234cea1955\">\n\t\t\t\t<div class=\"sib_signup_box_inside_2\">\n\t\t\t\t\t<div style=\"\/*display:none*\/\" class=\"sib_msg_disp\">\n\t\t\t\t\t<\/div>\n                    \t\t\t\t\t<p class=\"sib-email-area\">\n    <input type=\"email\" class=\"sib-email-area\" name=\"email\" placeholder=\"you@example.com\" required=\"required\">\n<\/p>\n<p class=\"sib-FIRSTNAME-area\">\n    <input type=\"text\" class=\"sib-FIRSTNAME-area\" name=\"FIRSTNAME\" placeholder=\"First name (optional)\">\n<\/p>\n<input type=\"hidden\" class=\"sib-SOURCE_DOMAIN-area\" name=\"SOURCE_DOMAIN\" value=\"yyc.ninja\">\n<input type=\"hidden\" class=\"sib-SIGNUP_SOURCE-area\" name=\"SIGNUP_SOURCE\" value=\"post\">\n<p>\n    <input type=\"submit\" class=\"sib-default-btn\" value=\"Join the Ninja Dispatch\">\n<\/p>\n<p class=\"ninja-fineprint\">No spam. Unsubscribe anytime.<\/p>\t\t\t\t<\/div>\n\t\t\t<\/form>\n\t\t\t<style>\n\t\t\t\tform#sib_signup_form_2{background:#192a3d;border-radius:10px;padding:16px;font-family:inherit}form#sib_signup_form_2 input[type=text],form#sib_signup_form_2 input[type=email],form#sib_signup_form_2 select{width:100%;box-sizing:border-box;margin:0 0 10px 0;padding:10px 12px;border:1px solid #33465c;border-radius:8px;background:#0f1c29;color:#e8eef5;font-size:14px}form#sib_signup_form_2 input::placeholder{color:#8a9bb0}form#sib_signup_form_2 .sib-default-btn{width:100%;margin:2px 0 0 0;padding:11px 14px;background:#e63946;color:#ffffff;border:0;border-radius:8px;font-size:15px;font-weight:600;cursor:pointer}form#sib_signup_form_2 .sib-default-btn:hover{background:#d02f3c}form#sib_signup_form_2 p{margin:0 0 10px 0}form#sib_signup_form_2 .ninja-fineprint{margin:8px 0 0;font-size:11px;color:#8a9bb0;text-align:center}form#sib_signup_form_2 p.sib-alert-message {\n    padding: 6px 12px;\n    margin-bottom: 20px;\n    border: 1px solid transparent;\n    border-radius: 4px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\nform#sib_signup_form_2 p.sib-alert-message-error {\n    background-color: #f2dede;\n    border-color: #ebccd1;\n    color: #a94442;\n}\nform#sib_signup_form_2 p.sib-alert-message-success {\n    background-color: #dff0d8;\n    border-color: #d6e9c6;\n    color: #3c763d;\n}\nform#sib_signup_form_2 p.sib-alert-message-warning {\n    background-color: #fcf8e3;\n    border-color: #faebcc;\n    color: #8a6d3b;\n}\n\t\t\t<\/style>\n\t\t\t\n","protected":false},"excerpt":{"rendered":"<p>71 seconds to build your free custom webhook (Illustrated step by\u00a0step) IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services Disclaimer\u00a0: I\u2019m not affiliated with gitlab in anyway, or being compensated from any recommendations I make, in fact this tutorial with minimal tweaking can work with Bitbucket-CI, Travis-CI, Circle-CI [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,12,13],"tags":[],"class_list":["post-3237","post","type-post","status-publish","format-standard","hentry","category-hn","category-how-to","category-medium"],"featured_image_urls_v2":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","RoboGalleryMansoryImagesCenter":"","RoboGalleryPreload":"","1536x1536":"","2048x2048":""},"post_excerpt_stackable_v2":"<p>71 seconds to build your free custom webhook (Illustrated step by\u00a0step) IFTTT allows you to connect to hundreds of services and smart appliances, list of IFTTT\u00a0services Disclaimer\u00a0: I\u2019m not affiliated with gitlab in anyway, or being compensated from any recommendations I make, in fact this tutorial with minimal tweaking can work with Bitbucket-CI, Travis-CI, Circle-CI and others. [Unedited] If you you want to skip the discussion below and go straight to the instructions, scroll to where it says Let\u2019s get you started. So Google is cracking down on android apps background services. No wonder that the bitcoin app I\u2019m using&hellip;<\/p>\n","category_list_v2":"<a href=\"https:\/\/yyc.ninja\/index.php\/category\/how-to\/hn\/\" rel=\"category tag\">Hacker Noon Articles<\/a>, <a href=\"https:\/\/yyc.ninja\/index.php\/category\/how-to\/\" rel=\"category tag\">How To Ninja<\/a>, <a href=\"https:\/\/yyc.ninja\/index.php\/category\/how-to\/medium\/\" rel=\"category tag\">Medium Articles<\/a>","author_info_v2":{"name":"YYC Ninja","url":"https:\/\/yyc.ninja\/index.php\/author\/admin\/"},"comments_num_v2":"0 comments","_links":{"self":[{"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/posts\/3237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/comments?post=3237"}],"version-history":[{"count":4,"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/posts\/3237\/revisions"}],"predecessor-version":[{"id":3507,"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/posts\/3237\/revisions\/3507"}],"wp:attachment":[{"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/media?parent=3237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/categories?post=3237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yyc.ninja\/index.php\/wp-json\/wp\/v2\/tags?post=3237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}