เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

แน่นอนว่าหลายๆ คนเช่นเดียวกับฉัน มีความคิดที่จะทำอะไรที่ไม่เหมือนใคร ในบทความนี้ ผมจะอธิบายปัญหาทางเทคนิคและแนวทางแก้ไขที่ผมต้องเผชิญเมื่อพัฒนา PBX บางทีนี่อาจช่วยให้บางคนตัดสินใจเกี่ยวกับความคิดของตนเอง และช่วยให้คนเดินตามเส้นทางที่เหยียบย่ำได้ เพราะฉันก็ได้รับประโยชน์จากประสบการณ์ของผู้บุกเบิกด้วย

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

แนวคิดและข้อกำหนดที่สำคัญ

และทุกอย่างเริ่มต้นง่ายๆ ด้วยความรักที่มีต่อ ดอกจัน (กรอบการทำงานสำหรับการประยุกต์ใช้การสื่อสารในอาคาร) ระบบโทรศัพท์อัตโนมัติและการติดตั้ง ฟรี (เว็บอินเตอร์เฟสสำหรับ ดอกจัน). หากความต้องการของบริษัทไม่มีความเฉพาะเจาะจงและตกอยู่ในความสามารถ ฟรี - ทุกอย่างยอดเยี่ยมมาก การติดตั้งทั้งหมดเกิดขึ้นภายใน XNUMX ชั่วโมง บริษัทได้รับ PBX ที่กำหนดค่าแล้ว อินเทอร์เฟซที่ใช้งานง่าย และการฝึกอบรมระยะสั้นพร้อมการสนับสนุน หากต้องการ

แต่งานที่น่าสนใจที่สุดคืองานที่ไม่ได้มาตรฐานและมันก็ไม่ได้ยอดเยี่ยมนัก ดอกจัน สามารถทำอะไรได้มากมาย แต่เพื่อให้เว็บอินเตอร์เฟสใช้งานได้ดีจึงต้องใช้เวลามากขึ้นหลายเท่า ดังนั้นรายละเอียดเล็กๆ น้อยๆ อาจใช้เวลานานกว่าการติดตั้ง PBX ที่เหลือมาก และประเด็นไม่ใช่ว่าต้องใช้เวลานานในการเขียนเว็บอินเตอร์เฟส แต่ประเด็นอยู่ที่คุณสมบัติทางสถาปัตยกรรม ฟรี. แนวทางและวิธีการทางสถาปัตยกรรม ฟรี ถูกวางในช่วงเวลาของ php4 และในขณะนั้นก็มี php5.6 อยู่แล้วซึ่งทุกสิ่งสามารถทำให้ง่ายขึ้นและสะดวกยิ่งขึ้น

ฟางเส้นสุดท้ายคือไดอัลแพลนแบบกราฟิกในรูปแบบของไดอะแกรม เมื่อฉันพยายามสร้างอะไรแบบนี้เพื่อ ฟรีฉันรู้ว่าฉันจะต้องเขียนมันใหม่อย่างมีนัยสำคัญ และมันจะง่ายกว่าที่จะสร้างสิ่งใหม่

ข้อกำหนดที่สำคัญคือ:

  • ติดตั้งง่าย เข้าถึงได้ง่ายแม้เป็นผู้ดูแลระบบมือใหม่ ดังนั้นบริษัทต่างๆ จึงไม่จำเป็นต้องมีการบำรุงรักษา PBX จากฝั่งของเรา
  • ปรับเปลี่ยนได้ง่ายเพื่อให้งานได้รับการแก้ไขในเวลาที่เหมาะสม
  • ง่ายต่อการรวมเข้ากับ PBX ยู ฟรี ไม่มี API สำหรับเปลี่ยนการตั้งค่าเช่น ตัวอย่างเช่น คุณไม่สามารถสร้างกลุ่มหรือเมนูเสียงจากแอปพลิเคชันบุคคลที่สามได้ เฉพาะ API เท่านั้น ดอกจัน,
  • opensource - สำหรับโปรแกรมเมอร์สิ่งนี้สำคัญอย่างยิ่งสำหรับการแก้ไขไคลเอนต์

