Runkitでwebhookを作る

外部からのリクエストに応じてobnizを動かしてみる

runkitにはエンドポイントという機能があり,外部からのURLアクセスを受け付ける事ができます.
Webhookとして活用できるので,活用の幅が広がりますね!
HTTPS対応なので,色々なサービスと連携させることができます

URLに応じてLEDをオン・オフするプログラムを書いてみましょう

// Runkit Endpoint Example

const Obniz = require("obniz");
const express = require("@runkit/runkit/express-endpoint/1.0.0");
const app = express(exports);

const yourObnizId = "OBNIZ\_ID\_HERE";  // write your obniz id

app.get("/", async (req, res) => {

    let obniz = new Obniz(yourObnizId);

    let connected = await obniz.connectWait({timeout:10});

    if(connected){
         let led = obniz.wired("LED", {anode:0, cathode:1});
         let changed = "";
         if(req.query.led == "on"){
            led.on();
            changed = "on";
         }else{
            led.off();
            changed = "off";
         }

         obniz.resetOnDisconnect(false);
         obniz.close();

         res.send("LED Changed to "+changed);
    }

});

Node.jsで有名なフレームワークであるExpressを使って実装します.
このページのコードの右下に,runボタンの代わりにURLが表示されています.
このボタンを押してみましょう

runkit上でプログラムを書いている場合はendpointを押します

"LED Changed to off"と表示されれば成功です.
もし,下のようなエラーが表示されたら,obniz idが間違っていないか,obnizの電源が入っているかを確認してください

{
  "error": "timeout",
  "message": "The server did not return a response quickly enough."
}

"LED Changed to off"がうまく表示されたら,今度はLEDを光らせてみましょう
endpointを押したときに飛ばされるURLの後ろに?led=onをつけます.

https://untitled-kgxjycirmufe.runkit.shだった場合はhttps://untitled-kgxjycirmufe.runkit.sh?led=onです.

そちらのURLへ飛んでみましょう

"LED Changed to on"と表示され,LEDがついたら成功です!

LEDをオフにしたいときは?led=offに変更して試しましょう
たとえば,このようになります
https://untitled-kgxjycirmufe.runkit.sh?led=off

LEDは消えましたか?おめでとうございます
これで,世界中どこからでもLチカをすることができるようになりました!

publishして好きなURLをつける

先程エンドポイントを作りましたが,URLがランダムな文字列のURLでした.
https://untitled-kgxjycirmufe.runkit.sh

これだと覚えにくいので,自分の好きなURLに変えましょう

まずrunkit上でコードを書き,notebookに名前をつけます.
"untitled-notebook"のところに好きな名前を入れます.
今回は"obniz-led-onoff"としました

publishを押すとpublish設定画面が出てきます.

リリースすれば,次のURLが使えるようになります

https://runkit.com/[ユーザー名]/[notebookの名前]/[バージョン]

ユーザー名が9wickでnotebookの名前が"obniz-led-onoff"の場合,

https://runkit.com/9wick/obniz-led-onoff/1.0.0になります