1一言でいうと
Kintoneのアカウントを持たない社外の人(つくば商事)に、Kintoneの中の受付情報を、安全に・リアルタイムに見せる仕組みです。
これは トヨクモ「kViewer」が担っている役割そのものを、自前で実装したものです。
さらに kViewer には無い 「つくば商事側で管理する機能(確認状況・社内メモ・担当者)」まで載せています。
さらに kViewer には無い 「つくば商事側で管理する機能(確認状況・社内メモ・担当者)」まで載せています。
※ FormBridge(フォーム)は既に自作代替(zenbu-kaketsuke-form)を実証済み。今回はその kViewer 版にあたります。
2何を解決したのか
| これまで | いま | |
|---|---|---|
| 流れ | ZENBUが夜間の問い合わせをKintoneに記録 → つくば商事はKintoneを見られない → 翌営業日に電話で1件ずつ口頭で移管 |
ZENBUがKintoneに記録 → 登録した内容がそのまま画面に出る → つくば商事が自分で確認・対応 |
| ZENBU | 毎回の電話移管の工数/伝え漏れリスク | 電話移管ゼロ |
| つくば商事 | 電話を待つしかない/記録が手元に残らない | いつでも自分で確認・社内共有・管理できる |
3全体構造
ZENBU 受付オペレーター
夜間の問い合わせを受けて入力
▼入力
Kintone #21「【駆け付け・コール】受付管理」
サイボウズのクラウド/受付データの原本(ここが唯一の正)
▼REST APIで読み取り(読み取り専用トークン・毎回ライブ取得)
Cloudflare Worker = 本システムの本体
世界中のCloudflareサーバー上で24時間稼働(誰のPCにも依存しない)
画面の配信ログイン/一覧表/詳細/CSV
Kintone取得30秒ごとに最新を取得
D1データベースつくば側の確認状況・社内メモ・担当者
Cron(2分毎)新着メール通知+死活監視
静的配信使い方ムービーの音声
▼HTTPS + 合言葉でログイン
つくば商事のPC(ブラウザ)
一覧を見る/確認状況・メモを記録/電話する
ポイント:つくば商事はKintoneに一切触れません。Kintoneとの通信はすべてWorkerの内側で完結し、外からはKintoneの存在もトークンも見えません。
4部品と役割
| 部品 | 役割 | 使っているもの |
|---|---|---|
| 本体(画面・API) | ログイン、一覧表、詳細、CSV出力 | Cloudflare Worker(JavaScript) |
| データ源 | 受付レコード(原本) | Kintone #21/REST API・読み取り専用トークン |
| 管理状態の保存 | 確認状況・社内メモ・担当者(つくば商事の運用データ) | Cloudflare D1(SQLite) |
| 定期実行 | 新着のメール通知/死活監視 | Cloudflare Cron(2分ごと) |
| 認証 | 合言葉でアクセス制限 | HttpOnly Cookie(90日) |
| 音声・静的ファイル | 使い方ムービーのナレーション | Cloudflare 静的アセット |
51件の受付が届くまで(処理の流れ)
- ZENBUのオペレーターが、夜間の問い合わせを Kintone #21 に登録する
- つくば商事の画面が 30秒ごとにWorkerへ「最新をください」と問い合わせる
- Workerが Kintone APIから毎回ライブで取得(キャッシュしない=常に最新)
- Workerが D1の確認状況・社内メモを合成して画面へ返す
- 画面に表示。新着があれば 音・通知でお知らせ
- 別途 Cronが2分ごとに新着を検知して メール通知(宛先設定後に稼働)
- つくば商事が 確認状況(未確認→対応中→完了)・社内メモ・担当者を記録 → D1に保存され、社内の全員にリアルタイム共有
6安全設計(見せてよいものだけ見せる)
- Kintoneのトークンは Worker の内側(シークレット)に保管し、ブラウザには絶対に渡さない
- 画面に返す項目はホワイトリスト方式(業務に必要な項目だけ。それ以外は構造的に出せない)
- 合言葉でアクセス制御。未ログインではデータAPIは401で拒否
- つくば商事が書き込めるのは D1(確認状況・メモ)だけ。ZENBUのKintoneは書き換えられない・壊されない
- 使い方ムービー・ガイドは公開ページだが、掲載しているのは全て架空のサンプル(個人情報なし)
現状 #21 はつくば商事専用の受付アプリ(全件がつくば商事)のため全件を表示しています。将来 #21 に他クライアントを混在させる運用になった場合は、絞り込み条件の追加が必要です。
7止まらない設計
- 誰のPCにも依存しない:ローカルPC常駐のツールとは違い、Cloudflareのサーバー上で24時間動く(PCの電源が落ちていても稼働)
- 自己監視:Cronが2分ごとにKintoneへの到達を自己チェック。連続失敗(約4分)でLarkへ緊急アラート、復旧時も通知
- 公開ヘルスページ:
/statusで稼働状況を機械可読に公開(外部の死活監視サービスからも監視可能) - 唯一の現実的な停止要因=KintoneのAPIトークン失効。これも監視で数分以内に検知し、対処法つきで通知
8なぜ自前で作ったのか(kViewerとの比較)
トヨクモ kViewer プロフェッショナル
月 ¥30,000
年 ¥360,000(税抜)
今回の自前実装
実質 ¥0
Cloudflare 無料枠内で稼働
| 観点 | kViewer(トヨクモ) | 自前実装(今回) |
|---|---|---|
| 費用 | 月¥30,000/年¥360,000 | 実質¥0(無料枠内) |
| Kintoneを社外に見せる | ○ | ○ |
| 閲覧者側の管理機能 (確認状況・社内メモ・担当者) | 製品の枠内(別アプリ/別料金の設計が必要) | ○ 業務に合わせて自由に実装 |
| 画面デザイン・UX | 製品のテンプレートの範囲 | 完全に自由(基幹システム型で作成) |
| 通知・死活監視 | 製品仕様に依存 | 自前で組み込み(Lark即時アラート) |
| 依存先 | トヨクモ | Cloudflare(自社アカウント) |
トヨクモ4サービス+YOOMで 年約221万円 が削減検討の対象。今回はそのうち kViewer(年¥360,000)の役割を自前で実現できることを実証しました。
※ 実際の解約可否は、kViewer管理画面の利用棚卸し(他にどんな用途で使われているか)の完了が前提です。
※ 実際の解約可否は、kViewer管理画面の利用棚卸し(他にどんな用途で使われているか)の完了が前提です。
9他のクライアントへの横展開
クライアント名は変数化してあり(CLIENT_NAME)、別クライアントへは 「名前・合言葉・対象Kintoneアプリ・トークン」を差し替えて再デプロイする構造です。
ただし他クライアントは別のKintoneアプリ(例:#548ケイアイ/#543ワンダーライフ/#562 TOKO)で項目の構成が違うため、フル横展開には「クライアント別の項目マッピング設定」を追加する必要があります(設計済み・次段の作業)。
10構成情報(社内向け)
| 本番URL | https://zenbu-tsukuba-yakan.zenbu-cc.workers.dev |
|---|---|
| 使い方ガイド/ムービー | /manual//guide |
| 稼働状況 | /status |
| データ源 | Kintone #21(iv234ntfjjtr)/読み取り専用APIトークン |
| ソース | C:\AutoImport\tsukuba_yakan_viewer(npx wrangler deploy で更新) |
| DB | Cloudflare D1 tsukuba-yakan-db(テーブル rec_state) |
株式会社ZENBU ソリューション事業部/つくば商事 夜間受付管理システム 仕組み解説