kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Autocodeことはじめで、カウンターを作ってみた

以下で紹介されていたローコードプラットフォーム「Autocode」、Voiceflow Dialog Management APIの実行環境として使えるんではないか?ということで、ちょっと試してみた。

目次

まずは触ってみる

上記サイトで紹介されているのをまず一通りやってみた所感としては、

  • いろいろなサービスとの連携がライブラリ化されている実行環境がセットになってるリッチなIDE、という感じ
  • サンプルにもあるDiscordとの連携を試してみた感じ、コード補完が使いやすく、パラメータもGUIで設定できたり、と各サービスのAPIドキュメントを見なくても簡単にかける

ということで、Voiceflow Dialog Management APIを、Autocodeで予め連携が用意されているものとつなげるならば、とても楽にかける気がします。

ただ、Discordも個人的にはあんまり使ってないし、まずは以下で作ったWebサイトチャットボットの普通のバックエンドAPIとして使いたい。

kun432.hatenablog.com

この場合、

  • マルチターンな会話の場合には、cookieを使ったセッション処理が必要になる
  • CORSに対応させる必要になる

というところで、Webサーバ部分の処理をある程度書かないといけないのだけど、このあたりはAutocodeではあまり気にしなくて良さそうな部分っぽくて、ドキュメント見ててもあまりピンとこない。

そこで、いろいろ調べつつまずはよくあるカウンターを書いてみました。

// authenticates you with the API standard library
// type `await lib.` to display API autocomplete
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
const cookie = require('cookie');

console.log(JSON.stringify(context.http.headers, null, 2));

let counter = 1;
if (context.http.headers.hasOwnProperty('cookie')){
  let cookies = cookie.parse(context.http.headers.cookie);
  counter = cookies.hasOwnProperty('counter') ? Number(cookies.counter) + 1 : 1;
}

const body = {
  "counter": counter
};

return {
  headers: {
    'Content-Type': 'application/json',
    'Set-Cookie': cookie.serialize('counter', counter)
  },
  statusCode: 200,
  body: Buffer.from(JSON.stringify(body))
};

expressの場合、cookieやセッション周りの処理はexpress-sessionあたりを使えば色々隠蔽されてシンプルに書けるのだけど、Autocodeだと

  • cookieを渡す場合はカスタムレスポンスを使って自分でset-cookieしないといけなさそう。
  • cookieを取り出す場合、リクエストはcontextに全て入っているので、cookieを取り出して、自分でパースしないといけなさそう。

ということで、上記のような感じに。なんていうか、expressにはだいぶ甘やかされてるんだなという気がしたw

単にクライアント側のcookie使ってやり取りしてるだけでサーバーサイドでセッション管理とか何もやってないし、CORSあたりも考えないといけないので、先は長い・・・

参考

HTTPリクエストの取り出し方

docs.autocode.com

カスタムなHTTPレスポンスを返す

docs.autocode.com

npmパッケージも使える

docs.autocode.com

今回はクライアントcookieしか使ってないけど、セッションやるなら多分このへん。アプリ単位じゃなくてアカウント単位ってところはちょっと気をつけないといけないかも。PostgreSQL/Airtable/Google Sheetsあたりを使ってもいいかもしれない。

docs.autocode.com