Use Cases

SMS Twilio avec Claude Code

Découvrez sMS Twilio avec Claude Code. Conseils pratiques et exemples de code inclus.

TwilioのSMS/通話機能をClaude Codeで実装する

Twilioはプログラマブルな通信APIを提供するプラットフォームです。SMS送信、音声通話、二要素認証など、通信機能をアプリに組み込めます。Claude Codeを使えば、TwilioのAPIを効率的に活用できます。

SMS送信の基本

> TwilioでSMS送信するサービスクラスを作って。
> テンプレート対応とリトライ処理も含めて。
// src/services/sms.ts
import twilio from 'twilio';

const client = twilio(
  process.env.TWILIO_ACCOUNT_SID!,
  process.env.TWILIO_AUTH_TOKEN!
);

const FROM_NUMBER = process.env.TWILIO_PHONE_NUMBER!;

export class SmsService {
  async send(to: string, body: string): Promise<string> {
    try {
      const message = await client.messages.create({
        body,
        from: FROM_NUMBER,
        to,
      });
      console.log(`SMS sent: ${message.sid}`);
      return message.sid;
    } catch (error: any) {
      if (error.code === 21211) {
        throw new Error('無効な電話番号です');
      }
      throw error;
    }
  }

  async sendWithRetry(
    to: string,
    body: string,
    maxRetries = 3
  ): Promise<string> {
    for (let i = 0; i < maxRetries; i++) {
      try {
        return await this.send(to, body);
      } catch (error) {
        if (i === maxRetries - 1) throw error;
        await new Promise(r => setTimeout(r, 1000 * (i + 1)));
      }
    }
    throw new Error('Max retries exceeded');
  }
}

二要素認証(2FA)の実装

> Twilio Verifyを使った二要素認証を実装して。
> コードの送信と検証の両方を作って。
// src/services/verification.ts
import twilio from 'twilio';

const client = twilio(
  process.env.TWILIO_ACCOUNT_SID!,
  process.env.TWILIO_AUTH_TOKEN!
);

const VERIFY_SERVICE_SID = process.env.TWILIO_VERIFY_SERVICE_SID!;

export class VerificationService {
  // 認証コードの送信
  async sendCode(
    to: string,
    channel: 'sms' | 'call' | 'email' = 'sms'
  ): Promise<void> {
    await client.verify.v2
      .services(VERIFY_SERVICE_SID)
      .verifications.create({
        to,
        channel,
      });
    console.log(`Verification code sent to ${to} via ${channel}`);
  }

  // 認証コードの検証
  async verifyCode(to: string, code: string): Promise<boolean> {
    try {
      const check = await client.verify.v2
        .services(VERIFY_SERVICE_SID)
        .verificationChecks.create({
          to,
          code,
        });
      return check.status === 'approved';
    } catch (error: any) {
      if (error.code === 20404) {
        return false; // コードが期限切れ
      }
      throw error;
    }
  }
}

APIエンドポイントの実装

// src/api/auth/verify.ts
import { VerificationService } from '../../services/verification';

const verifyService = new VerificationService();

// コード送信
export async function POST(req: Request) {
  const { phone } = await req.json();

  if (!phone) {
    return Response.json({ error: '電話番号が必要です' }, { status: 400 });
  }

  try {
    await verifyService.sendCode(phone);
    return Response.json({ success: true, message: '認証コードを送信しました' });
  } catch (error) {
    return Response.json({ error: '送信に失敗しました' }, { status: 500 });
  }
}

// コード検証
export async function PUT(req: Request) {
  const { phone, code } = await req.json();

  const isValid = await verifyService.verifyCode(phone, code);

  if (isValid) {
    return Response.json({ success: true, message: '認証成功' });
  }
  return Response.json({ error: '無効なコードです' }, { status: 400 });
}

通知システムの構築

> 注文ステータス変更時にSMS通知を送る仕組みを作って。
// src/services/notification.ts
import { SmsService } from './sms';

const smsService = new SmsService();

const TEMPLATES = {
  ORDER_CONFIRMED: (orderId: string) =>
    `ご注文 #${orderId} を承りました。準備が整い次第、発送いたします。`,
  ORDER_SHIPPED: (orderId: string, trackingUrl: string) =>
    `ご注文 #${orderId} を発送しました。配送状況: ${trackingUrl}`,
  ORDER_DELIVERED: (orderId: string) =>
    `ご注文 #${orderId} が配達されました。ご利用ありがとうございます。`,
};

export async function notifyOrderStatus(
  phone: string,
  orderId: string,
  status: 'confirmed' | 'shipped' | 'delivered',
  metadata?: { trackingUrl?: string }
) {
  let message: string;

  switch (status) {
    case 'confirmed':
      message = TEMPLATES.ORDER_CONFIRMED(orderId);
      break;
    case 'shipped':
      message = TEMPLATES.ORDER_SHIPPED(orderId, metadata?.trackingUrl || '');
      break;
    case 'delivered':
      message = TEMPLATES.ORDER_DELIVERED(orderId);
      break;
  }

  await smsService.sendWithRetry(phone, message);
}

Summary

Twilioの通信APIをClaude Codeで効率的に実装し、SMS通知や二要素認証を素早くアプリに組み込めます。認証実装ガイドWebhook実装も合わせて参考にしてください。

Twilioの詳細はTwilio公式ドキュメントを参照してください。

#Claude Code #Twilio #SMS #通話 #API連携