แนวคิดของการพัฒนาที่เร็วขึ้นคือการมีฟังก์ชันทั้งหมดประกอบด้วยโมดูลในรูปแบบของวัตถุ ออบเจ็กต์ทั้งหมดต้องมีคลาสพาเรนต์ร่วมกัน ซึ่งหมายความว่าชื่อของฟังก์ชันหลักทั้งหมดเป็นที่รู้จักแล้ว และดังนั้นจึงมีการใช้งานเริ่มต้นอยู่แล้ว ออบเจ็กต์จะช่วยให้คุณสามารถลดจำนวนอาร์กิวเมนต์ในรูปแบบของอาร์เรย์ที่เชื่อมโยงด้วยคีย์สตริงได้อย่างมาก ซึ่งคุณสามารถดูได้ใน ฟรี เป็นไปได้โดยการตรวจสอบฟังก์ชันทั้งหมดและฟังก์ชันที่ซ้อนกัน ในกรณีของออบเจ็กต์ การเติมข้อความอัตโนมัติซ้ำๆ จะแสดงคุณสมบัติทั้งหมด และโดยทั่วไปจะทำให้ชีวิตง่ายขึ้นหลายเท่า นอกจากนี้การสืบทอดและการกำหนดใหม่ยังช่วยแก้ปัญหามากมายในการแก้ไขได้อีกด้วย

สิ่งต่อไปที่ทำให้เวลาการทำงานซ้ำช้าลงและควรหลีกเลี่ยงก็คือการทำซ้ำ หากมีโมดูลที่รับผิดชอบในการโทรออกของพนักงาน โมดูลอื่นๆ ทั้งหมดที่จำเป็นต้องส่งการโทรไปยังพนักงานควรใช้โมดูลนั้น และไม่สร้างสำเนาของตนเอง ดังนั้น หากคุณต้องการเปลี่ยนแปลงบางสิ่งบางอย่าง คุณจะต้องเปลี่ยนในที่เดียวเท่านั้น และการค้นหา "วิธีการทำงาน" ควรดำเนินการในที่เดียว และไม่ค้นหาทั่วทั้งโครงการ

เวอร์ชันแรกและข้อผิดพลาดครั้งแรก

ต้นแบบแรกพร้อมภายในหนึ่งปี ตามที่วางแผนไว้ PBX ทั้งหมดเป็นแบบโมดูลาร์ และโมดูลไม่เพียงเพิ่มฟังก์ชันใหม่สำหรับการประมวลผลการโทรเท่านั้น แต่ยังเปลี่ยนอินเทอร์เฟซเว็บด้วย

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php
ใช่ ความคิดในการสร้าง dialplan ในรูปแบบของโครงการดังกล่าวไม่ใช่ของฉัน แต่มันสะดวกมากและฉันก็ทำเช่นเดียวกันกับ ดอกจัน.

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

ด้วยการเขียนโมดูล โปรแกรมเมอร์สามารถ:

  • สร้างฟังก์ชันการทำงานของคุณเองสำหรับการประมวลผลการโทรซึ่งสามารถวางไว้บนไดอะแกรมรวมถึงในเมนูองค์ประกอบทางด้านซ้าย
  • สร้างเพจของคุณเองสำหรับเว็บอินเตอร์เฟสและเพิ่มเทมเพลตของคุณไปยังเพจที่มีอยู่ (หากผู้พัฒนาเพจได้จัดเตรียมไว้สำหรับสิ่งนี้)
  • เพิ่มการตั้งค่าของคุณไปยังแท็บการตั้งค่าหลักหรือสร้างแท็บการตั้งค่าของคุณเอง
  • โปรแกรมเมอร์สามารถสืบทอดจากโมดูลที่มีอยู่ เปลี่ยนฟังก์ชันการทำงานบางส่วน และลงทะเบียนภายใต้ชื่อใหม่หรือแทนที่โมดูลเดิม

ตัวอย่างเช่น นี่คือวิธีที่คุณสามารถสร้างเมนูเสียงของคุณเอง:

