ダイヤルSMSの入電通知


ダイヤルSMSは、契約した電話番号に興味のある人が電話をかけてきたら、情報をSMSで24時間自動で送信するサービス。入電対応も不要なので、人件費もかからず、コスパ◎。

ダイヤルSMSに入電があったら、通知が欲しい…という時には『着信URL』を上手に使いましょう。この着信URLは、少し開発の知識が必要です。初心者の私が設定してみましたので、ぜひお試しください。

URLを準備するのですから、Webサーバーが必要になります。

①サーバー準備→URLを設定

今回、私はRenderというサーバーを使いました。こちらは現在英語のみの対応となっているようですが、料金表では『Hobby』プランが無料となっており、今回のプロジェクトのサポートに十分です。

使い方はこちらが参考になるかもしれません。3. Webhokの設定にて Render.com のサービスのURLをコピーしたら、それを、EZSMSのダイヤルSMS設定画面にて、着信URLとして入力してください。

これで、EZSMSのダイヤルSMSに入電があると、この着信URLへ着信の情報がPOST送信される設定が完了しました。

②サーバー側での準備

着信用URLで受け取った情報を、お好みに処理する設定をしておく必要があります。これには、サーバー側にスクリプトを置くのですが、PHPやPython、Node.js、Rubyなどのバックエンド言語を使います。

私は今回、着信を受けたらメールで通知してもらえるように設定することにしました。

メール送信者として、Gメールを使います。また、Gメールアカウントのアプリパスワードが必要になります。これは、普段ログインに使うパスワードとは違います。詳しくはこちらを参照してください。このページからアプリパスワードの作成も行うことができます。

通知を受信したいメールアドレスも準備してください。

Gメールアドレス、アプリパスワード、そして受信用のメールアドレスが準備できたら、スクリプトを書きます。私の例では、pythonを使いました。

from flask import Flask, request, render_template
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
import json
import pytz

app = Flask(__name__)
app.secret_key = os.environ.get('SECRET_KEY', 'your_secret_key')

from datetime import datetime

def format_timestamp(timestamp):
    try:
        dt_utc = datetime.utcfromtimestamp(float(timestamp))
        dt_jst = dt_utc.replace(tzinfo=pytz.utc).astimezone(pytz.timezone("Asia/Tokyo"))
        return dt_jst.strftime('%Y-%m-%d %H:%M:%S')
    except Exception as e:
        print(f"⚠️ タイムスタンプ変換エラー: {e}")
        return "Unknown"

# 📧 メール送信関数
def send_email(caller, recipient, call_time):
    sender_email = "your-gmail-address@gmail.com"  # 送信元のGmailアドレス
    receiver_email = "your-email-to-receive-notification@email.com"  # 受信先のメールアドレス
    password = "gmail-app-password"  # Gmailの「アプリパスワード」を使う

    subject = "📞 新しいWebhook通知"
    body = f"""
    新しい通話データを受信しました!
    
    📌 Caller: {caller}
    📌 Recipient: {recipient}
    📌 Call Time: {call_time}
    """

    msg = MIMEMultipart()
    msg["From"] = sender_email
    msg["To"] = receiver_email
    msg["Subject"] = subject
    msg.attach(MIMEText(body, "plain"))

    try:
        with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
            server.login(sender_email, password)
            server.sendmail(sender_email, receiver_email, msg.as_string())
        print("📧 メール送信成功!")
    except Exception as e:
        print(f"⚠️ メール送信エラー: {e}")

@app.route('/webhook', methods=['POST'])
def webhook():
    # 📌 受信したデータの形式をログに記録
    print("📌 受信したデータ (リクエストボディ):", request.data)

    try:
        if request.is_json:
            data = request.get_json()
        else:
            data = request.form.to_dict()  # form データを辞書に変換

        print("📌 パースしたデータ:", data)  # データ構造を確認

        # JSON形式の場合、ネストされているかチェック
        if "results" in data:
            parsed_data = json.loads(data["results"])
            caller = parsed_data.get("caller", "Unknown")
            recipient = parsed_data.get("recipient", "Unknown")
            call_time = parsed_data.get("call_time", "Unknown")
        else:
            caller = data.get("caller", "Unknown")
            recipient = data.get("recipient", "Unknown")
            call_time = data.get("call_time", "Unknown")

    except Exception as e:
        print(f"⚠️ データ取得エラー: {e}")
        return "Invalid Data Format", 400

    # 🔹 タイムスタンプを変換
    formatted_time = format_timestamp(call_time)

    print("===== 📞 Webhook Data Received! =====")
    print(f"Caller: {caller}")
    print(f"Recipient: {recipient}")
    print(f"Call Time: {formatted_time}")  # 🔹 変換後の時間を表示
    print("======================================")

    # 📧 メール送信(変換後の時間を使う)
    send_email(caller, recipient, formatted_time)

    return "Data received!", 200

@app.route('/display')
def display_data():
    return render_template(
        'display.html',
        caller=request.args.get('caller', 'No Data'),
        recipient=request.args.get('recipient', 'No Data'),
        call_time=request.args.get('call_time', 'No Data')
    )

import os
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

25行目から27行目は、準備したものに置き換えてください。

これを、app.py という名前で保存します。私は、Githubアカウントに連携したVS Codeを使って準備し、GithubからRender(サーバー) へ繋いでデプロイさせました。

③テストしてみる

さぁ、契約したダイヤルSMS番号へ電話をかけてみましょう。電話が応答されると、まず、Renderのサービス内のログ画面に、ダイヤルSMSの着信データがPOST送信されたことが表示されます。

"POST /webhook HTTP/1.1" 200 -

そして、受信用に設定したメールアドレスへ、メールが届いているはずです。

件名は『📞 新しいWebhook通知』

本文は『  新しい通話データを受信しました!   
    📌 Caller: (架電者の電話番号)
    📌 Recipient: (契約したダイヤルSMS番号)
    📌 Call Time: (入電日時)』です。

便利なダイヤルSMSの機能を、最大限に活かしてください。