Demo

IFTTT as FaaS

Prepare Functions

Set Environment Variables

$ export WSK_AUTH=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
$ export WSK_APIHOST=FQDN_OR_IP

$ export IFTTT_KEY=ZZZZZZZZZZZZZZZZZZZZZ
$ export HTTP_PROXY="http://id:pw@proxy.example.com:8080"
$ export HTTPS_PROXY="https://id:pw@proxy.example.com:8433"
$ export NO_PROXY="localhost,127.0.0.1,0.0.0.0,172.17.0.1"

Start FaaS Shell in Docker

$ docker run -d -p 5984:5984 apache/couchdb

$ make -e docker_image_prefix=nao16t run

$ FAASSHELL_APIHOST=http://127.0.0.1:8080

$ DEMO=ec29e90c-188d-11e8-bb72-00163ec1cd01:0b82fe63b6bd450519ade02c3cb8f77ee581f25a810db28f3910e6cdd9d041bf

Run IFTTT as FaaS

Notice that “UpdateArg” reconciles the parameter mismatch between “HelloWorld” output, ‘{“payload”: “Hello, IFTTT!”}’, and “SaveResult” input, ‘{value1:”Hello, IFTTT!”}’ making use of “InputPath”, “ResultPath”, and “OutputPath”.

$ curl -ksX PUT ${FAASSHELL_APIHOST}/statemachine/save_result.json?overwrite=true \
  -H 'Content-Type: application/json' -d @samples/ifttt/asl/save_result.json -u $DEMO 
  {
    "asl": {
      "Comment":"A Hello World example of the Amazon States Language using a Task state",
      "StartAt":"HelloWorld",
      "States": {
        "HelloWorld": {
          "Next":"UpdateArg",
          "Resource":"frn:wsk:functions:::function:hello",
          "Type":"Task"
        },
        "UpdateArg": {
          "InputPath":"$.payload",
          "Next":"SaveResult",
          "OutputPath":"$.ifttt",
          "ResultPath":"$.ifttt.value1",
          "Type":"Pass"
        },
        "SaveResult": {
          "End":true,
          "Resource":"frn:ifttt:webhooks:::function:save_result",
          "Type":"Task"
        }
      }
    },
    "dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[]),pass('UpdateArg',[result_path('$.ifttt.value1'),input_path('$.payload'),output_path('$.ifttt')])$
  task('SaveResult',\"frn:ifttt:webhooks:::function:save_result\",[])])",
    "name":"save_result.json",
    "namespace":"demo",
    "output":"ok"
  }
$ curl -ksX POST ${FAASSHELL_APIHOST}/statemachine/save_result.json?blocking=true \
  -H 'Content-Type: application/json' -d '{"input": {"name": "IFTTT"}}' \
  -u $DEMO | jq .output -
  "Congratulations! You've fired the save_result event"

Open your Google sheets “IFTTT_Maker_Webhooks_Events”, https://docs.google.com/spreadsheets/, and check if “Hello, IFTTT!” is save in a new row.