士業 사무소 Azure Functions 상담 폼 알림 점검
Azure Functions 상담 폼의 개인정보, secret, 실패 알림, 예약 경로 점검입니다.
士業 사무소는 작은 자동화 하나로 신뢰를 잃을 수 있습니다. 상담 폼이 상속, 노무, 계약, 보조금 내용을 이메일로 보내고 전체 본문을 로그에 남기며 실패를 놓치면 문제가 됩니다. 이 글은 Claude Code로 Azure Functions 상담 알림을 점검합니다.
Key Points
리뷰는 개인정보, 동의, 상담 본문, 메일 실패, 중복 제출, 예약 경로에서 시작합니다. HTTP trigger는 편하지만 anonymous, raw log, plain secret은 위험합니다.
Workflow From Form to Booking
흐름은 폼에서 예약 또는 콜백까지 이어집니다. Claude Code는 function.json, app settings, logs, Key Vault references, failure handling을 봅니다. 사무소가 어떤 상담을 받을지 결정합니다.
| Flow | Azure Functions review | Human review |
|---|---|---|
| Form receive | HTTP trigger, method, auth, CORS | consent text and accepted case types |
| Notice | masked subject, request id, mail failure | confidential content and staff owner |
| Secret | app settings, Key Vault references | mail API key and access policy |
| Failure | retry record, alert, request id | callback and client communication |
| Booking | completion page and booking URL | whether the case can be booked |
What Claude Code Does and What Humans Decide
Claude Code drafts the Function shape, validation fields, logging policy, Key Vault note, failure checklist, and booking path. Humans decide legal, tax, labor, license, privacy, advertising, confidentiality, and whether to accept the consultation.
3 Use Cases
Use case 1: Split form fields and logs
- Input: form fields, case types, privacy consent, booking URL.
- Output: required fields, optional fields, mail fields, no-log fields.
- Human review: consultation text, personal data, advertising wording, urgent cases.
Use case 2: Review HTTP trigger settings
- Input: function.json, methods, authLevel, App Service auth note, form origin.
- Output: POST-only rule, CORS note, auth warning, and test commands.
- Human review: public exposure, bot protection, stopped services, and phone-first cases.
Use case 3: Handle mail failure and booking path
- Input: mail provider, failure log, retry owner, booking URL, completion page.
- Output: failed notice record, retry rule, staff alert, and booking button rule.
- Human review: which cases can book automatically and which need a call.
Copy-Paste Prompt
Act as a Korean professional services Azure Functions consultation-form reviewer.
Goal: prevent missed notices, personal-data logs, plain secrets, and missing booking paths.
Review:
- form fields and case types
- privacy consent
- function.json
- app settings draft
- mail provider note
- completion page and booking URL
Return:
1. HTTP trigger method and auth review
2. raw-body log warning
3. secret and Key Vault reference note
4. failed-notice retry checklist
5. booking path and staff owner
6. five settings a beginner should inspect today
Working Check Code
// verify-azure-function-consultation-form.mjs
// No dependencies. Run with: node verify-azure-function-consultation-form.mjs
const functionJson = {
bindings: [
{
authLevel: "anonymous",
type: "httpTrigger",
direction: "in",
name: "req",
methods: ["post"]
},
{
type: "http",
direction: "out",
name: "res"
}
]
};
const source = [
"module.exports = async function (context, req) {",
" console.log(req.body);",
" const apiKey = 'SENDGRID_API_KEY_plain_text';",
" await sendMail(req.body.email, req.body.message, apiKey);",
" context.res = { status: 200, body: 'ok' };",
"};"
].join("\n");
const formPolicy = {
fields: ["name", "email", "caseType", "message"],
required: ["name", "email", "caseType", "message", "privacyConsent"],
hasIdempotencyKey: false,
hasRetryQueue: false,
hasReservationLink: false
};
const problems = [];
const trigger = functionJson.bindings.find((binding) => binding.type === "httpTrigger");
if (!trigger || trigger.authLevel === "anonymous") {
problems.push({ item: "authLevel", fix: "avoid anonymous public posting unless another protection layer exists" });
}
if (/console\.log\(req\.body\)/.test(source)) {
problems.push({ item: "raw body log", fix: "log request id and case type, not the consultation details" });
}
if (/SENDGRID_API_KEY|API_KEY_plain_text/.test(source)) {
problems.push({ item: "plain secret", fix: "use Key Vault references or approved app settings" });
}
if (!formPolicy.required.includes("privacyConsent")) {
problems.push({ item: "privacy consent", fix: "require consent before sending the consultation form" });
}
if (!formPolicy.hasIdempotencyKey) {
problems.push({ item: "duplicate submit", fix: "store an idempotency key from email, timestamp bucket, and message hash" });
}
if (!formPolicy.hasRetryQueue) {
problems.push({ item: "mail failure", fix: "record failed notices and retry or alert a staff member" });
}
if (!formPolicy.hasReservationLink) {
problems.push({ item: "booking path", fix: "include a reservation or callback path after the notice" });
}
if (problems.length > 0) {
console.table(problems);
process.exitCode = 1;
} else {
console.log("Azure Functions consultation form checklist passed.");
}
Pitfall: Common Failure Cases
실패는 테스트 이메일 한 통으로 끝났다고 보는 데서 옵니다. 실제 상담이 기록되고 보호되고 담당자에게 갔는지가 핵심입니다.
The first failure is calling the project done when email arrives once. A professional office needs traceability for missed notices, duplicate submissions, and booking handoff.
The second failure is logging the whole consultation text. Store request id, case type, time, and result instead.
The third failure is using a plain API key in source code or notes. Move secrets to an approved settings flow and consider Key Vault references.
FAQ
Q. 상담 본문을 이메일에 넣어도 되나요?\n\nA. 사무소 정책에 따릅니다. 전달 범위가 넓다면 마스킹된 요약과 안전한 보관 위치가 낫습니다.
Q. Are Azure Functions too much for a small office?
A. Sometimes. If a form service already handles consent, notice, and booking, use it. Functions help when the office needs custom routing, retry records, and integration with booking or internal tools.
Q. Is a Function key enough?
A. It depends on exposure. Public forms may need bot protection, CORS review, rate limits, App Service authentication, or another gateway.
Q. Where should teams go next?
A. Offices that need forms, Azure Functions, Key Vault, logging policy, and booking flow reviewed together can start from ClaudeCodeLab training.
What I Verified
한국어 버전은 상담 폼, 개인정보, 누락 알림, 예약, 상담 CTA를 유지했습니다. I checked Azure Functions HTTP trigger, triggers and bindings, Key Vault references, App Service authentication, and Azure Functions security. I also checked the CTA, internal link, executable JavaScript, and locale coverage.
관련 글
법률사무소의 상담 메모 정리와 서면 초안 보조를 Claude Code로 단축하는 실무법
법률사무소의 상담 메모 정리와 서면 초안 보조를 생성형 AI로 단축하는 실무 절차. 복붙 프롬프트, 검증 스크립트, 개인정보 주의점까지 1인칭으로 정리했습니다.
Claude Code로 GCP Cloud Functions 만들기: HTTP, Secret Manager, Cloud Logging
Claude Code로 Cloud Run functions를 구축합니다. HTTP, secrets, logging, 배포 확인과 흔한 함정을 다룹니다.
Claude Code로 Serverless Functions 만들기: Lambda와 Workers 실전
Claude Code로 서버리스 함수를 안전하게 만드는 방법. 요구사항 프롬프트, 플랫폼 선택, 환경 변수, 멱등성, 재시도, 테스트와 배포 체크를 다룹니다.
무료 PDF: Claude Code 치트시트
이메일을 입력하면 명령, 리뷰 습관, 안전한 워크플로를 정리한 PDF를 받을 수 있습니다.
개인정보를 안전하게 관리하며 스팸을 보내지 않습니다.
작성자 소개
Masa
Claude Code 실무 워크플로와 팀 도입을 검증하는 엔지니어입니다.