......
class CPBX_MYIVR extends CPBX_IVR
{
 function __construct()
 {
 parent::__construct();
 $this->_module = "myivr";
 }
}
.....
$myIvrModule = new CPBX_MYIVR();
CPBXEngine::getInstance()->registerModule($myIvrModule,__DIR__); //Зарегистрировать новый модуль
CPBXEngine::getInstance()->registerModuleExtension($myIvrModule,'ivr',__DIR__); //Подменить существующий модуль

การใช้งานที่ซับซ้อนครั้งแรกทำให้เกิดความภาคภูมิใจและความผิดหวังครั้งแรก ฉันดีใจที่มันได้ผล ที่ฉันสามารถสร้างคุณสมบัติหลักๆ ขึ้นมาใหม่ได้แล้ว ฟรี. ฉันดีใจที่มีคนชอบแนวคิดของโครงการนี้ ยังมีตัวเลือกมากมายในการทำให้การพัฒนาง่ายขึ้น แต่แม้ในขณะนั้นงานบางอย่างก็ง่ายขึ้นแล้ว

API สำหรับการเปลี่ยนการกำหนดค่า PBX น่าผิดหวัง - ผลลัพธ์ไม่ได้เป็นสิ่งที่เราต้องการเลย ฉันใช้หลักการเดียวกันกับใน ฟรีด้วยการคลิกปุ่มใช้ การกำหนดค่าทั้งหมดจะถูกสร้างขึ้นใหม่และโมดูลจะรีสตาร์ท

ดูเหมือนว่านี้:

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php
*Dialplan คือกฎ (อัลกอริทึม) ที่ใช้ประมวลผลการโทร

แต่ด้วยตัวเลือกนี้ จึงเป็นไปไม่ได้ที่จะเขียน API ปกติเพื่อเปลี่ยนการตั้งค่า PBX ขั้นแรกให้ดำเนินการนำการเปลี่ยนแปลงไปใช้ ดอกจัน ยาวเกินไปและใช้ทรัพยากรมาก
ประการที่สองคุณไม่สามารถเรียกใช้สองฟังก์ชันพร้อมกันได้เพราะว่า ทั้งสองจะสร้างการกำหนดค่า
ประการที่สาม ใช้การตั้งค่าทั้งหมด รวมถึงการตั้งค่าที่ผู้ดูแลระบบทำไว้

ในเวอร์ชันนี้เช่นเดียวกับใน แอสโคเซียเป็นไปได้ที่จะสร้างการกำหนดค่าของโมดูลที่เปลี่ยนแปลงเท่านั้นและรีสตาร์ทเฉพาะโมดูลที่จำเป็น แต่ทั้งหมดนี้เป็นการวัดเพียงครึ่งเดียว จำเป็นต้องเปลี่ยนแนวทาง

รุ่นที่สอง. จมูกดึงหางติดออกมา

แนวคิดในการแก้ปัญหาไม่ใช่การสร้างการกำหนดค่าและแผนการโทรขึ้นมาใหม่ ดอกจันแต่บันทึกข้อมูลลงในฐานข้อมูลและอ่านจากฐานข้อมูลโดยตรงขณะประมวลผลการโทร ดอกจัน ฉันรู้วิธีอ่านการกำหนดค่าจากฐานข้อมูลแล้ว เพียงเปลี่ยนค่าในฐานข้อมูลแล้วการโทรครั้งถัดไปจะถูกประมวลผลโดยคำนึงถึงการเปลี่ยนแปลง และฟังก์ชันนี้เหมาะสำหรับการอ่านพารามิเตอร์ dialplan เรียลไทม์_แฮช.

ท้ายที่สุดแล้ว ไม่จำเป็นต้องเริ่มต้นใหม่อีก ดอกจัน เมื่อเปลี่ยนการตั้งค่าและการตั้งค่าทั้งหมดก็เริ่มใช้งานได้ทันที ดอกจัน.

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

การเปลี่ยนแปลงแผนการโทรเพียงอย่างเดียวคือการเพิ่มหมายเลขต่อและ คำแนะนำ. แต่สิ่งเหล่านี้เป็นการเปลี่ยนแปลงจุดเล็กๆ

