1 回の API 呼び出しで電話番号を検証し、E.164 に変換します
30 か国以上の電話番号を解析、検証し、E.164 形式に正規化します。 1 つの POST リクエスト、libphonenumber のインストールなし、無料利用枠が含まれます。
サインアップ フォームでは 40 か国の電話番号が収集されます。 ユーザーはあらゆる形式で入力します 想像できるもの: ダッシュ、スペース、括弧、国コードあり、国コードなし。 必要です データベースに保存する前に、これらを E.164 形式に正規化します。 そうでなければ、あなたは 同じ番号が 5 つの異なる表現で表現されることになり、SMS ゲートウェイが拒否します。 そのうちの半分。
Botoi 電話検証 API は、国際電話番号を構造化された応答に解析します。 有効フラグ、E.164 形式、国番号、国コード、および国名。 1 つの POST リクエスト、 libphonenumber のインストールも、300KB バンドルもヒットしません。
1 回のリクエストで電話番号を検証する
電話番号を送信してください /v1/phone そして構造化された結果を返します。
curl -X POST https://api.botoi.com/v1/phone \\
-H "Content-Type: application/json" \\
-d '{"phone": "+14155552671"}'
応答:
{
"success": true,
"data": {
"phone": "+14155552671",
"valid": true,
"country_code": "+1",
"country": "United States / Canada",
"e164_format": "+14155552671",
"national_format": "4155552671"
}
}
API は入力からスペース、ダッシュ、括弧を取り除き、入力から国を識別します。
ダイヤル プレフィックスを返し、E.164 形式 (保存用) と国内形式 (表示用) の両方を返します。
の valid flag は、国番号が 7 ~ 15 桁であることをチェックします。
各国の番号計画をカバーしています。
国際的なフォーマットの例
API は 30 か国以上の番号を処理します。 入力内のスペース、ダッシュ、括弧は次のとおりです。 解析する前にすべて削除されます。
Country Input E.164 Country code
────────────────── ─────────────────────── ────────────────── ────────────
United States +1 (415) 555-2671 +14155552671 +1
United Kingdom +44 20 7946 0958 +442079460958 +44
India +91 98765 43210 +919876543210 +91
Germany +49 30 1234567 +49301234567 +49
Japan +81 3-1234-5678 +81312345678 +81
Brazil +55 11 91234-5678 +5511912345678 +55
Australia +61 2 1234 5678 +61212345678 +61
Singapore +65 6123 4567 +6561234567 +65
スペースを含む英国の番号
curl -X POST https://api.botoi.com/v1/phone \\
-H "Content-Type: application/json" \\
-d '{"phone": "+44 20 7946 0958"}'
応答:
{
"success": true,
"data": {
"phone": "+44 20 7946 0958",
"valid": true,
"country_code": "+44",
"country": "United Kingdom",
"e164_format": "+442079460958",
"national_format": "2079460958"
}
}
無効な入力で何が起こるか
のない数字 + プレフィックスリターン valid: false 説明メモ付き
API が期待するもの。
curl -X POST https://api.botoi.com/v1/phone \\
-H "Content-Type: application/json" \\
-d '{"phone": "555-1234"}'
応答:
{
"success": true,
"data": {
"phone": "555-1234",
"valid": false,
"country_code": null,
"country": null,
"e164_format": null,
"national_format": null,
"note": "Phone number should start with \\"+\\" followed by a country code for reliable detection."
}
}
例外や不可解なエラー コードはありません。 チェック data.valid そしてユーザーに
明確なメッセージ。
サインアップフォームの検証
最も一般的な使用例: フォーム送信時に電話番号を検証し、E.164 を保存します。 ユーザーが入力したものではなく、バージョンを表示します。 これにより、データベースと SMS がクリーンな状態に保たれます。 プロバイダーは満足です。
async function validatePhone(phone) {
const res = await fetch("https://api.botoi.com/v1/phone", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ phone }),
});
return res.json();
}
// Signup form handler
document.querySelector("#signup-form").addEventListener("submit", async (e) => {
e.preventDefault();
const phoneInput = document.querySelector("#phone").value.trim();
const { data } = await validatePhone(phoneInput);
if (!data.valid) {
showError("Enter a valid phone number with country code (e.g. +1 415 555 2671)");
return;
}
// Store the E.164 version, not the raw input
await createAccount({
phone: data.e164_format,
country: data.country,
});
});
The raw input goes to the API. The E.164 format comes back. あなたが保管します +14155552671
の代わりに (415) 555-2671 または 415.555.2671 またはその他のバリエーション。
すべてのダウンストリーム システム (Twilio、AWS SNS、Vonage) は E.164 を想定しているため、変換を回避できます。
後で頭痛。
電話番号の CSV を正規化する
5,000 件の連絡先を含む CRM からの CSV エクスポートがあります。 電話欄は混乱しています: いくつかの番号 国コードがあるもの、ないもの、ダッシュが付いているもの、ドットが付いているものがあります。 このスクリプトは CSV を読み取り、 各番号を検証し、E.164 形式と国情報を含むクリーン バージョンを書き込みます。
import { readFileSync, writeFileSync } from "fs";
import { parse } from "csv-parse/sync";
import { stringify } from "csv-stringify/sync";
const records = parse(readFileSync("contacts.csv"), { columns: true });
async function normalizePhone(phone) {
const res = await fetch("https://api.botoi.com/v1/phone", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ phone }),
});
const { data } = await res.json();
return data;
}
async function processContacts() {
const results = [];
for (const row of records) {
const data = await normalizePhone(row.phone);
results.push({
name: row.name,
original_phone: row.phone,
e164: data.valid ? data.e164_format : "INVALID",
country: data.country || "Unknown",
valid: data.valid,
});
}
writeFileSync("contacts_normalized.csv", stringify(results, { header: true }));
const invalid = results.filter((r) => !r.valid);
console.log(\`Processed \\\${results.length} contacts. \\\${invalid.length} invalid.\`);
}
processContacts();
出力される CSV には、元の電話機、E.164 バージョン、検出された国、 そして有効フラグ。 無効な行をフィルタリングして手動で修正してから、 clean data into your system.
大きなファイルの場合は、リクエスト間にわずかな遅延を追加するか、リクエストをバッチ処理します。 Promise.all
in groups of 5 to stay within rate limits. Paid plans support higher throughput.
電話認証用の Express ミドルウェア
このミドルウェアは、ルート ハンドラーを実行する前に電話番号を検証します。 番号が 無効な場合、リクエストは 422 応答を受け取ります。 有効な場合、ミドルウェアは生の入力を置き換えます。 正規化された E.164 形式を使用するため、ハンドラーは常にクリーンなデータを受信します。
import express from "express";
const app = express();
app.use(express.json());
async function validatePhoneMiddleware(req, res, next) {
const phone = req.body.phone;
if (!phone) {
return res.status(400).json({ error: "Phone number is required" });
}
const apiRes = await fetch("https://api.botoi.com/v1/phone", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ phone }),
});
const { data } = await apiRes.json();
if (!data.valid) {
return res.status(422).json({
error: "Invalid phone number",
detail: "Provide an international number starting with + and a country code",
});
}
// Replace raw input with normalized E.164 format
req.body.phone = data.e164_format;
req.body.phoneCountry = data.country;
next();
}
app.post("/users", validatePhoneMiddleware, async (req, res) => {
// req.body.phone is now in E.164 format
const user = await db.users.create({
email: req.body.email,
phone: req.body.phone, // "+14155552671"
phoneCountry: req.body.phoneCountry, // "United States / Canada"
});
res.status(201).json({ id: user.id });
});
電話番号を受け入れるすべてのルートは、同じ検証ロジックを受け取ります。 データベースは常に E.164を格納します。 ルート ハンドラーは解析やフォーマットを処理しません。 彼らは 正規化された番号と国名。
E.164 が重要な理由
E.164 は、国際電話番号の形式に関する ITU-T 標準です。 形式はシンプルです:
ある + 記号、国番号、加入者番号をスペースや句読点を含めずに入力します。
例: +14155552671。
-
重複排除。 正規形式を使用しないと、同じ数値が次のように表示されます。
(415) 555-2671、415-555-2671、+1 415 555 2671、 そして14155552671。 E.164 では、4 つすべてが 1 つの文字列に折りたたまれます。 - SMS配信。 Twilio、AWS SNS、Vonage、MessageBird、およびすべての主要な SMS ゲートウェイには E.164 が必要です。 数値を別の形式で保存する場合は、変換が必要です すべての送信の前のステップ。
- データベースのインデックス作成。 単一の形式は電話機に対する独自の制約を意味します コラムは機能します。 混合形式では重複がすり抜けてしまいます。
- 国際的なサポート。 E.164 には国コードが含まれているため、システムは 特殊なケースのロジックを使用しない米国、英国、インド、ブラジルの番号。
重要なポイント
-
1 つのエンドポイントは検証とフォーマットをカバーします。
POST /v1/phone単一の応答で有効性、E.164、国別形式、国コード、および国名を返します。 - ライブラリは必要ありません。 300KB libphonenumber バンドルをスキップします。 1 回の HTTP 呼び出し 依存関係を置き換えます。
-
E.164 を保存し、各国を表示します。 書く
e164_formatデータベースに。 見せるnational_formatUI に国旗が表示されます。 - 境界で検証します。 ミドルウェアを API ルートなどに追加します。 ダウンストリーム システムはクリーン データを受信します。
- 無料利用枠をご利用いただけます。 API キーなしで 1 分あたり 5 リクエスト。 の有料プラン 実稼働ワークロードは月額 9 ドルから始まります。
FAQ
- API 経由で国際電話番号を検証するにはどうすればよいですか?
- 国際形式 (+ で始まる) の電話番号を含む JSON 本文を使用して、POST リクエストを https://api.botoi.com/v1/phone に送信します。 API は、有効なフラグ、E.164 形式、国別形式、国コード、および国名を返します。
- 電話認証 API は、+ プレフィックスのない番号をサポートしますか?
- API では、信頼性の高い国検出のために + 接頭辞が必要です。 番号を付けずに番号を送信すると、応答は valid: false を返し、番号は + で始まり、その後に国コードが続く必要があることを説明するメモが含まれます。
- 電話認証 API は無料ですか?
- はい。 匿名アクセスは、IP ベースのレート制限により、1 分あたり 5 リクエストで利用できます。 API キー、アカウント、クレジット カードは必要ありません。 有料プランは月額 9 ドルから始まり、レート制限が高くなります。
- E.164 形式とは何ですか? なぜ電話番号を E.164 形式に保存する必要があるのですか?
- E.164 は、ITU-T によって定義された国際電話番号標準です。 + 記号で始まり、その後に国コードと加入者番号が続きます。スペースやダッシュは含まれません。 例: +14155552671。 E.164 に番号を保存すると、Twilio、AWS SNS、およびすべての SMS ゲートウェイで機能する単一の正規形式が得られます。
- 電話認証 API はどの国をサポートしていますか?
- この API は、米国、カナダ、英国、インド、日本、ドイツ、フランス、中国、オーストラリア、ブラジル、メキシコ、韓国、インドネシア、シンガポールなどを含む 30 か国以上をサポートしています。 国検出では、電話番号の国際ダイヤル プレフィックスを使用します。
botoiで開発を始めよう
150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。