تلفن ابری همکارانمرجع مستندات توسعه‌دهندگان
نوع مرکز تماس
ورود به پنل
PBX V2 · Caller Identity

شناسایی مخاطب و CID Lookup

نام مخاطب در تماس و گزارش، با اولویت دفترچه تلفن همین مرکز.

ترتیب شناسایی#

  1. شماره با تلفن ثابت یا موبایل مخاطبین حذف‌نشدهٔ همین مرکز، به‌صورت دقیق تطبیق داده می‌شود. ایمیل، فکس و آدرس وارد این تطبیق نمی‌شوند.
  2. در صورت نبودن نام، نتیجهٔ کش‌شدهٔ CID Lookup خوانده می‌شود.
  3. اگر نتیجه موجود نباشد، سرویس فعال CID Lookup با مهلت کوتاه استعلام می‌شود. اتصال فعال دیدار نیز در زمان باقی‌مانده برای یافتن نام بررسی می‌شود.

شماره‌های 0912…، +98912…، 0098912… و شکل فارسی ارقام برای تطبیق یکسان می‌شوند. در دفترچهٔ تکراری، مخاطبی که اخیراً به‌روزرسانی شده اولویت دارد. داده‌های مرکز دیگر در این تطبیق وارد نمی‌شوند.

قرارداد سرویس شما#

در اتصال CID Lookup یک URL از نوع HTTPS ثبت کنید و جای شماره را با [NUMBER] مشخص کنید:

نمونه / قرارداد
https://crm.example.com/phone/name?number=[NUMBER]

GET /phone/name?number=09120000001
HTTP 200
Content-Type: text/plain; charset=utf-8

نام مخاطب

پاسخ باید فقط نام به‌صورت متن UTF-8 باشد؛ HTML، JSON، متن خطا یا اطلاعات اضافی نفرستید. اگر مخاطب پیدا نشد، پاسخ ۲۰۰ با بدنهٔ خالی بدهید. برای شمارهٔ ایرانی ۱۰ رقمی، در درخواست سرویس صفر داخلی اضافه می‌شود.

مقصد باید HTTPS عمومی روی پورت ۴۴۳ با گواهی معتبر باشد. تغییر مسیر دنبال نمی‌شود. DNS در پردازش جداگانه آماده می‌شود؛ تا آماده‌شدن آن، تماس با شماره ادامه پیدا می‌کند.

کارایی و نمایش#

دفترچه تلفن به Redis منتشر می‌شود و تماس برای تطبیق محلی، کوئری دفترچه تلفن را اجرا نمی‌کند. تغییرات از طریق علامت همگام‌سازی و بازبینی دوره‌ای منتقل می‌شوند. نام موفق سرویس بیرونی ۵ دقیقه و پاسخ بدون نام ۳۰ ثانیه کش می‌شود. در خطای سرویس، استعلام‌های بعدی برای ۱۰ ثانیه متوقف می‌شوند تا فشار تکراری ایجاد نشود.

بودجهٔ استعلام بیرونی ۴۵۰ میلی‌ثانیه است و فراخوانی محلی PBX حداکثر یک ثانیه مهلت دارد. عدم پاسخ سرویس، تماس را قطع نمی‌کند؛ شماره نمایش داده می‌شود. در تماس ورودی نام تماس‌گیرنده و در تماس خروجی نام مقصد، هنگام تماس ثبت و در گزارش نگهداری می‌شود. تغییر بعدی نام در دفترچه تلفن، گزارش تماس قبلی را بازنویسی نمی‌کند.

این رفتار مربوط به مرکز نوع ۲ است. تنظیمات و مسیر قبلی نوع ۱ در راهنمای CID Lookup نسخهٔ ۱ باقی می‌ماند.

