웹훅으로 어떤 시스템에서든 WhatsApp 메시지 보내기
쇼핑몰, CRM, 예약 도구는 주문이 들어오거나 결제가 실패하거나 예약이 잡히는 순간을 이미 알고 있습니다. 웹훅을 쓰면 이런 이벤트 하나하나를 WhatsApp 메시지로 바꿀 수 있고, 개발 작업도 필요 없습니다. 계획하고, 보안을 갖추고, 테스트하는 방법을 알려 드립니다.
MonoChat 팀 업데이트: 5 분 소요
이 페이지 내용
다른 시스템에서 어떤 일이 일어났을 때 WhatsApp 메시지를 보내려면, 그 시스템의 웹훅을 수신 측으로 연결하면 됩니다. 수신 측은 전화번호로 고객을 찾아 승인된 WhatsApp 템플릿을 보냅니다. 쇼핑몰, CRM, 예약 도구는 이미 주문, 결제, 예약마다 웹훅을 보내고 있습니다. 해야 할 일은 어떤 이벤트에 메시지를 보낼지 고르고, 템플릿을 작성하고, URL을 보호하고, 고객이 보기 전에 실제 요청으로 테스트하는 것입니다.
이 가이드에서는 계획 방법, 이를 좌우하는 WhatsApp 규칙, 그리고 자체 웹훅 URL에서 시작하는 플로로 MonoChat에서 구성하는 방법을 다룹니다.
웹훅이란 무엇이고, 무엇이 아닌가
웹훅은 이벤트가 발생했을 때 한 시스템이 지정된 URL로 보내는 HTTP 요청입니다. Shopify는 주문이 생성될 때, WooCommerce는 주문이 업데이트될 때, CRM은 딜의 단계가 바뀔 때, 예약 도구는 예약이 잡힐 때 웹훅을 보낼 수 있습니다. 요청에는 이벤트의 세부 정보가 보통 JSON으로 담깁니다. 주문 번호, 금액, 고객 이름, 그리고 WhatsApp에 가장 중요한 전화번호입니다.
웹훅 자체는 고객에게 아무것도 보내지 않습니다. 요청을 받아 무엇을 할지 결정하고 WhatsApp Business API를 호출하는 무언가가 있어야 합니다. 그것은 직접 작성해 호스팅하는 코드이거나, 웹훅 URL을 제공하고 나머지를 코드 없이 만들 수 있게 해 주는 자동화 플랫폼입니다.
WhatsApp 메시지를 보낼 만한 이벤트
모든 이벤트에 메시지가 필요한 것은 아닙니다. 주문 하나에 알림을 다섯 번 받은 고객은 결국 모든 알림을 무시하게 됩니다. 고객이 실제로 기다리는 순간을 고르세요.
| 이벤트 | 메시지 | 템플릿 카테고리 |
|---|---|---|
| 주문 생성 또는 결제 완료 | 주문 번호와 다음 단계를 담은 확인 메시지 | 유틸리티 |
| 결제 실패 또는 대기 | 짧은 안내와 다시 결제하는 방법 | 유틸리티 |
| 주문 발송 | 택배사와 배송 조회 링크 | 유틸리티 |
| 착불(COD) 주문 생성 | 주문 확정, 주소 변경, 취소 중 선택을 묻는 질문 | 유틸리티 |
| 예약 확정, 변경 또는 내일 예정 | 날짜, 시간, 장소와 일정 변경 방법 | 유틸리티 |
| CRM에서 딜 성사 또는 실패 | 담당 매니저 연결 또는 피드백 요청 | 문구에 따라 유틸리티 또는 마케팅 |
| 장바구니 이탈 | 리마인더(혜택 포함 가능) | 마케팅 |
카테고리는 선택한 라벨이 아니라 템플릿 내용을 보고 Meta가 결정합니다. 특정 주문, 결제, 예약에 관한 메시지는 유틸리티이고, 홍보하거나 혜택을 제안하거나 설득하려는 메시지는 마케팅이며 마케팅까지 포함하는 수신 동의가 필요합니다. 위 유틸리티 사례의 문구는 WhatsApp 템플릿 예시에서 확인하세요.
적용되는 WhatsApp 규칙
웹훅 메시지는 대부분 템플릿이 필요합니다
고객 서비스 창은 고객이 메시지를 보내거나 전화를 걸 때 열리고, 고객의 마지막 메시지로부터 24시간 동안 유지됩니다. 창 안에서는 자유롭게 답장할 수 있지만, 창 밖에서는 사전 승인된 템플릿 메시지만 보낼 수 있습니다. 쇼핑몰과 CRM 이벤트는 이 창 안에서 일어나는 경우가 드물기 때문에, 웹훅 메시지는 모두 템플릿으로 계획하고 기능을 켜기 전에 템플릿 검토를 신청하세요.
전화번호를 사용할 수 있어야 합니다
웹훅에는 WhatsApp이 도달할 수 있는 전화번호가 들어 있어야 합니다. 국가 번호가 포함된 국제 형식입니다. 많은 쇼핑몰이 고객에게 번호를 자유롭게 입력하게 하므로, 실제 주문 몇 건을 확인해 보세요. 국가 번호가 없는 번호는 테스트에서는 되는데 실제 운영에서는 안 되는 가장 흔한 원인입니다.
2026년 10월 1일 요금 변경
Meta는 2025년 7월 1일부터 전달된 메시지마다 요금을 부과하고 있습니다. 2026년 10월 1일부터는 열려 있는 고객 서비스 창 안에서 보내는 유틸리티 템플릿이 한동안 무료였다가 다시 유료가 되었고, 비즈니스 전화번호마다 매월 1,000건의 무료 서비스 메시지가 제공됩니다. 요금은 카테고리와 고객의 국가에 따라 다르며, 한국에서 보내더라도 수신자의 국가 기준으로 적용됩니다. 결국 주문 확인 메시지는 고객이 최근에 메시지를 보냈든 아니든 비용이 들기 때문에, 중요한 메시지만 보내고 나머지는 생략하세요. 요금표는 WhatsApp API 요금 가이드에서 설명합니다.
웹훅 URL 보안
웹훅 URL을 아는 사람은 누구나 호출할 수 있습니다. 그 URL이 WhatsApp 메시지를 보낸다면, URL이 유출되는 순간 다른 사람이 회사 이름으로 고객에게 메시지를 보내거나 요금을 늘릴 수 있습니다. 다음 세 가지 습관으로 막을 수 있습니다.
- 시크릿을 필수로 설정하세요. 발신 시스템이 시크릿을 헤더에 넣거나, 시크릿으로 요청 본문에 서명(HMAC-SHA256)해 수신 측이 요청이 중간에 변경되지 않았는지 확인할 수 있게 합니다. 유효한 시크릿이나 서명이 없는 요청은 거부됩니다.
- 용도마다 URL을 하나씩 두세요. 주문 플로와 예약 플로는 URL과 시크릿을 따로 두어야 하나를 교체해도 다른 하나에 영향이 없습니다.
- 발신 측의 실패를 지켜보세요. WooCommerce는 전송이 연속으로 다섯 번 넘게 실패하면 웹훅을 비활성화하고, Shopify는 수신 주소가 200이 아닌 응답을 반복해서 돌려주는 웹훅 구독을 삭제합니다. 수신 측이 꺼져 있거나 설정이 잘못되면 알림이 소리 없이 멈출 수 있습니다.
Shopify와 WooCommerce에서 웹훅을 만드는 위치
- Shopify: Settings › Notifications › Webhooks에서 Create webhook을 선택합니다. 이벤트 하나(Order creation, Order payment, Fulfillment creation 등), 형식은 JSON, URL은
https://로 지정합니다. 웹훅을 만든 뒤에는 이벤트를 바꿀 수 없으므로 이벤트마다 웹훅을 하나씩 만드세요. Send test로 URL에 도달하는지 확인할 수 있습니다. - WooCommerce: WooCommerce › Settings › Advanced › Webhooks에서 Add webhook을 선택합니다. topic(order, customer, coupon, product 이벤트)을 고르고 delivery URL과 시크릿을 입력하면, WooCommerce가 그 시크릿으로 만든 페이로드 해시를 요청 헤더에 추가합니다.
- CRM 또는 예약 도구: “webhooks”, “automations”, “outgoing integrations” 같은 메뉴를 찾아보세요. 형식이 고정되어 있다면 무언가를 만들기 전에 어느 필드에 고객 전화번호가 들어 있는지 확인하세요.
운영 전에 실제 요청으로 테스트하기
웹훅 페이로드는 길고 플랫폼마다 필드 이름이 다릅니다. 전화번호가 phone일 수도, billing.phone이나 customer.default_address.phone일 수도 있습니다. 추측하지 마세요. 실제 테스트 요청을 보내 도착한 내용을 보고 거기서 필드를 매핑하세요. 그다음 예외 상황을 테스트합니다.
- 전화번호가 없거나 국가 번호가 빠진 번호가 들어 있는 주문
- 같은 이벤트가 두 번 전달되는 경우(플랫폼이 재시도할 때 발생)
- 새벽 3시에 들어온 주문(메시지를 아침까지 미루고 싶은 경우)
- 알림에 답장하는 고객(담당자나 AI 어시스턴트가 바로 답할 수 있도록)
MonoChat에서 설정하는 방법
MonoChat은 공식 Meta Business Partner입니다. 버전 3.8.37(2026년 10월)부터 플로를 웹훅으로 시작할 수 있어, 쇼핑몰이나 CRM에서 별도 개발 없이 WhatsApp 메시지를 보낼 수 있습니다.
1. 웹훅 수신 노드로 플로를 시작하세요. 이벤트 노드에서 추가합니다. 이 노드에는 전용 웹훅 URL과 시크릿이 발급됩니다. 채널(예: 회사의 WhatsApp 번호)과 식별자 경로, 즉 요청에서 고객 전화번호가 있는 위치(기본값 request.body.phone)를 선택하세요. MonoChat은 해당 채널에서 고객을 찾거나 새로 만들고, 그 고객에 대해 플로를 실행합니다. 노드는 플로가 대기열에 들어가면 발신자에게 202로 응답하고, 채널이나 전화번호를 찾지 못하면 명확한 오류를 반환합니다.
2. 시크릿 필수를 켜세요. 발신자는 시크릿을 토큰 헤더(기본값 Authorization, 단독 또는 Bearer <secret> 형식)에 넣거나, 원본 본문의 HMAC-SHA256 서명을 서명 헤더(기본값 X-Signature)로 보낼 수 있습니다. 두 헤더 이름 모두 발신 시스템에 맞게 바꿀 수 있습니다.
3. 실제 요청을 받아 보세요. 웹훅 URL 끝에 /test를 붙이고 쇼핑몰의 테스트 웹훅을 그 주소로 지정합니다. 노드 설정을 열어 두면 요청이 플로를 시작하지 않고 받은 요청에 본문, 쿼리, 헤더와 함께 표시됩니다. 이를 보고 필요한 경로를 찾은 다음 플로 변수로 저장하세요. 예를 들어 request.body.orderId를 orderId로 저장합니다.
4. 메시지를 보내세요. 템플릿 메시지 보내기 노드를 추가해 승인된 템플릿을 고르고, 주문 번호, 금액, 배송 조회 링크 같은 변수를 플로 변수로 채웁니다. 상태별로 다른 템플릿을 보내려면 조건을 사용하세요.
5. 필요하면 자체 시스템을 호출하세요. HTTP 요청 노드는 자체 시스템에서 추가 데이터를 조회하거나, 고객의 답변을 다시 기록할 수 있습니다. 예를 들어 착불 주문에 “확정”을 기록하는 식입니다. 호출이 성공하면 출력으로, 실패하면 실패 시로 이어지므로 대체 메시지를 보내거나 대화를 담당자에게 배정할 수 있습니다.
고객이 답장하면 대화는 WhatsApp, Instagram, Messenger의 다른 채팅과 같은 MonoChat 인박스로 들어오고, 팀이나 AI 어시스턴트가 이어받을 수 있습니다. 플로를 만드는 방법은 워크플로 자동화를 참고하세요.
누가 작업하느냐에 따라 다른 방법도 두 가지 있습니다.
- 개발자가 이미 API를 호출하고 있다면. WhatsApp Template API 앱은 API 호출 한 번으로 승인된 템플릿을 보내며, 답장은 인박스로 들어옵니다.
- Shopify를 쓰고 있고 주문 데이터를 채팅에서 보고 싶다면. Shopify 채팅 자동화는 상품과 주문을 동기화해 팀과 AI 어시스턴트가 주문 문의에 답할 수 있게 합니다.
시작하려면 app.monochat.ai에서 무료 계정을 만들고 WhatsApp 번호를 연결한 뒤, 요금 페이지에서 요금제를 비교하세요.
출처
MonoChat으로 실행해 보세요