exten=>101,1,GoSub(‘sub-callusers’,s,1(1)); - точечное изменение, добавляется/изменяется через ami

; sub-callusers – универсальная функция генерится при установке модуля.
[sub-callusers]
exten =>s,1,Noop()
exten =>s,n,Set(LOCAL(TOUSERID)=${ARG1})
exten =>s,n,ClearHash(TOUSERPARAM)
exten =>s,n,Set(HASH(TOUSERPARAM)=${REALTIME_HASH(rl_users,id,${LOCAL(TOUSERID)})})
exten =>s,n,GotoIf($["${HASH(TOUSERPARAM,id)}"=""]?return)
...

คุณสามารถเพิ่มหรือเปลี่ยนบรรทัดใน Dialplan ได้อย่างง่ายดายโดยใช้ Ami (อินเทอร์เฟซการควบคุม ดอกจัน) และไม่จำเป็นต้องรีบูต Dialplan ทั้งหมด

วิธีนี้ช่วยแก้ปัญหาเกี่ยวกับการกำหนดค่า API คุณสามารถเข้าไปในฐานข้อมูลโดยตรงและเพิ่มกลุ่มใหม่หรือเปลี่ยนแปลงได้ เช่น เวลาโทรเข้าในช่อง “เวลาโทรออก” ของกลุ่มและการโทรครั้งถัดไปจะคงอยู่ตามเวลาที่กำหนดอยู่แล้ว (นี่ไม่ใช่คำแนะนำสำหรับ การดำเนินการ เนื่องจากการดำเนินการ API บางอย่างจำเป็นต้องมี Ami โทร)

การใช้งานที่ยากลำบากครั้งแรกนำมาซึ่งความภาคภูมิใจและความผิดหวังครั้งแรกอีกครั้ง ฉันดีใจที่มันได้ผล ฐานข้อมูลกลายเป็นลิงก์ที่สำคัญ การพึ่งพาดิสก์เพิ่มขึ้น มีความเสี่ยงมากขึ้น แต่ทุกอย่างทำงานได้อย่างเสถียรและไม่มีปัญหา และที่สำคัญที่สุดคือตอนนี้ทุกสิ่งที่สามารถทำได้ผ่านเว็บอินเตอร์เฟสก็สามารถทำได้ผ่าน API และใช้วิธีการเดียวกันนี้ นอกจากนี้ เว็บอินเทอร์เฟซยังได้กำจัดปุ่ม “ใช้การตั้งค่ากับ PBX” ซึ่งผู้ดูแลระบบมักลืมไป

สิ่งที่น่าผิดหวังคือการพัฒนามีความซับซ้อนมากขึ้น ตั้งแต่เวอร์ชันแรก ภาษา PHP ได้สร้าง dialplan ในภาษานั้น ดอกจัน และมันก็ดูอ่านไม่ออกเลย รวมไปถึงภาษาด้วย ดอกจัน สำหรับการเขียน dialplan ถือเป็นเรื่องดั้งเดิมอย่างยิ่ง

มันดูเหมือนอะไร:

$usersInitSection = $dialplan->createExtSection('usersinit-sub','s');
$usersInitSection
 ->add('',new Dialplanext_gotoif('$["${G_USERINIT}"="1"]','exit'))
 ->add('',new Dialplanext_set('G_USERINIT','1'))
 ->add('',new Dialplanext_gosub('1','s','sub-AddOnAnswerSub','usersconnected-sub'))
 ->add('',new Dialplanext_gosub('1','s','sub-AddOnPredoDialSub','usersinitondial-sub'))
 ->add('',new Dialplanext_set('LOCAL(TECH)','${CUT(CHANNEL(name),/,1)}'))
 ->add('',new Dialplanext_gotoif('$["${LOCAL(TECH)}"="SIP"]','sipdev'))
 ->add('',new Dialplanext_gotoif('$["${LOCAL(TECH)}"="PJSIP"]','pjsipdev'))

