見出し画像

make(旧 integromat) Tips集

こんにちは。
ノーコードツール『make』をサービス開発や身近な生産性向上に使っているのですが、日本語で検索しても情報があまり出てこないため、noteにまとめます。

基礎的な使い方というよりは、私が実際に開発の際に詰まった時に解決したメモをどんどん載せていきます。

そのため、順序はバラバラで、体系だった解説もしていません。検索にひっかかるようにし、できる限り多くの日本人のmakeクリエイターの時間を節約し、その時間をより本質的な価値創造に繋げていただけたらと祈っております。

注意:私は動けばいい派のため、ベストプラクティスとは限らないです。上級者の方のご指摘・修正、歓迎いたします。よろしくお願いいたします。

メモ書きなので、詳細載せていないことあります。要望あれば載せますので、コメントくださいませ。


シナリオ内で手動でオブジェクトや配列を作る場合


オブジェクト(collection)作るならSet Valuables。
これをarray aggregatorすれば配列にもなります。


シナリオ間のやりとり(API呼び出し、webhook)

サブシナリオを作っていかないと一気に煩雑になりますので、推奨します。

その際、リクエストを送る側のシナリオでは、HTTPモジュールを使います。リクエストを受ける側のシナリオ(サブシナリオ)では、webhookを使います。


前のシナリオしか持っていないデータは新しいシナリオに渡す必要があります。
form形式でデータを受け渡すと便利です。
ただ渡すデータが多い場合、新しいシナリオで再度データベースを読み込み直すということをしてます。


cf. makeにはDataStore機能があります。こちらは一時的にデータを保存することはやってくれ、シナリオ違っても参照してくれるのかなと思いますが、make内サービスにあまり依存したくないという思いがあり、外部のDBを利用しており、使ってません。
もしメリットがあったら知りたいです。


scenario input機能というものがあるようですが、有料プランの中でもプロプランになりますので試してません。

今の所HTTPとwebhookで困っている状況には陥っていません。


テキストを処理する

テキストを配列に分割するなど。英語ですが以下がヒントになります。


Repeaterモジュールの挙動 ループ処理はどう繰り返すのか。

Repeater モジュールがあると、その後ろからずっと繰り返されます。
データベースから取り出したデータが3つある場合、その後ろにRepeaterモジュールがあると1個目から順番にシナリオ処理されます。

youtubeは以下が参考になります。


複数のオブジェクトが返ってくるモジュールの後ろにフィルターを設定した場合、複数回処理が走る。 実質repeaterのような挙動

データベースから取り出した時など、複数のデータがある場合に、その後ろのモジュールとの間にフィルターを設定していると、そのフィルターに設定した条件に合致したデータだけが次に進みます。
その際に複数あると、それぞれのデータについて、repeaterと同じように、複数回シナリオが実行されます。
データA,B,Cが取り出し、フィルターでAとCが合致する場合、AとCについてそれぞれ実行されるということです。

注意として、フィルターがある場合とない場合で、データA,B,Cの扱われた方が異なることです。
フィルターがない場合、データA,B,Cがまとまって一つの配列として返されます。
しかし、フィルターがある場合は、データA,B,Cが個別に処理されます。


データベース系のモジュールを呼び出し、レコード内のあるカラムのデータを消す場合、make側で用意されているキーワードのeraseを使う。


""や、空白にしていてもデータは上書きされません。
airtableのupdateRecordなどを想定しています。
make側で用意されているeraseを使ってみてください。ただeraseと入力すると、eraseがデータベースに入ってしまうため、モーダルウィンドウでeraseを検索し、選択してください。


変数の一括変換はdevtoolを用いると楽です

makeの旧名のintegromat dev toolというものが存在します。
これを用いるとモジュール内にある変数を一括で変換することができます。

私の場合は、本番で動いているシナリオがある際に、
別にシナリオを作成してそこで開発を進めています。
統合する際に、別のシナリオで作っていたモジュールを移すわけですが、シナリオが違うと同じ種類のモジュールでも利用する変数が異なるため、一個一個変えていくことは大変です。

こちらから、ダウンロードしてみてください。chromeの拡張機能です。

拡張機能の説明はこちらから(英語) Swap Variableという項目をご確認ください


しかし、{{1.events[].replyToken}}のような入れ子の場合には、書き換えられていません。今の所理由がわからず、解決していません。


条件分岐のif elseのelseは fallback routeが該当します。

Routerから伸びているフィルターのところで設定が可能です。Routerにつき一つの設定になります。
どこにも条件が当てはまらない時にシナリオが予期しない動作をしないように、elseの処理はやることをお勧めします。


配列をJSONにして、HTTPで外部APIを呼ぶ

以下の公式のドキュメントに書いてあるため、参考にしてください。

JSON create時にmapを選択して、配列を入れるということをお忘れなく。ここで詰まってました。

このようにmapします。


HTTPでサブシナリオを呼び出し、返り値を手にいれる場合は、webhook responseを使う

サブシナリオでは、custome webhookで受けて、webhook responseで返します。
返す際にresponseモジュールの設定で、headerに以下のように設定したらJSONで返ります。メインシナリオ側でJSON parseをして使えるようにしてください。
設定していないとbinaryで返るみたいです。


ChatGPTのAPIの新機能、Function Callingを活用する際は、makeのOpen AIのうち、『Make an API Call』を利用する (2023/7/6時点)

ノーコードツールのmake はまだChatGPTのAPIの新機能、Function Callingに対応していないようです。 既存のモジュールではなく、「Make an API Call」でやりましょう。

画像のBodyは公式の例をそのまま入れてます。

https://openai.com/blog/function-calling-and-other-api-updates


日付・時間関係

coming soon

時差の問題に注意です。
基本はローカル(日本時間)です。
しかし、airtableやgoogleスプレッドシート、その他クラウドサービスに
makeから時間を入れる場合、時差を考慮する必要がある時があります。

また、airtableでは、表示がローカルタイム(日本時間)でも、makeからデータベースに時刻を入れる際に、GMT(グリニッジ標準日時)で処理されていることがありました。
要注意です。


色々な詰まるパターンがあるので、もし何かあったら個別に連絡いただけたらと思います。


この記事が気に入ったらサポートをしてみませんか?