SIPcall Guide

SIPcall์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ผ๋ฐ˜ ์ „ํ™” ๊ฐ„ ์ „ํ™”๋ฅผ ์—ฐ๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ†ตํ™” ๋ฐœ์‹ ์ž๋Š” caller, ์ฐฉ์‹ ์ž๋ฅผ callee๋ผ๋Š” ํ†ต์‹  ์šฉ์–ด๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Omnitalk SDK๋ฅผ ์ด์šฉํ•˜์—ฌ offerCall(), answerCall()์„ ๊ฐ๊ฐ ํ˜ธ์ถœํ•˜๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ ๋ฉ”์‹œ์ง€์— ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™” ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Call Flow ์—์„œ๋Š” audiocall์˜ ํ๋ฆ„์„ sequence diagram์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Step 0. SDK ์ดˆ๊ธฐํ™” ๋ฐ ๊ฐ์ฒด ์ƒ์„ฑ

Developer's Guide์˜ Pre-requisitearrow-up-right์—์„œ ์žฅ์น˜ ์„ค์ • ๋ฐ ๊ฐœ๋ฐœ ๊ณตํ†ต ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Step 1. ์„ธ์…˜ ์ƒ์„ฑ

Omnitalk SDK ์ดˆ๊ธฐํ™”๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  API ๊ธฐ๋Šฅ์€ ์œ ํšจํ•œ ์„ธ์…˜์˜ ์กด์žฌ๋ฅผ ์ „์ œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ์…˜์˜ ์ƒ์„ฑ์„ ์œ„ํ•ด createSession API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ฒˆํ˜ธ๋‚˜ ๋ฌธ์ž์—ด์„ userId๋กœ ์ „๋‹ฌํ•ด ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ƒ๋žต์‹œ์—” Omnitalk ์„œ๋ฒ„์—์„œ ๋ถ€์—ฌํ•œ ์ž„์˜์˜ id๋ฅผ ๋ฆฌํ„ด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

await sdk.createSession();

Step 2. ๋ฐœ์‹ 

offerCall API๋ฅผ ์ด์šฉํ•˜์—ฌ ์ „ํ™” ๋ฐœ์‹  ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • callType: ์ „ํ™” ํƒ€์ž…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. CallType์€ Omnitalk SDK์—์„œ enum type์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SIP ํ†ตํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” sipcall ์„ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • callee: ์ „ํ™” ์ˆ˜์‹ ์ž์˜ ์‹ค์ œ ์ „ํ™”๋ฒˆํ˜ธ(์ผ๋ฐ˜์ „ํ™”, ๋ชจ๋ฐ”์ผ) ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • record: Optional ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ, ๋…น์Œ ์—ฌ๋ถ€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (defalut = false)

await sdk.offerCall(
    callType: CallType.sipcall, 
    callee : '01011119999'
    );

offerCall ํ˜ธ์ถœ ์„ฑ๊ณต์‹œ caller๋Š” RINGBACK_EVEVT, callee๋Š” RINGING_EVENT๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. (Event Messagearrow-up-right ์ฐธ๊ณ )

Step 3. ์ˆ˜์‹ 

callee๊ฐ€ callNumber๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ์—์„œ ์ „ํ™” ์š”์ฒญ์ด ์™”์„๋•Œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด makeSipNum API๋ฅผ ์ด์šฉํ•˜์—ฌ callNumber๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ์—์„œ caller๊ฐ€ offerCall(์ „ํ™” ์š”์ฒญ)์„ ํ•˜์—ฌRINGING_EVENT๋ฅผ ๋ฐ›์€ ๊ฒฝ์šฐ, callee๋Š” ๋ณ„๋„์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  answerCall()์„ ํ˜ธ์ถœํ•˜์—ฌ ์ „ํ™”๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹  ๊ฑฐ์ ˆ์„ ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ RINGING_EVENT์—์„œ ๋ฐ›์€ caller์˜ session์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜์—ฌ leave()๋ฅผ ํ˜ธ์ถœํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

callee๊ฐ€ callNumber๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „ ์ „ํ™” ์š”์ฒญ์ด ์™”์„ ๋•Œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด callNumber๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „ caller๊ฐ€ offerCall(์ „ํ™” ์š”์ฒญ)์„ ํ•˜์—ฌ RINGING_EVENT๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ, callee๋Š” answerCall()์˜ ํŒŒ๋ผ๋ฏธํ„ฐ callType๊ณผ caller์— ์ง์ ‘ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ „ํ™”๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์˜ด๋‹ˆํ†ก ์„œ๋ฒ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฑ์—”๋“œ๋กœ ๋ณ„๋„์˜ ์ด๋ฒคํŠธ๋กœ call type๊ณผ caller์˜ ์ •๋ณด๋ฅผ ์ œ๊ณต๋“œ๋ฆด ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  • callType: ์ „ํ™” ํƒ€์ž…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. caller๊ฐ€ offerCall()์„ ํ˜ธ์ถœํ•  ๋–„์™€ ๋™์ผํ•˜๊ฒŒ sipcall ์„ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • caller: caller(์ „ํ™” ๋ฐœ์‹ ์ž)์˜ userId๋ฅผ ์ „๋‹ฌํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Step 4. ์—ฐ๊ฒฐ ์„ฑ๊ณต

์Œ์„ฑ ํ†ตํ™” ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋ฉด caller, callee ์–‘์ธต ๋ชจ๋‘ CONNECTED_EVENT ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

#์˜ค๋””์˜ค ์žฅ์น˜ ์ œ์–ด

mute/unmute

์ „ํ™” ํ†ตํ™”์ค‘์— ์Œ์†Œ๊ฑฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•๊ณผ ์ž์„ธํ•œ ๋‚ด์šฉ์€ API Reference์˜ mute/unmute arrow-up-right๋ถ€๋ถ„์„ ์ฐธ์กฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. mute/unmute API์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ track type์€ Omnitalk SDK์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์žฅ์น˜ ๋ณ€๊ฒฝ

์ „ํ™” ์—ฐ๊ฒฐ ์ „, ๋˜๋Š” ์ „ํ™” ํ†ตํ™”์ค‘์— ์ž…๋ ฅ(๋งˆ์ดํฌ) ์žฅ์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. ์šฐ์„ , ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž…๋ ฅ ์žฅ์น˜ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” getDeviceList() ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์žฅ์น˜์˜ deviceId๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.

  2. setAudioInput() ๋˜๋Š” set AudioOutput()์— deviceId๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated