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リクエストを受け入れる必要があります
- エンドポイントをテスト:アプリのテストボタンを使用して接続を確認
メッセージの到着が遅い
- ショートカット自動化を確認:自動化が確認を要求せずに実行されることを確認
- Appのバックグラウンド更新: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エンドポイントを必須としています。これにより、転送中のメッセージデータが暗号化されます。