SMS를 webhook API 엔드포인트로 전달하는 방법
빠른 답변: Forward SMS는 문자 메시지를 JSON webhook으로 모든 HTTP 엔드포인트에 전송할 수 있습니다. 앱에서 Webhook 대상을 생성하고, 엔드포인트 URL을 입력한 다음, 단축어 자동화를 설정하세요. 엔드포인트는 메시지 내용, 발신자 및 타임스탬프가 포함된 POST 요청을 수신합니다.
Webhook SMS 전달이란?
Webhook SMS 전달은 문자 메시지를 관리하는 모든 HTTP 엔드포인트로 자동 전송합니다. 플랫폼별 통합(Slack, Discord, Teams)과 달리 webhook은 메시지 처리 방법을 완전히 제어할 수 있습니다. 이는 맞춤 통합, 로깅 시스템 또는 자동화 워크플로를 구축하는 개발자에게 이상적입니다.
메시지가 도착하면 Forward SMS는 메시지 내용, 발신자 정보 및 메타데이터가 포함된 구조화된 JSON 페이로드를 엔드포인트에 POST 요청으로 전송합니다.
Webhook을 사용하는 이유
Webhook은 기성 통합이 제공할 수 없는 유연성을 제공합니다:
- 맞춤 자동화: SMS 수신 시 모든 워크플로 트리거 - 데이터베이스 업데이트, 알림 전송, 스크립트 실행 또는 모든 서비스와 통합
- 데이터 로깅: 규정 준수, 분석 또는 백업 목적으로 모든 수신 메시지를 자체 데이터베이스에 저장
- 멀티 서비스 라우팅: 자체 로직으로 메시지를 처리하여 내용이나 발신자에 따라 다른 대상으로 라우팅
- 내부 도구: 내부 대시보드 및 도구에 SMS 기반 기능 구축
- IoT 통합: SMS 알림을 IoT 시스템, 홈 자동화 또는 모니터링 인프라에 연결
Webhook 페이로드 형식
메시지가 전달되면 엔드포인트는 다음 JSON 페이로드가 포함된 POST 요청을 수신합니다:
{
"timestamp": "2025-01-31T14:30:00Z",
"content": "Your verification code is 123456",
"sender": "+1234567890",
"contact": "Bank of Example"
}
페이로드 필드
| 필드 | 유형 | 설명 |
|-------|------|-------------|
| timestamp | string | 메시지가 전달된 ISO 8601 형식의 타임스탬프 |
| content | string | 문자 메시지 내용 |
| sender | string | 발신자 전화번호(사용 가능한 경우) |
| contact | string | 주소록의 연락처 이름(일치하는 경우) |
Webhook 전달 설정
1단계: Forward SMS 다운로드
App Store에서 Forward SMS를 다운로드하세요.
2단계: Webhook 대상 생성
앱을 열고 "대상 추가"를 탭한 다음 "Webhook"을 선택합니다. 엔드포인트 URL을 입력하세요. 보안을 위해 URL은 HTTPS여야 합니다.
3단계: 엔드포인트 테스트
"테스트 메시지 보내기" 버튼을 사용하여 엔드포인트가 webhook을 올바르게 수신하는지 확인합니다. 서버 로그를 확인하여 페이로드가 도착했는지 확인하세요.
4단계: 단축어 자동화 설정
단축어 설정 가이드를 따라 메시지 전달을 트리거하는 자동화를 생성하세요.
구현 예제
다양한 언어로 webhook을 처리하는 예제입니다:
Node.js (Express)
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/sms', (req, res) => {
const { timestamp, content, sender, contact } = req.body;
console.log(`Received SMS from ${sender}: ${content}`);
// Process the message (save to database, trigger automation, etc.)
res.status(200).json({ received: true });
});
app.listen(3000);
Python (Flask)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook/sms', methods=['POST'])
def handle_sms():
data = request.json
sender = data['sender']
content = data['content']
print(f"Received SMS from {sender}: {content}")
# Process the message
return jsonify({'received': True}), 200
if __name__ == '__main__':
app.run(port=3000)
PHP
<?php
$payload = json_decode(file_get_contents('php://input'), true);
$sender = $payload['sender'];
$content = $payload['content'];
$timestamp = $payload['timestamp'];
error_log("Received SMS from $sender: $content");
// Process the message
http_response_code(200);
echo json_encode(['received' => true]);
?>
Ruby (Sinatra)
require 'sinatra'
require 'json'
post '/webhook/sms' do
payload = JSON.parse(request.body.read)
sender = payload['sender']
content = payload['content']
puts "Received SMS from #{sender}: #{content}"
# Process the message
content_type :json
{ received: true }.to_json
end
보안 고려 사항
HTTPS 사용
webhook 페이로드를 전송 중에 암호화하려면 항상 HTTPS 엔드포인트를 사용하세요. Forward SMS는 webhook URL에 HTTPS를 필수로 요구합니다.
오류를 우아하게 처리
엔드포인트는 수신을 확인하기 위해 2xx 상태 코드를 반환해야 합니다. Forward SMS가 오류 응답을 받으면 실패가 기록됩니다.
문제 해결
Webhook이 메시지를 수신하지 않음
- URL 확인: 엔드포인트 URL이 올바르고 인터넷에서 접근 가능한지 확인
- HTTPS 확인: URL은 HTTP가 아닌 HTTPS를 사용해야 합니다
- 방화벽 규칙 확인: 서버가 수신 POST 요청을 수락해야 합니다
- 엔드포인트 테스트: 앱의 테스트 버튼을 사용하여 연결 확인
메시지가 느리게 도착
- 단축어 자동화 확인: 자동화가 확인 없이 실행되는지 확인
- 백그라운드 앱 새로고침: iOS 설정에서 Forward SMS에 대해 활성화
- 네트워크 문제: iPhone과 서버 모두 안정적인 인터넷 연결이 필요
페이로드가 파싱되지 않음
- Content-Type: 요청은
Content-Type: application/json을 사용합니다 - JSON 파싱: 서버가 JSON 본문을 올바르게 파싱하는지 확인
- 문자 인코딩: 메시지는 UTF-8로 인코딩됩니다
자주 묻는 질문
여러 webhook 엔드포인트로 전달할 수 있나요?
예, Forward SMS에서 여러 Webhook 대상을 생성할 수 있습니다. 각 대상은 다른 엔드포인트 URL을 가질 수 있으며, 모든 대상이 전달된 메시지를 수신합니다.
엔드포인트가 다운되면 어떻게 되나요?
엔드포인트가 오류를 반환하거나 도달할 수 없는 경우 메시지 전달이 실패합니다. 앱은 디버깅을 위해 이러한 실패를 기록합니다. 대체 방안이나 모니터링 시스템 구현을 고려하세요.
Webhook에 속도 제한이 있나요?
Forward SMS에서 인위적인 속도 제한은 없습니다. 메시지는 도착하는 대로 빠르게 전달되며 엔드포인트에서 처리할 수 있습니다.
어떤 메시지를 전달할지 필터링할 수 있나요?
현재 단축어 자동화를 트리거하는 모든 메시지가 전달됩니다. webhook 엔드포인트에 필터링 로직을 구현하여 원치 않는 메시지를 무시할 수 있습니다.
HTTPS 대신 HTTP를 사용할 수 있나요?
아니요, 보안상의 이유로 Forward SMS는 HTTPS 엔드포인트를 필수로 요구합니다. 이를 통해 전송 중 메시지 데이터가 암호화됩니다.