สร้าง Audio Conference ด้วย Asterisk

Asterisk Opensource IP Pbx

สร้าง Audio Conference ด้วย Asterisk

โพสต์โดย voip4share » 01 มี.ค. 2010 19:06

ใน Asterisk มีอยู่แอปพลิเคชั่นหนึ่งที่ให้เราประชุมหลายๆสายพร้อมกันได้ เป็นการประชุมด้วย "เสียง" นะครับหรือที่เรียกว่า Audio Conferenc แอปพลิเคชั่นที่ว่านี้มีชื่อว่า MeetMe() โดยคุณสมบัติหลักๆของห้องประชุมมีดังต่อไปนี้ครับ
- ตั้งพาสเวอร์ดป้องกันห้องประชุมได้
- ประธานการประชุมสามารถควบคุมการประชุมในห้องได้ เช่น ปิดเสียงผู้เข้าประชุม ล๊อกห้องประชุม หรือเตะผู้เข้าประชุมออกจากห้อง
- ปิดเสียงทุกคนในห้องประชุม ยกเว้นประธาน เพื่อให้ฟังอย่างเดียว เช่นตอนที่ประกาศนโยบายบริษัท หรือกระจายข่าว เป็นต้น

1. คอนฟิกไฟล์ meetme.conf
รูปแบบการสร้างห้องประชุมในไฟล์ meetme.conf เป็นตามนี้ครับ

conf => confno[,pin][,adminpin]

โดยที่ confno เป็นหมายเลขห้องประชุม เช่น 600 ส่วน pin เป็นพาสเวอร์ดที่ผู้เข้าประชุม (ยกเว้นประธาน) ต้องกด และ adminpin เป็นพาสเวอร์ดที่ประธานการประชุมต้องกด

การสร้างห้องประชุมนั้นนะครับ ก็ทำง่ายๆเลย คือไปคอนฟิกที่ไฟล์ meetme.conf โดยตั้งชื่อ (หรือเบอร์ห้อง) ที่จะใช้เป็นหมายเลขห้องและพาสเวอร์ดซึ่งจะมีหรือไม่ก็ได้ ถ้าเราตั้งพาสเวอร์ดไว้ เวลามีคนกดโทรเข้ามาที่เบอร์ห้องประชุม Asterisk จะถามหาพาสเวอร์ด ลองมาสร้างห้องประชุมหมายเลข 600 กันครับ ตอนแรกยังไม่ต้องตั้งพาสเวอร์ด
ในไฟล์ meetme.conf จะเป็นแบบนี้
โค้ด: เลือกทั้งหมด
[rooms]
conf => 600

อีกแบบหนึ่งตั้งพาสเวอร์ดทั้งผู้ร่วมประชุมและประธาน
โค้ด: เลือกทั้งหมด
[rooms]
conf => 600,1234,4321

แค่นี้ก็เสร็จครับ เข้า Asterisk Console แล้วพิมพ์คำสั่ง
โค้ด: เลือกทั้งหมด
module reload app_meetme.so

เพื่อให้ Asterisk อ่านไฟล์ meetme.conf ใหม่

2. สร้าง Dialplan
ลำดับต่อไปก็คอนฟิก Dialplan สร้างเบอร์ extension ให้ยูสเซอร์เรียกไปที่ห้องประชุมหมายเลข 600 ได้ แล้วเรียกแอปพลิเคชั่น MeetMe() มาทำงาน ซึ่ง MeetMe() จะมีอยู่ 3 อาร์กิวเม้นต์ ได้แก่ เบอร์ห้องประชุม (ที่เราได้คอนฟิกไว้ในไฟล์ meetme.conf เมื่อกี้นี้), ออปชั่นจำนวนหนึ่ง แล้วก็พาสเวอร์ดที่ยูสเซอร์ต้องใส่จึงจะเข้าห้องประชุมได้ สร้าง Dialplan เรียกไปที่ห้องประชุมหมายเลข 600 ใช้ออปชั่น i ซึ่งจะประกาศเวลามีคนเข้าหรือออกจากห้องประชุมและพาสเวอร์ดคือ 54321 สมมติว่าทุกเบอร์ Extension อยู่ใน Context ชื่อ [from-internal] นะครับ

