إعداد PJSIP trunk في Asterisk: سجّل رقمًا من ZuteSIP
آخر تحديث 2026-09-30 · بقلم فريق ZuteSIP (ZuteSIP Inc.)
الإجابة المختصرة: لربط Asterisk بـ ZuteSIP، أضف خمسة أقسام في pjsip.conf لـ trunk واحد: قسم registration يشير إلى sip.zutesipdialer.com، وقسم auth باسم مستخدم وكلمة مرور SIP، وقسم aor، وقسم endpoint مقصور على ulaw وalaw، وقسم identify يطابق خادمنا. ثم وجّه رقم DID في extensions.conf واتصل للخارج عبر الـ endpoint.
هذه هي نسخة Asterisk الخالصة لمن يديرون ملفات الإعداد مباشرة. وهي تتبع تخطيط الـ trunk في أمثلة res_pjsip الرسمية، مع تعبئة قيم ZuteSIP.
ما تحتاج إليه
- ✓ رقم من ZuteSIP مع اسم مستخدم وكلمة مرور SIP الخاصين به من صفحة الرقم في لوحة التحكم.
- ✓ Asterisk مع تحميل res_pjsip (أي إصدار مدعوم حاليًا).
- ✓ وصول إلى سطر الأوامر لتعديل /etc/asterisk/pjsip.conf وextensions.conf، وAsterisk CLI للاختبار.
قيم ZuteSIP المستخدمة في الإعداد
| الإعداد | القيمة |
|---|---|
| خادم SIP / المسجِّل / النطاق | sip.zutesipdialer.com |
| بروتوكول النقل والمنفذ | UDP أو TCP 5060؛ وTLS 5061 |
| اسم المستخدم | <SIP_USERNAME> (من صفحة الرقم في لوحة التحكم) |
| كلمة المرور | <SIP_PASSWORD> (من الصفحة نفسها) |
| المصادقة | Digest (اسم مستخدم + كلمة مرور)، قائمة على التسجيل |
| الترميز (Codecs) | G.711 µ-law (PCMU) وG.711 A-law (PCMA) |
| DTMF | RFC 2833 (أحداث RTP) أو SIP INFO |
| الرقم الوارد (DID) | <YOUR_NUMBER> بصيغة E.164 |
pjsip.conf: النقل والـ trunk
الصق هذا في pjsip.conf واستبدل القيم المؤقتة. تجاوز كتلة transport إذا كان لديك نقل UDP بالفعل. ولـ TCP أو TLS، أنشئ النقل المطابق واستخدم المنفذ 5061 مع TLS.
يطابق قسم identify حسب عنوان مصدر حركة SIP القادمة منا؛ ويحلّ Asterisk اسم المضيف عند تحميل الإعدادات.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
; behind NAT also set:
; external_media_address=<PUBLIC_IP>
; external_signaling_address=<PUBLIC_IP>
; local_net=192.168.0.0/16
[zutesip]
type=registration
transport=transport-udp
outbound_auth=zutesip-auth
server_uri=sip:sip.zutesipdialer.com:5060
client_uri=sip:<SIP_USERNAME>@sip.zutesipdialer.com
contact_user=<YOUR_NUMBER>
retry_interval=60
[zutesip-auth]
type=auth
auth_type=userpass
username=<SIP_USERNAME>
password=<SIP_PASSWORD>
[zutesip]
type=aor
contact=sip:sip.zutesipdialer.com:5060
qualify_frequency=60
[zutesip]
type=endpoint
transport=transport-udp
context=from-zutesip
disallow=all
allow=ulaw,alaw
dtmf_mode=rfc4733
outbound_auth=zutesip-auth
aors=zutesip
from_user=<SIP_USERNAME>
from_domain=sip.zutesipdialer.com
callerid=<YOUR_NUMBER>
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
[zutesip]
type=identify
endpoint=zutesip
match=sip.zutesipdialer.com
extensions.conf: خطة الاتصال الواردة والصادرة
تصل المكالمات الواردة إلى السياق from-zutesip ويكون رقمك هو التحويلة المطلوبة. أما النمط الصادر فيرسل الأرقام المطلوبة بعلامة زائد في البداية عبر الـ trunk.
في السطر الصادر، ${EXTEN} هو متغير القناة في Asterisk الذي يحمل الرقم المطلوب. استبدل 1001 بتحويلتك أو مجموعة الرنين الخاصة بك.
[from-zutesip]
; inbound: DID = your ZuteSIP number
exten => <YOUR_NUMBER>,1,NoOp(Inbound call on ZuteSIP DID)
same => n,Dial(PJSIP/1001,30)
same => n,Hangup()
; catch other DID formats (with or without +)
exten => _X.,1,Goto(from-zutesip,<YOUR_NUMBER>,1)
[from-internal]
; outbound: dial +<country code><number>
exten => _+X.,1,Set(CALLERID(num)=<YOUR_NUMBER>)
same => n,Dial(PJSIP/${EXTEN}@zutesip,60)
same => n,Hangup()
خطوة بخطوة: التحميل والاختبار
- 1احفظ الملفين ونفّذ pjsip reload وdialplan reload في Asterisk CLI (asterisk -rvvv).
- 2نفّذ pjsip show registrations وتأكد من أن zutesip في حالة Registered.
- 3نفّذ pjsip show endpoint zutesip للتحقق من الترميز وجهة اتصال aor ومطابقة identify.
- 4اتصل برقمك من ZuteSIP من هاتف آخر وراقب CLI: يجب أن تدخل المكالمة إلى from-zutesip وترن التحويلة 1001.
- 5اطلب رقمًا دوليًا من تحويلة محلية بصيغة +رمز الدولة، وتأكد من أن الطرف المتصَل به يرى رقمك من ZuteSIP.
معرّف المتصل في المكالمات الصادرة
اضبط معرّف المتصل على الرقم الذي يملك حساب SIP، إما عبر callerid في الـ endpoint أو عبر CALLERID(num) في خطة الاتصال كما هو موضح. أبقِه مطابقًا للبيانات المستخدمة في الـ trunk. تستهلك المكالمات الصادرة من 1,000 دقيقة مشمولة شهريًا مع الرقم.
حل المشكلات
- ✓ التسجيل 401/403: عدم تطابق في اسم المستخدم أو كلمة المرور، أو أن قسم auth غير مرتبط عبر outbound_auth. نفّذ pjsip set logger on واقرأ تبادل رسائل REGISTER.
- ✓ رفض المكالمات الواردة كمجهولة أو مع «No matching endpoint found»: قسم identify مفقود أو عنوان المصدر لا يطابق. تحقق من أن اسم المضيف يُحلّ على خادمك ثم أعد التحميل.
- ✓ صوت في اتجاه واحد: اضبط external_media_address وexternal_signaling_address وlocal_net على النقل، وأبقِ rtp_symmetric وforce_rport مفعّلين، وافتح نطاق المنافذ المحدد في rtp.conf في جدار الحماية.
- ✓ 488 Not Acceptable Here: عدم تطابق في الترميز. أبقِ allow=ulaw,alaw.
- ✓ DTMF غير ملتقط: أبقِ dtmf_mode=rfc4733 (طريقة أحداث RTP المعرّفة في RFC 2833)؛ ولا تستخدم info إلا إذا تطلّب الطرف الآخر SIP INFO.
الأسئلة الشائعة
هل أحتاج إلى قسمَي registration وidentify معًا؟
هل rfc4733 هو نفسه DTMF وفق RFC 2833؟
هل يمكنني استخدام chan_sip بدلًا من PJSIP؟
هل يمكنني استخدام TLS مع Asterisk؟
كيف أضيف رقمًا ثانيًا من ZuteSIP؟
هل توفر لي ZuteSIP واجهة API لـ Asterisk؟
المصادر
- Asterisk Documentation: res_pjsip Configuration Examples (حتى سبتمبر 2026)
- Asterisk Documentation: Configuring Outbound Registrations (حتى سبتمبر 2026)
- Asterisk Documentation: Asterisk PJSIP Troubleshooting Guide (حتى سبتمبر 2026)
كل شيء مشمول مع كل رقم
- ✓ رسائل واردة غير محدودة
- ✓ مكالمات واردة غير محدودة
- ✓ 500 رسالة صادرة شهريًا
- ✓ 1000 دقيقة صادرة شهريًا
- ✓ بيانات SIP لأي تطبيق اتصال أو سنترال
- ✓ تحويل المكالمات إلى أي هاتف
- ✓ لوحة اتصال عبر المتصفح
- ✓ الرقم لك طالما تريد
- ✓ ضمان الاستبدال خلال 7 أيام — رقم جديد مجانًا
السعر $1.80/شهر · يُدفع سنويًا ($21.60).
ضمان الاستبدال خلال 7 أيام
إذا لم يعمل الرقم معك خلال 7 أيام من الشراء، كأن يرفضه تطبيق ما أو لا تصل الرموز، تستبدله برقم جديد مجانًا بنقرة واحدة من لوحة التحكم، حتى مرتين، سواء استُخدم الرقم أم لا. وإذا لم يُستخدم في أي مكالمة أو رسالة SMS، يمكنك بدلًا من ذلك استرداد المبلغ كاملًا.
صفحات التسجيل والدفع متاحة باللغة الإنجليزية فقط.