تنظیم اتصال در پنل#

  1. ابتدا دفترچه تلفن را بررسی کنید.اگر شماره در مخاطبین همین مرکز وجود دارد، همان نام اولویت دارد و درخواست بیرونی لازم نیست.
  2. مسیر جست‌وجوی نام را روی CRM بسازید.این مسیر یک شماره دریافت و فقط متن نام را برمی‌گرداند؛ کار طولانی و ثبت تماس را وارد این مسیر نکنید.
  3. آدرس را در اتصال CID Lookup ثبت کنید.جای شماره [NUMBER] است. مقصد باید HTTPS عمومی باشد و سریع پاسخ بدهد.
  4. با مخاطب نمونه تست کنید.شماره شناخته‌شده، شماره بدون مخاطب و پاسخ دیرهنگام را بررسی کنید؛ خرابی CRM نباید مانع ادامه تماس شود.

Node.js؛ پاسخ نام به صورت متن#

نمونه آموزشی زیر فقط قرارداد پاسخ را نشان می‌دهد. نقشه نمونه را با lookup ایندکس‌شده و محدود به مشتری خود جایگزین کنید. سرور محلی را پشت reverse proxy با HTTPS عمومی منتشر کنید.

Node.js · cid-server.mjs
import { createServer } from 'node:http';

const contacts = new Map([
  ['09120000001', 'مخاطب نمونه'],
]);

createServer((request, response) => {
  const url = new URL(request.url, 'http://localhost');
  if (request.method !== 'GET' || url.pathname !== '/phone/name') {
    response.writeHead(404);
    return response.end();
  }

  const number = url.searchParams.get('number') || '';
  if (!/^\+?[0-9]{1,20}$/.test(number)) {
    response.writeHead(400);
    return response.end();
  }

  response.writeHead(200, {
    'Content-Type': 'text/plain; charset=utf-8',
    'Cache-Control': 'private, no-store',
  });
  response.end(contacts.get(number) || '');
}).listen(3000, '127.0.0.1');

// Public URL configured in the CID Lookup module:
// https://crm.example.com/phone/name?number=[NUMBER]

PHP؛ قرارداد موفق و شماره ناشناخته#

PHP · phone-name.php
<?php
$number = (string) ($_GET['number'] ?? '');
if (!preg_match('/^\+?[0-9]{1,20}$/D', $number)) {
    http_response_code(400);
    exit;
}

// Example only: replace with an indexed lookup in your CRM.
$contacts = [
    '09120000001' => 'مخاطب نمونه',
];
$name = $contacts[$number] ?? '';

header('Content-Type: text/plain; charset=utf-8');
header('Cache-Control: private, no-store');
http_response_code(200);
echo $name; // Empty body with HTTP 200 when no contact exists.
cURL · تست سرویس خودتان
curl --get 'https://crm.example.com/phone/name' \
  --data-urlencode 'number=09120000001' \
  --max-time 1 \
  --include

در پاسخ نباید قالب HTML، شیء JSON، پیام دیباگ یا هشدار PHP وجود داشته باشد. شماره‌ای که در دفترچه محلی موجود است ممکن است اصلاً به این URL نرسد.

چرا نام نمایش داده نمی‌شود؟#

نشانهبررسی
نام تغییر کرده اما تماس بعدی هنوز نام قبلی داردبرای همگام‌سازی دفترچه و انقضای cache فرصت بدهید؛ نتیجه موفق بیرونی پنج دقیقه کش می‌شود.
درخواست به CRM نمی‌رسدمخاطب محلی و cache اولویت دارند. فعال بودن اتصال، placeholder و عمومی بودن DNS را بررسی کنید.
عدد دیده می‌شود ولی تماس برقرار استسرویس بیرونی ممکن است نام نداده یا از زمان مجاز عبور کرده باشد؛ این رفتار ادامه تماس است.
نام ورودی درست است ولی Caller ID خروجی عوض نشدهنام مخاطب مقصد از هویت خط خروجی جداست؛ lookup نباید شماره Caller ID خط را تغییر دهد.
گزارش نام را دارد ولی گوشی نداردنمایش نام روی مدل گوشی و پشتیبانی آن از هدرهای SIP نیز وابسته است.
این مثال‌ها endpoint سمت CRM شما هستند، نه endpoint جدیدی برای دریافت تمام مخاطبین همکاران. اطلاعات مخاطب فقط در محدوده دسترسی مشتری مربوط جست‌وجو شود.
↑