Twilio에서 옮기기

Twilio 채팅에서 나오기, 개념별로 짚어 봅니다

Twilio는 Programmable Chat을 Conversations로 대체했습니다. 어차피 다시 만들어야 하거나 앱 안 채팅으로만 썼다면 GravEx Chat이 무료로 옮겨 갈 자리입니다. SMS나 WhatsApp에 의존한다면 Conversations에 남으세요.

Twilio 내용은 2021-01-25·2025-05-19자 changelog, 이전 가이드, Conversations API 요금 페이지 기준이고 2026-11-03에 확인했습니다. 내 계정에 무엇이 적용되는지는 Twilio에 확인해 주세요.

// 01

Programmable Chat은 어떻게 됐나

  • 2021-01-25에 Twilio는 Programmable Chat API를 2022-07-25에 종료하겠다고 알리고 고객을 Conversations API로 안내했습니다.
  • Flex 안의 Programmable Chat은 따로 종료일이 있습니다. 2025-05-19자 changelog에 2026-06-01로 적혀 있습니다. Twilio는 그 뒤에는 기대대로 동작하지 않을 수 있고 기능 개선·버그 수정·보안 업데이트도 없다고 합니다. Flex 고객은 Flex Conversations로 옮기게 안내됩니다.
  • 이전 가이드에서는 Chat Service·Channel·Member가 Conversation Service·Conversation·Participant가 되고, 기존 데이터는 별도 이전 없이 Conversations에서 보입니다.

그래서 공식 경로는 Conversations입니다. 한 대화에 채팅과 SMS·WhatsApp 같은 채널이 섞인다면 이쪽이 정답입니다. 앱 안 채팅뿐이라면 Twilio를 떠나는 길도 있습니다.

// 02

Conversations에 남을까, 옮길까

상황선택
한 대화에 채팅과 SMS·WhatsApp이 섞임Twilio Conversations. GravEx Chat에는 전화 채널이 없습니다.
Twilio 네이티브 iOS·Android SDK를 쓰고 클라이언트를 다시 쓸 수 없음Twilio Conversations. GravEx Chat에는 공식 네이티브 SDK가 없습니다.
웹 서비스의 앱 안 채팅이고 청구서가 신경 쓰임GravEx Chat.
계약상 SLA나 보안·컴플라이언스 인증이 필요함Twilio나 다른 대형 업체. GravEx Chat에는 둘 다 없습니다.

규모 감각을 위해 적으면, Conversations는 월간 활성 사용자 첫 200명이 무료이고 201~5,000명은 활성 사용자당 월 $0.05, 5,001~10,000명은 $0.0475, 10,001~20,000명은 $0.045이며 여기에 채널 요금과 월 GB당 $0.25부터인 미디어 저장 요금이 붙습니다. 구간별로 나눠 매기는 것으로 읽으면 활성 사용자 5,000명은 그 추가 요금을 빼고 월 $240쯤입니다(4,800명 × $0.05). GravEx Chat에는 유료 요금제가 없습니다.

// 03

개념 대응표

TwilioGravEx Chat
Chat Service, Conversation Service앱. 앱 하나가 테넌트 하나이고 키를 따로 갖습니다: 브라우저용 pk_, 서버용 sk_.
Channel, Conversation방. 종류는 public, private, channel(누구나 읽고 소유자·관리자만 씀), dm. 방은 백엔드가 rooms.ensure로 만듭니다.
Member, Participant방 멤버. members.add로 넣고 admin 역할을 줄 수 있습니다.
Identity와 액세스 토큰사용자 id와, 백엔드가 chat.token({ userId, name })으로 서명하는 JWT. HS256이고 유효 기간은 최대 24시간입니다.
메시지와 미디어텍스트, URL로 된 첨부(파일은 직접 저장), 인용은 replyTo, 스레드는 threadId.
웹훅서명된 웹훅(message.created, message.deleted, 리액션 이벤트 등, 최소 한 번 전달), 그리고 메시지를 거부하거나 고쳐 통과시킬 수 있는 동기 before_publish 훅.
입력 중 표시와 읽음room.typing(), room.markRead(seq), chat.unread().
푸시 알림내장돼 있지 않습니다. message.created를 받아 직접 서버에서 FCM·웹 푸시·이메일로 보냅니다.
클라이언트 SDK브라우저·Node는 @kispi/chat. 다른 언어는 REST·WebSocket 프로토콜을 구현합니다.