รูปแบบการใช้แอปพลิเคชั่น MeetMe()
MeetMe(confno,[options])
โดยที่ confno เป็นหมายเลขห้องประชุม, options เป็นออปชั่นในการใช้งานห้องประชุม รายละเอียดของ option ทั้งหมด ดูหัวข้อที่ 4 นะครับ

ไฟล์ extensions.conf
โค้ด: เลือกทั้งหมด
[from-internal]
include => conference-1

[conference-1]
exten => 600,1,MeetMe(600,i)


เข้า Asterisk Console แล้วพิมพ์คำสั่ง
โค้ด: เลือกทั้งหมด
reload dialplan


3. ทดสอบ
ยูสเซอร์กดเบอร์ Extension 600 ระบบจะให้ป้อนพาสเวอร์ด ก็กด 54321 แล้วก็จะเข้าไปในห้องประชุมได้

4.ออปชั่นการใช้งานห้อง Conference
ออปชั่นทั้งหมดที่เราใส่ให้แก่แอปพลิเคชั่น MeetMe() ได้มีดังต่อไปนี้ครับ

m โหมด Monitor เท่านั้น (ฟังอย่างเดียว พูดไม่ได้)
t โหมด Talk-Only พูดอย่างเดียว ไม่ได้ยินเสียง
T เซ็ตการตรวจจับผู้พูด (ส่งไปยัง Manager Interface และ MeetMe list)
i ประกาศเมื่อมีผู้เข้าหรือออกจากห้องประชุม
p ยูสเซอร์ออกจากห้องประชุมได้ โดยกดปุ่ม #
X ยูสเซอร์ออกจากห้องประบุมได้โดยกด extension ที่กำหนดไว้ 1 หลัก (ตั้งตัวเลขโดยใช้ตัวแปร ${MEETME_EXIT_CONTEXT}) หรือถ้าไม่ได้ตั้งตัวแปรไว้ก็จะเป็นเบอร์ extension ใน context ปัจจุบัน
d สร้างห้อง conference อัตโนมัติ
D สร้างห้อง conference อัตโนมัติ พร้อมถามรหัสผ่าน PIN ถ้าไม่ต้องการป้อนพิน ให้กดปุ่ม # แทน
e เลือกห้องประชุมที่ว่าง
E เลือกห้องประชุมที่ไม่รหัสผ่านป้องกัน
v เซ็ตโหมด Video ให้ใช้ Video ได้ แต่ไม่ใช่ Video Conference นะครับ
r บันทึกเสียงในห้องประชุม ตั้งชื่อไฟล์ด้วยตัวแปร ${MEETME_RECORDINGFILE} แบบฟอร์แม็ต ${MEETME_RECORDINGFORMAT} ดีฟอลท์จะชื่อไฟล์ว่า meetme-rec-${CONFNO}-${UNIQUEID} และดีฟอลท์ฟอร์แม็ตคือ .wav
q เซ็ต Quiet mode (ไม่เล่นเสียงขณะเข้า/ออกจาห้องประชุม)
M ใช้ Music On Hold เมื่อให้ห้องประชุมมีคนเดียว
b รัน AGI Script ที่ระบุไว้ใน ${MEETME_AGI_BACKGROUND} ดีฟอลท์ conf-background.agi แต่จะไม่เวอร์คบนแชนแนลที่ไม่ใช่ Zap ในห้องประชุมเดียวกัน
s นำเสนอเมนู (สำหรับยูสเซอร์หรือแอดมิน) เมื่อกด * ส่งไป
a เซ็ตโหมดแอดมิน ระบุว่าห้องประชุมนี้มีประธานดูแลอยู่
A เซ็ตโหมด marked

แอปพลิเคชั่น MeetMeCount()

MeetMeCount(confno[,variable])

บอกจำนวนยูสเซอร์ในห้องประชุมหมายเลข confno ถ้าอาร์กิวเม้นต์ variable เป็นตัวแปรจะเอาจำนวนคนในห้องประชุมมาเซ็ตค่าในตัวแปร variable แทน ซึ่งก็เป็นประโยชน์ในกรณีเช็คจำนวนคนในห้องประชุม

