Use Cases

Twilio SMS/ Implementation: Claude Code 활용 가이드

twilio sms/ implementation: Claude Code 활용. 실용적인 팁과 코드 예시를 포함합니다.

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);
}

정리

Twilioの通信APIをClaude Code로효율적으로구현し、SMS알림や二要素인증を빠르게앱に組み込めます。인증구현가이드Webhook구현도 함께 참고하세요.

Twilio의 상세 정보는Twilio공식 문서를 참고하세요.

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