ClawOps Docs

이벤트 & CallSession

이벤트 핸들러

agent.on() 메서드로 통화 이벤트를 수신합니다.

agent.on('call_start', async (call) => {
  console.log(`통화 시작: ${call.fromNumber} -> ${call.toNumber}`);
  console.log(`통화 ID: ${call.callId}`);
});

agent.on('call_end', async (call) => {
  console.log(`통화 종료: ${call.callId} (총 ${call.duration.toFixed(1)}초)`);
});

agent.on('transcript', async (call, role, text) => {
  console.log(`[${role}] ${text}`);
  // role: "user" (고객 음성 인식) 또는 "assistant" (AI 응답)
});

agent.on('call_failed', async (call, reason) => {
  console.log(`발신 실패: ${reason}`);
});

이벤트 목록

이벤트파라미터설명
call_start(call)통화 시작
call_end(call)통화 종료
call_failed(call, reason)발신 실패
transcript(call, role, text)음성 텍스트 생성

CallSession

개별 통화의 상태를 관리합니다. 이벤트 핸들러의 call 파라미터로 전달됩니다.

속성

속성타입설명
callIdstring통화 ID
fromNumberstring발신 번호
toNumberstring수신 번호
accountIdstring계정 ID
directionstring"inbound" 또는 "outbound"
statusstringqueued, ringing, in-progress, completed, failed, no-answer, busy
startTimeDate통화 시작 시간
durationnumber통화 경과 시간 (초)
metadataRecord<string, unknown>사용자 정의 메타데이터

메서드

agent.on('call_start', async (call) => {
  call.metadata.customerId = 'CUST_123';

  await call.sendAudio(pcm16Bytes);   // 오디오 전송
  await call.clearAudio();            // 오디오 큐 초기화 (인터럽트 시)
  await call.hangup();                // 통화 종료
  await call.transfer('01012345678'); // 다른 번호로 통화 전환
  await call.wait();                  // 통화 종료까지 대기 (아웃바운드 시 유용)
});

await call.wait()는 통화가 종료되어 statuscompleted로 변경될 때까지 대기합니다. 주로 아웃바운드 단건 발신 시 통화 완료를 기다리는 데 사용합니다.