ในเวอร์ชันที่สอง dialplan กลายเป็นสากล โดยมีตัวเลือกการประมวลผลที่เป็นไปได้ทั้งหมด ขึ้นอยู่กับพารามิเตอร์ และขนาดเพิ่มขึ้นอย่างมาก ทั้งหมดนี้ทำให้เวลาในการพัฒนาช้าลงอย่างมาก และความคิดที่ว่าจำเป็นต้องเข้าไปยุ่งเกี่ยวกับแผนการโทรอีกครั้งก็ทำให้ฉันเสียใจ

รุ่นที่สาม

ความคิดในการแก้ปัญหาไม่ได้เกิดขึ้น ดอกจัน dialplan จาก php และการใช้งาน ฟาสต์เอจี และเขียนกฎการประมวลผลทั้งหมดใน PHP เอง ฟาสต์เอจี ช่วยให้ ดอกจันเพื่อประมวลผลการโทร ให้เชื่อมต่อกับเต้ารับ รับคำสั่งจากที่นั่นและส่งผลลัพธ์ ดังนั้นตรรกะของ dialplan จึงอยู่นอกขอบเขตอยู่แล้ว ดอกจัน และสามารถเขียนเป็นภาษาใดก็ได้ ในกรณีของฉันคือ PHP

มีการลองผิดลองถูกมากมาย ปัญหาหลักคือฉันมีคลาส/ไฟล์จำนวนมากอยู่แล้ว ใช้เวลาประมาณ 1,5 วินาทีในการสร้างออบเจ็กต์ เริ่มต้นวัตถุ และลงทะเบียนระหว่างกัน และความล่าช้าต่อการโทรนี้ไม่ใช่สิ่งที่สามารถละเลยได้

การเริ่มต้นควรเกิดขึ้นเพียงครั้งเดียว ดังนั้นการค้นหาโซลูชันจึงเริ่มต้นด้วยการเขียนบริการด้วย php โดยใช้ กระทู้. หลังจากทดลองใช้มาหนึ่งสัปดาห์ ตัวเลือกนี้ก็ถูกระงับเนื่องจากความซับซ้อนของวิธีการทำงานของส่วนขยายนี้ หลังจากการทดสอบหนึ่งเดือน ฉันก็ต้องละทิ้งการเขียนโปรแกรมแบบอะซิงโครนัสใน PHP ฉันต้องการบางสิ่งที่เรียบง่ายและคุ้นเคยสำหรับผู้เริ่มต้น PHP และส่วนขยายจำนวนมากสำหรับ PHP เป็นแบบซิงโครนัส

วิธีแก้ไขคือบริการแบบมัลติเธรดของเราเองในภาษา C ซึ่งคอมไพล์ด้วย PHPLIB. โดยจะโหลดไฟล์ ATS php ทั้งหมด รอให้โมดูลทั้งหมดเริ่มต้น เพิ่มการโทรกลับหากัน และเมื่อทุกอย่างพร้อมก็แคชไว้ เมื่อสอบถามทาง ฟาสต์เอจี มีการสร้างสตรีม สำเนาจากแคชของคลาสและข้อมูลทั้งหมดจะถูกทำซ้ำ และคำขอจะถูกส่งไปยังฟังก์ชัน php

ด้วยโซลูชั่นนี้ระยะเวลาตั้งแต่การโทรไปยังบริการของเราจนถึงคำสั่งแรก ดอกจัน ลดลงจาก 1,5 วินาทีเป็น 0,05 วินาที และครั้งนี้ขึ้นอยู่กับขนาดของโครงการเล็กน้อย

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

เป็นผลให้เวลาในการพัฒนา Dialplan ลดลงอย่างมาก และฉันสามารถชื่นชมสิ่งนี้ได้เนื่องจากฉันต้องเขียน Dialplan ทั้งหมดของโมดูลทั้งหมดใน PHP ประการแรกควรเขียนวิธีการเป็น php เพื่อรับวัตถุจากฐานข้อมูลแล้วซึ่งจำเป็นสำหรับการแสดงในเว็บอินเตอร์เฟสและประการที่สองและนี่คือสิ่งสำคัญในที่สุดก็เป็นไปได้ที่จะทำงานกับสตริงที่มีตัวเลขและอาร์เรย์ได้อย่างสะดวกในที่สุด พร้อมฐานข้อมูลและส่วนขยาย PHP มากมาย

