สร้าง Audio Conference ด้วย Asterisk
โพสต์แล้ว: 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 จะเป็นแบบนี้
อีกแบบหนึ่งตั้งพาสเวอร์ดทั้งผู้ร่วมประชุมและประธาน
แค่นี้ก็เสร็จครับ เข้า Asterisk Console แล้วพิมพ์คำสั่ง
เพื่อให้ 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
เข้า Asterisk Console แล้วพิมพ์คำสั่ง
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 แทน ซึ่งก็เป็นประโยชน์ในกรณีเช็คจำนวนคนในห้องประชุม
; นับจำนวนผู้ประชุมในห้อง 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
- ตั้งพาสเวอร์ดป้องกันห้องประชุมได้
- ประธานการประชุมสามารถควบคุมการประชุมในห้องได้ เช่น ปิดเสียงผู้เข้าประชุม ล๊อกห้องประชุม หรือเตะผู้เข้าประชุมออกจากห้อง
- ปิดเสียงทุกคนในห้องประชุม ยกเว้นประธาน เพื่อให้ฟังอย่างเดียว เช่นตอนที่ประกาศนโยบายบริษัท หรือกระจายข่าว เป็นต้น
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