# Chatting Guide

옴니톡 SDK가 제공하는 채팅 기능은 룸 참여시(타입 무관) 기본으로 제공됩니다. 따라서 별도의 채팅룸을 구현하거나 오디오룸, 비디오룸에서 부가 기능으로 개발하실 수 있습니다.

[sendMessage API](https://docs.omnitalk.io/react-native/api-reference#sendmessage)를 이용하여 action type을 명시하면 룸 전체에 채팅 메시지 발송하거나 특정 상대로의 귓속말 기능을 구현할 수 있습니다. 귓속말은 상대의 session id를 target 인수로 전달하면 됩니다.

## Step 0. SDK 초기화 및 객체 생성

Developer's Guide의[ Pre-requisite](https://docs.omnitalk.io/react-native/developers-guide/pre-requisite#4.)에서 장치 설정 및 개발 공통 사항을 참고하시기 바랍니다.&#x20;

## Step 1. 세션 생성

Omnitalk SDK 초기화를 제외한 모든 API 기능은 유효한 세션의 존재를 전제로 하고 있습니다. 세션의 생성을 위해 createSession API를 호출합니다. 사용하고 싶은 번호나 문자열을 userId로 전달해 등록할 수 있으며 생략시엔 Omnitalk 서버에서 부여한 임의의 id를 리턴받을 수 있습니다.

```dart
await sdk.createSession();
```

## Step 2. 룸 참여

```dart
await sdk.createRoom();
await sdk.joinRoom();
```

## Step 3. 메시지 보내기

세션을 생성하고 기존 룸이나 신규 생성한 룸에 참여하면 채팅 메시지를 주고 받을 수 있는 상태가 됩니다.

```tsx
await sdk.sendMessage(MESSAGE_ACTION.SEND, message);
await sdk.senMessage(MESSAGE_ACTION.WHISPER, message, target);
```

## Step 4. 메시지 수신하기

룸의 다른 사용자가 보내는 채팅 메시지는 [`MESSAGE_EVENT`](https://docs.omnitalk.io/commons/event-message#message_event) 를 수신하면 얻을 수 있습니다. 이벤트 메시지 수신은 옴니톡의 [on API](https://docs.omnitalk.io/react-native/api-reference#on)를 이용하시면 됩니다.&#x20;

```tsx

sdk.on('event',  (event:any) {
    switch(event['cmd']){
        case 'MESSAGE_EVENT':
            print(event['message']);
            print(event['user_id']);
            print(event['action'];
        }
    }
```

###