ในการประมวลผล dialplan ในคลาสโมดูล คุณต้องใช้ฟังก์ชันนี้ dialplanDynamicCall และการโต้แย้ง pbxCallRequest จะมีวัตถุที่จะโต้ตอบด้วย ดอกจัน.

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

นอกจากนี้ยังเป็นไปได้ที่จะดีบัก dialplan (php มี xdebug และใช้ได้กับบริการของเรา) คุณสามารถย้ายทีละขั้นตอนโดยดูค่าของตัวแปร

ข้อมูลการโทร

การวิเคราะห์และรายงานใดๆ จำเป็นต้องมีข้อมูลที่รวบรวมอย่างถูกต้อง และบล็อก PBX นี้ยังผ่านการลองผิดลองถูกมากมายตั้งแต่เวอร์ชันแรกถึงเวอร์ชันที่สาม บ่อยครั้งที่ข้อมูลการโทรเป็นสัญญาณ การโทรหนึ่งครั้ง = หนึ่งการบันทึก: ใครโทรมา ใครรับสาย คุยกันนานแค่ไหน ในตัวเลือกที่น่าสนใจยิ่งขึ้น มีป้ายเพิ่มเติมระบุว่าพนักงาน PBX คนใดถูกเรียกระหว่างการโทร แต่ทั้งหมดนี้ครอบคลุมเพียงส่วนหนึ่งของความต้องการเท่านั้น

ข้อกำหนดเบื้องต้นคือ:

  • บันทึกไม่เพียงแต่ว่าใครที่ PBX โทรมาเท่านั้น แต่ยังรวมถึงผู้ที่รับสายด้วย มีการสกัดกั้นและจะต้องนำมาพิจารณาเมื่อวิเคราะห์การโทร
  • เวลาก่อนที่จะติดต่อกับพนักงาน ใน ฟรี และ PBX อื่นๆ บางสายจะถือว่ารับสายทันทีที่ PBX รับสาย แต่สำหรับเมนูเสียง คุณต้องรับโทรศัพท์ก่อน ดังนั้นทุกสายจึงจะได้รับสาย และเวลารอรับสายจะอยู่ที่ 0-1 วินาที ดังนั้นจึงตัดสินใจที่จะบันทึกไม่เพียง แต่เวลาก่อนที่จะตอบสนอง แต่เวลาก่อนที่จะเชื่อมต่อกับโมดูลหลัก (โมดูลเองตั้งค่าสถานะนี้ ปัจจุบันคือ "พนักงาน", "สายภายนอก")
  • สำหรับ Dialplan ที่ซับซ้อนมากขึ้น เมื่อมีการโทรระหว่างกลุ่มต่างๆ จำเป็นต้องตรวจสอบแต่ละองค์ประกอบแยกกัน

ตัวเลือกที่ดีที่สุดกลายเป็นเมื่อโมดูล PBX ส่งข้อมูลเกี่ยวกับตัวเองในการโทรและบันทึกข้อมูลในรูปแบบต้นไม้ในท้ายที่สุด

ดูเหมือนว่านี้:

ขั้นแรก ข้อมูลทั่วไปเกี่ยวกับการโทร (เช่นเดียวกับคนอื่นๆ - ไม่มีอะไรพิเศษ)

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

  1. รับสายจากสายนอก”สำหรับการทดสอบ“เมื่อเวลา 05:55:52 น. จากหมายเลข 89295671458 เป็นหมายเลข 89999999999 สุดท้ายพนักงานก็ตอบกลับมา”เลขา2» ด้วยหมายเลข 104 ลูกค้ารอ 60 วินาที และพูด 36 วินาที
  2. พนักงาน "เลขา2“โทรไปที่ 112 แล้วพนักงานรับสาย”ผู้จัดการ1» หลังจาก 8 วินาที พวกเขาคุยกันเป็นเวลา 14 วินาที
  3. ลูกค้าถูกโอนไปยังพนักงาน "ผู้จัดการ1"โดยที่พวกเขาพูดต่ออีก 13 วินาที

