2012-04-06 26 views
5

Tôi đang sử dụng Asterisk PBX để gọi điện thoại softphone, tôi sử dụng lệnh này: "originate SIP/100 extension 4004", trong dialplan, tôi phải lấy CALLERID biến, nhưng trong trường hợp này, nó luôn trống!Dấu hoa thị: cuộc gọi ban đầu không đặt CALLERID trong dialplan

P.S: nếu tôi gọi phần mở rộng (4004), từ điện thoại mềm (100), CALLERID được đặt và tôi có thể nhận được: ${CALLERID(num)}.

Cách lấy id người gọi trong trường hợp khởi tạo?

Trả lời

2

giải pháp cuối cùng tôi đang sử dụng hiện nay:

  • tôi gọi gia hạn của tôi từ một kịch bản php (có nguồn gốc SIP/100 phần mở rộng 777)
  • tôi viết phần mở rộng của tôi vào một tập tin văn bản (file_put_contents)
  • sau đó tôi đọc nó trong kế hoạch dấu quay số, và thiết lập biến này như người gọi ID Set (CallerID (num) = $ {} caller_id

tôi đã không tìm thấy một giải pháp khác.

9

Khi bạn đang bắt đầu cuộc gọi, bạn tự đặt ID người gọi. Có hai cách để làm điều này - hoặc trong ứng dụng gốc, hoặc trong dialplan. Một ví dụ về điều này là dưới đây.

Action: Originate 
Channel: local/[email protected] 
Application: Echo 
CallerID: Asterisk <12345> 

extensions.conf:

[outgoing] 
exten => 12345,1,NoOp() 
same => n,Verbose(1, Outgoing Caller ID: {$CALLERID(all)}) 
same => n,Dial(SIP/${EXTEN}) 
same => n,Hangup() 

hoặc bạn có thể làm điều gì đó như:

exten => 12345,1,NoOp() 
same => n,Set(CALLERID(num)=54321) 
same => n,Set(CALLERID(name)=Asterisk) 
same => n,Verbose(1, Outgoing Caller ID: {$CALLERID(all)}) 
same => n,Dial(SIP/${EXTEN}) 
same => n,Hangup() 

Bạn sẽ thấy ID người gọi của bạn thiết lập hoặc trong AMI có nguồn gốc hoặc, nếu bạn chọn ghi đè lên nó trong dialplan, những giá trị đó.

Để biết thêm thông tin, hãy xem Manager Action OriginateCallerID Function.

+0

xin chào cảm ơn câu trả lời của bạn, nhưng tôi không thấy cách sử dụng giải pháp của bạn, vì id người gọi phải là động (tôi gọi anh ấy từ tập lệnh php nhận được tham số dưới dạng tham số). anyway, tôi đang sử dụng cùng một tập lệnh để viết phần mở rộng vào một tệp, sau đó tôi đọc tệp này từ dấu hoa thị với tập lệnh AGI, giải pháp này tôi làm việc ngay bây giờ. exten => 4004, n, AGI (get_caller_id.php) exten => 4004, n, Đặt (CALLERID (num) = $ {caller_id}) cảm ơn. –

+0

Ví dụ trên đã trả lời câu hỏi của bạn về cách đặt ID người gọi trên kênh được tạo thông qua nguồn gốc AMI. Tôi đã không cố gắng viết đơn của bạn cho bạn. Nếu bạn cần có một ID người gọi động, chỉ cần sử dụng các biến quay số thay vì các giá trị mã hóa cứng được minh họa ở trên và đặt các biến từ tập lệnh AGI của bạn. –

+0

tôi không nói tôi đang sử dụng AMI !! tôi chỉ đơn giản gọi là bắt nguồn từ một kịch bản khác. cảm ơn bạn :) –

4

Tôi biết đây là cách trễ nhưng nếu bạn trên Asterisk 1.8 ứng dụng Gốc chỉ không cho phép bình thường.

Tôi đã hỏi trong diễn đàn trước đó và họ cho biết tính năng đó sẽ được thêm vào sau này. Vì vậy, những gì tôi đã làm là sửa đổi app_originate.c để cho phép số và tên được thông qua.

Đây là một trong những tôi đã viết lên hồi năm ngoái: https://github.com/cmendes0101/asterisk-originate-callerid

Been trong sản xuất cho hơn một năm và đã làm việc tốt. Được viết cho 1.8. Đó là một sửa đổi dễ dàng vì vậy nếu bạn sử dụng một phiên bản khác nhau, bạn có thể đơn giản diff những thay đổi và làm cho những thay đổi nhỏ cho phiên bản của bạn để làm cho nó xảy ra.

Các vấn đề liên quan