// 04

옮기는 순서

  1. 콘솔에서 앱을 만들고 pk_와 sk_를 환경변수에 넣습니다. 「AI로 시작하기」 가이드처럼 계정 키로 AI 도구에 시켜도 됩니다.
  2. Twilio 토큰 발급 엔드포인트를 chat.token()을 부르는 것으로 바꿉니다. 서명은 로컬에서 하고 네트워크 호출이 없습니다.
  3. Twilio에서 채널이나 대화를 만들던 자리에서 백엔드가 방을 만듭니다. order-1234처럼 바뀌지 않는 ASCII key를 써야 roomByKey로 다시 찾을 수 있습니다.
  4. 클라이언트를 바꿉니다. Twilio 클라이언트 자리에 createChatClient를 쓰고, room.subscribe()가 최근 메시지 100개를 불러오며, room.on('messages', ...)가 바뀔 때마다 전체 목록을 줍니다.
  5. 웹훅을 옮깁니다. chat.webhooks.verify로 서명을 확인하고 핸들러를 message.created 등의 이벤트에 맞춥니다.
  6. 한동안 둘을 같이 돌립니다. 새 채팅을 플래그 뒤에 두고 일부 사용자에게 먼저 열어 본 다음 전체를 바꿉니다.

// 05

대화 기록은 어떻게 되나

  • 가져오기 도구는 없습니다. Twilio API에서 대화와 메시지를 읽어 GravEx REST API로 다시 넣습니다: 방은 PUT /v1/rooms, 메시지는 POST /v1/rooms/{roomId}/messages. Twilio 메시지 SID를 clientMessageId로 쓰면 실패한 작업을 다시 돌려도 중복되지 않습니다.
  • 메시지 보내기에 시각을 넣는 항목이 없어서 옮겨 넣은 메시지는 넣은 시각으로 찍힙니다. 원래 시각은 appMeta에 담거나, Twilio 기록은 보관용으로 두고 새 방은 비운 채 시작하세요.
  • 한꺼번에 옮기기 전에 앱의 한도 탭을 확인하세요. 기본 발행 속도는 유저당 초당 5건이고, 한도는 요청하면 올릴 수 있습니다.

// FAQ

자주 묻는 질문

Twilio Programmable Chat은 아직 쓸 수 있나요?
Twilio는 2021년 1월에 이 API를 2022-07-25에 종료하고 Conversations로 대체한다고 알렸고, Flex 안의 Programmable Chat은 종료일을 2026-06-01로 정했습니다. 내 계정에 어떻게 적용되는지는 Twilio의 최신 공지를 확인하세요. 새로 만드는 일에는 Twilio가 Conversations를 안내합니다.
Twilio 데이터를 가져오는 도구가 있나요?
없습니다. 위에 적은 대로 REST API로 옮겨 넣습니다.
SMS나 WhatsApp은 계속 쓸 수 있나요?
GravEx Chat에는 전화 채널이 없어서 안 됩니다. 그 채널은 Twilio에 남겨 두세요.
iOS·Android 앱은 어떻게 하나요?
공식 네이티브 SDK는 없습니다. REST API와 WebSocket 프로토콜이 공개돼 있고, 실시간 프로토콜 문서에 SDK 없이 클라이언트를 만드는 점검표가 있습니다. 백엔드의 토큰 발급은 그대로입니다.

함께 보기

출처