แต่นี่คือยอดภูเขาน้ำแข็ง สำหรับแต่ละบันทึก คุณสามารถรับประวัติการโทรโดยละเอียดผ่าน PBX ได้

เรื่องราวของโปรเจ็กต์หนึ่งหรือว่าฉันใช้เวลา 7 ปีในการสร้าง PBX โดยใช้เครื่องหมายดอกจันและ Php

ข้อมูลทั้งหมดจะถูกนำเสนอเป็นการซ้อนสาย:

  1. รับสายจากสายนอก”สำหรับการทดสอบ» เวลา 05:55:52 จากหมายเลข 89295671458 ถึงหมายเลข 89999999999
  2. เวลา 05:55:53 สายนอกจะส่งสายเข้าวงจรขาเข้า "ทดสอบ»
  3. เมื่อประมวลผลการโทรตามโครงร่างโมดูล “ผู้จัดการโทรมา" โดยการโทรจะใช้เวลา 16 วินาที นี่คือโมดูลที่พัฒนาขึ้นสำหรับลูกค้า
  4. โมดูล "ผู้จัดการโทรมา" โทรหาพนักงานที่รับผิดชอบหมายเลข (ลูกค้า) "ผู้จัดการ1” และรอ 5 วินาทีสำหรับการตอบกลับ ผู้จัดการไม่ตอบ
  5. โมดูล "ผู้จัดการโทรมา"ส่งสายเข้ากลุ่ม"ผู้จัดการคอร์ป" เหล่านี้คือผู้จัดการคนอื่นๆ ที่มีทิศทางเดียวกัน (นั่งอยู่ในห้องเดียวกัน) และรอคำตอบ 11 วินาที
  6. กลุ่ม "ผู้จัดการคอร์ป“เรียกพนักงาน”ผู้จัดการ1, ผู้จัดการ2, ผู้จัดการ3“พร้อมกันเป็นเวลา 11 วินาที ไม่มีคำตอบ.
  7. การโทรของผู้จัดการสิ้นสุดลง และวงจรก็ส่งสัญญาณเรียกไปที่โมดูล”การเลือกเส้นทางจาก 1c" โมดูลที่เขียนสำหรับลูกค้าด้วย ที่นี่การโทรได้รับการประมวลผลเป็นเวลา 0 วินาที
  8. วงจรส่งสายเข้าเมนูเสียง”พื้นฐานพร้อมการโทรเพิ่มเติม" ลูกค้ารออยู่ที่นั่นเป็นเวลา 31 วินาที ไม่มีการโทรออกเพิ่มเติม
  9. โครงการส่งการโทรไปยังกลุ่ม "เลขานุการ" โดยที่ลูกค้ารอ 12 วินาที
  10. ในกลุ่มมีพนักงาน 2 คนถูกเรียกพร้อมกัน”เลขา1"และ"เลขา2" และหลังจากผ่านไป 12 วินาที พนักงานก็ตอบ "เลขา2" คำตอบของการโทรจะซ้ำกับการโทรของผู้ปกครอง ปรากฎว่าในกลุ่มเขาตอบว่า “เลขา2“เมื่อโทรไปวงจรก็ตอบ”เลขา2“และรับสายสายนอกด้วย”เลขา2'

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

การจัดเก็บข้อมูลดังกล่าวจะช่วยให้คุณสามารถแยกแต่ละกลุ่มออกจากกันและกำหนดวิธีการทำงานได้อย่างมีประสิทธิภาพ และสร้างกราฟของกลุ่มที่ตอบและที่ไม่ได้รับตามชั่วโมง คุณยังสามารถตรวจสอบความแม่นยำของการเชื่อมต่อกับผู้จัดการที่รับผิดชอบได้ด้วยการวิเคราะห์การถ่ายโอนหลังจากเชื่อมต่อกับผู้จัดการแล้ว

นอกจากนี้คุณยังสามารถทำการศึกษาที่ค่อนข้างผิดปรกติได้เช่นความถี่ที่หมายเลขที่ไม่ได้อยู่ในฐานข้อมูลหมุนหมายเลขต่อที่ถูกต้องหรือเปอร์เซ็นต์ของการโทรออกที่โอนไปยังโทรศัพท์มือถือ