โค้ด: เลือกทั้งหมด
exten => 601,1,Playback(conf-thereare)
exten => 601,2,MeetMeCount(600)
exten => 601,3,Playback(conf-peopleinconf)


; นับจำนวนผู้ประชุมในห้อง 600 และกำหนดจำนวนให้แก่ตัวแปร ${CONFCOUNT} ถ้ายังไม่ถึง 10 คนก็ให้เข้าไปได้ กดรหัสผ่านก่อน แต่ถ้า 10 คนแล้วก็จะบอกว่าห้องประชุมเต็ม
exten => 600,1,MeetMeCount(600,CONFCOUNT)
exten => 600,2,GotoIf($[${CONFCOUNT} <= 10]?3:100)
exten => 600,3,MeetMe(600,i,54321)
exten => 600,100,Playback(conf-full)


แอปพลิเคชั่น MeetMeAdmin()
ยังมีแอปพลิเคชั่นอีก 1 ตัวที่เกี่ยวข้องกับ MeetMe ครับ นั่นคือ MeetMeAdmin()

รูปแบบการเขียนแอปพลิเคชั่น MeetMeAdmin() คือ MeetMeAdmin(confno,command[,user])

แอปพลิเคชั่นนี้จะส่งคำสั่งแอดมินเข้าไปในห้องประชุมที่กำหนดเพื่อควบคุมห้องประชุม แอปพลิเคชั่นนี้มี 3 อาร์กิวเม้นต์ โดยที่ confno เป็นหมายเลขห้องประชุม ส่วน user เป็นเบอร์ Extension ของยูเซอร์ที่ต้องการเตะออกจากห้องประชุม ใช้ร่วมกับออปชั่น k นะครับ ส่วน command เป็นคำสั่งซึ่งมีอยู่หลายคำสั่งดังนี้

K เตะยูสเซอร์ทุกคนออกจากห้องประชุม
k เตะยูสเซอร์คนใดคนหนึ่งตามที่ระบุไว้ในอาร์กิวเม้นต์ user ออกจากห้องประชุม
e เตะผู้เข้าร่วมประชุมที่เข้ามาคนสุดท้ายออก
L ล๊อคห้องประชุม
l ปลดล๊อกห้องประชุม
M ปิดเสียงผู้เข้าประชุมคนใดคนหนึ่ง
m ยกเลิกการปิดเสียงผู้เข้าประชุมคนใดคนหนึ่ง
N ปิดเสียงผู้เข้าประชุมทุกคน ยกเว้นประธาน
n ยกเลิกการปิดเสียงผู้เข้าประชุมทุกคน
R รีเซ็ตการเซ็ตโวลุ่มของยูสเซอร์ทุกคน
r รีเซ็ตการเซ็ตโวลุ่มของยูสเซอร์คนใดคนหนึ่ง
S เพิ่มระดับโวลุ่มของทุกยูสเซอร์
s ลดระดับโวลุ่มของทุกยูสเซอร์
T เพิ่มเสียงของยูสเซอร์ขณะที่เขาพูด
t ลดเสียงของยูสเซอร์ขณะที่เขาพูด
U เพิ่มความดังของเสียงที่ยูสซอร์คนใดคนหนึ่งได้ยิน
u ลดความดังของเสียงที่ยูสเซอร์คนใดคนหนึ่งได้ยิน
V เพิ่มระดับโวลุ่มของทั้งห้องประชุม
v ลดระดับโวลุ่มของทั้งห้องประชุม

ตัวอย่าง
ปิดเสียงห้อง 501
exten => 123,1,MeetMeAdmin(501,M)

เตะยูสเซอร์ 1234 ออกจากห้องหมายเลข 501
exten => 124,1,MeetMe(501,k,1234)
เรียกดูรายชื่อยูสเซอร์ในห้องประชุมด้วยคำสั่ง meetme list จาก Asterisk Console ครับ

คำสั่งเกี่ยวกับ MeetMe ใน Asterisk Console
meetme unlock <confno> <usernumber>
meetme lock <confno> <usernumber>
meetme unmute <confno> <usernumber>
meetme mute <confno> <usernumber>
meetme kick <confno> <usernumber>
meeetme list
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

่กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 1 ท่าน