Zoho CRMで商談を作ったら、WorkDriveにフォルダ一式と閲覧用リンクを自動で用意する

案件が増えてくると、商談を1件作るたびにWorkDriveへ手でフォルダを作り、その中に「図面」「現場画像」といったサブフォルダを並べて……という作業が地味に手間でした。毎回発生するうえ、人によって作り方がバラつくのも気になっていたので、まるごと自動化してみました。最終的には、商談を作るとWorkDriveにフォルダ一式ができて、社外にも渡せる閲覧専用リンクまで商談レコードに入る、というところまで持っていきました。実際に動かしながら何度かつまずいたので、その過程も含めて残しておきます。
作りたかったもの
やりたかったことはシンプルです。商談(進捗管理)モジュールにレコードを作成したら、WorkDriveの決まった親フォルダの下に「商談名_商談ID」という名前のフォルダを自動で作る。さらにその中へ5つのサブフォルダを用意し、最後に外部の人にも共有できる閲覧専用リンクを生成して、商談レコードのフィールドに書き戻す。ここまでを一気にやらせるのが目標でした。
使った仕組み
ワークフロー+カスタム関数
トリガーは商談の「作成時」ワークフローにして、そこからDelugeのカスタム関数を呼ぶ構成にしました。関数には引数として商談のレコードIDを1つ渡すだけです。あとは関数の中で商談情報を取得し、WorkDriveの操作とレコード更新までを順番に処理させています。引数マッピングでは、商談の「レコードID」を渡すのがポイントで、ここを商談名などにしてしまうと後の取得処理が動きません。
WorkDriveとの接続
WorkDriveを操作するにはOAuth接続が必要です。フォルダ作成だけなら WorkDrive.files.CREATE のスコープで足ります。ただし後述する外部リンク作成には別系統のスコープが必要で、ここを見落として一度はまりました。
フォルダ作成はネイティブタスクが楽だった
フォルダ作成は、Delugeのネイティブタスク zoho.workdrive.createFolder にフォルダ名・親フォルダID・接続名を渡すだけで作れます。ここは拍子抜けするほどあっさり動きました。サブフォルダは、5つの名前を並べたリストをループで回し、商談フォルダのIDを親にして同じタスクを呼ぶだけです。作成結果から返ってくるフォルダIDとpermalinkを、商談レコードのフィールドに書き戻しておくと、レコードからワンクリックでフォルダを開けるようになります。
つまずいたところ
親フォルダIDを取り違えてR008
最初の実行ではフォルダができず、ログに R008 Unauthorized access が出ました。原因は親フォルダIDの取り違えでした。WorkDriveのフォルダIDは、ブラウザでそのフォルダを開いたときのURLの folders/ の後ろの部分です。私はURL前半に出てくる別のID(チーム側のID)を入れてしまっていて、存在しないフォルダを指定していたためのエラーでした。正しいIDに直したら一発で通りました。エラーの文面が「権限がない」風なので権限を疑いがちですが、実際はIDが見つからないケースでも同じエラーが返ってくる、というのが学びでした。
外部リンクで接続エラー
フォルダ作成が固まったので、次に外部リンク生成を足したところ、今度は「connection is not connected」というエラー。接続自体は生きているのにこのメッセージが出るのは、叩こうとしているAPIに対してスコープが足りていないサインでした。フォルダ作成用の files.CREATE だけでは、リンク作成のエンドポイントは呼べません。接続にリンク系のスコープを追加して再認証したら解決しました。
「閲覧専用」のはずが編集できた
ここが一番のハマりどころでした。外部リンクは links エンドポイントにPOSTして作成でき、権限は role_id という数値で指定します。最初、参考にしたサンプルにあった role_id の値をそのまま使ったところ、できたリンクを開いてみると編集できる状態でした。閲覧専用に対応する番号が、公式の情報をあたっても確証を持って分かりませんでした。
仕上げと運用上の注意
完成版では、商談レコードに「フォルダURL」「フォルダID」「共有リンクURL」「フォルダ作成済みフラグ」のフィールドを持たせています。関数の冒頭で、フォルダURLに値が入っていたら何もせず終了するようにして、二重作成を防いでいます。createFolder は呼ぶたびにフォルダを作ってしまうので、再実行で同名フォルダが増えないよう、この入口のガードは大事です。トリガーも「作成時」だけに限定して、編集のたびに走らないようにしています。
やってみての感想
ネイティブタスクが用意されている部分は本当に簡単で、フォルダ作成まわりはほぼ詰まらずに動きました。一方で、外部リンクのように仕様の細かい数値が公開情報からは読み取りにくい部分は、手を動かして実物で確かめるフェーズが必要でした。手作業で毎回作っていたフォルダ準備がゼロになり、共有リンクまで自動で揃うようになったので、運用に乗せる価値は十分にあったと思います。同じように案件ごとのフォルダ整備に手間を感じている方は、試してみる価値があるはずです。