ผลหรือไม่

ผู้เชี่ยวชาญไม่จำเป็นต้องบำรุงรักษา PBX ผู้ดูแลระบบธรรมดาที่สุดสามารถทำได้ - ผ่านการทดสอบแล้วในทางปฏิบัติ

สำหรับการปรับเปลี่ยนไม่จำเป็นต้องมีผู้เชี่ยวชาญที่มีคุณสมบัติจริงจัง ความรู้เกี่ยวกับ PHP ก็เพียงพอแล้วเพราะ โมดูลได้ถูกเขียนไว้แล้วสำหรับโปรโตคอล SIP และสำหรับคิว และการโทรหาพนักงาน และอื่นๆ มีคลาส wrapper สำหรับ ดอกจัน. ในการพัฒนาโมดูล โปรแกรมเมอร์สามารถ (และในทางที่ดีควร) เรียกโมดูลสำเร็จรูป และความรู้ ดอกจัน ไม่จำเป็นเลยหากลูกค้าขอให้เพิ่มหน้าพร้อมรายงานใหม่ แต่การปฏิบัติแสดงให้เห็นว่าแม้ว่าโปรแกรมเมอร์บุคคลที่สามสามารถรับมือได้ แต่พวกเขารู้สึกไม่ปลอดภัยหากไม่มีเอกสารประกอบและความคิดเห็นที่ครอบคลุมตามปกติ ดังนั้นจึงยังมีพื้นที่สำหรับการปรับปรุง

โมดูลสามารถ:

  • สร้างความสามารถในการประมวลผลการโทรใหม่
  • เพิ่มบล็อกใหม่ให้กับเว็บอินเตอร์เฟส
  • สืบทอดจากโมดูลที่มีอยู่ กำหนดฟังก์ชันใหม่และแทนที่ หรือเพียงแค่เป็นสำเนาที่แก้ไขเล็กน้อย
  • เพิ่มการตั้งค่าของคุณไปยังเทมเพลตการตั้งค่าของโมดูลอื่น ๆ และอีกมากมาย

การตั้งค่า PBX ผ่าน API ตามที่อธิบายไว้ข้างต้น การตั้งค่าทั้งหมดจะถูกจัดเก็บไว้ในฐานข้อมูลและอ่าน ณ เวลาที่โทร ดังนั้นคุณจึงสามารถเปลี่ยนการตั้งค่า PBX ทั้งหมดผ่าน API ได้ เมื่อเรียก API การกำหนดค่าจะไม่ถูกสร้างขึ้นใหม่และโมดูลจะไม่รีสตาร์ท ดังนั้นจึงไม่สำคัญว่าคุณจะมีการตั้งค่าและพนักงานจำนวนเท่าใด คำขอ API ดำเนินการอย่างรวดเร็วและไม่บล็อกซึ่งกันและกัน

PBX จัดเก็บการดำเนินการหลักทั้งหมดพร้อมการโทรโดยมีระยะเวลา (การรอ/การสนทนา) การซ้อนและอยู่ในเงื่อนไขของ PBX (พนักงาน กลุ่ม สายภายนอก ไม่ใช่ช่องสัญญาณ หมายเลข) สิ่งนี้ช่วยให้คุณสร้างรายงานที่หลากหลายสำหรับลูกค้าเฉพาะราย และงานส่วนใหญ่คือการสร้างอินเทอร์เฟซที่ใช้งานง่าย

เวลาจะบอกสิ่งที่จะเกิดขึ้นต่อไป ยังคงมีความแตกต่างมากมายที่ต้องทำใหม่ ยังมีแผนมากมาย แต่ผ่านไปหนึ่งปีแล้วนับตั้งแต่การสร้างเวอร์ชันที่ 3 และเราสามารถพูดได้แล้วว่าแนวคิดนี้ใช้ได้ผล ข้อเสียเปรียบหลักของเวอร์ชัน 3 คือทรัพยากรฮาร์ดแวร์ แต่โดยปกติจะเป็นสิ่งที่คุณต้องจ่ายเพื่อความสะดวกในการพัฒนา

ที่มา: will.com

เพิ่มความคิดเห็น