Asterisk - Xin giúp đỡ về vấn đề set thời gian charge trong code tổng đài

Discussion in 'Xây dựng ứng dụng wireless application, mobile,' started by TieuThien, 12/5/16.

  1. TieuThien

    TieuThien New Member

    Vắn tắt là hiện mình đang làm 1 project về tổng đài trả lời tự động nhưng hiện tại bị vướng ở phần 1 phút gọi api charge 1 lần.
    Mình có dùng Schedule 2s chạy 1 lần và if timecharge%60 == 0 thì mình charge nhưng vấn đề phát sinh ở đây là mình ko thể ngắt được cuộc gọi trong trường hợp charge lỗi.
    Mình định dùng Thread sleep nhưng thật sự ko rành dùng lắm nên nó bị sleep toàn hệ thống luôn chứ ko chỉ hàm charge.
    Ai có kinh nghiệm hoặc cao kiến gì giúp mình với.
  2. dangxunb

    dangxunb Active Member

    Em nghĩ charge lỗi nó phải bắn ra Exception hay có error code gì đó cho mình xử lý chứ nhỉ?
    Mà vãi quá chị làm backend core mà không quen dùng Thread.sleep là như nào :(
  3. Joe

    Joe Moderator

    You divide a second into a small unit, , for example: 10-millisecond-unit, then "clock" your time with it. The time unit can be implemented with java.util.concurrent.TimeUnit. Example
    PHP:
      private float clockIt() {
          try {
              
    TimeUnit.MILLISECONDS.sleep(10); // 0.01 millisecond
              
    return 0.01f;
          } catch (
    Exception e) { }
          return 
    0.0f;
      }
    ...
    // check the elapsed times
    // assume: elapse time
    // - ti in seconds
    // - ta tariff in US$
          
    ...
          
    float fsum 0.0f;
          while (
    sum ti) {
              
    sum += clockIt();
          }
          
    long s = (longsum;
          if ((
    sum-s) >= 0.6f) ++s// more than 60% ?
          
    System.out.println("Time: "+ti+" sec., you pay:"+(s*ta)+" US$ @tariff:"+ta);
    the output is
    Code:
    C:\JoeApp\test>javac -g:none -d ./classes T0.java
    
    C:\JoeApp\test>java T0 3.6 5
    Time: 3.6 sec., you pay:20.0 US$ @tariff:5.0
    
    C:\JoeApp\test>java T0 3.4 5
    Time: 3.4 sec., you pay:15.0 US$ @tariff:5.0
    
    C:\JoeApp\test>java T0 3 5
    Time: 3.0 sec., you pay:15.0 US$ @tariff:5.0
    
    C:\JoeApp\test>java T0 2 5
    Time: 2.0 sec., you pay:10.0 US$ @tariff:5.0
  4. TieuThien

    TieuThien New Member

    Tui từ bên Net nhảy sang Java và cái đầu tiên mần cũng là cái này đây.
    Tất nhiên là có Exception rồi, nhưng khi mình dùng Scheduler để quét charge tất cả số gọi lên tổng đài mình ko thể can thiệp và ngắt luồng cuộc gọi từ bên ngoài đc.
    Tui làm asterisk á.
  5. TieuThien

    TieuThien New Member

    Có n số gọi lên tổng đài, số thứ n charge lỗi thì mình muốn ngắt cuộc gọi từ số n đó thôi
  6. TieuThien

    TieuThien New Member

    Mình có thể dùng agiChannel.hangup để ngắt nhưng vấn đề phát sinh là hangup sẽ chỉ được thực hiện sau khi kết thúc command hiện tại. Giả sử mình đang stream bài hát 5 phút, đến phút thứ 4 mình gọi agiChannel.hangup thì phải sau khi stream kết thúc hoặc phát sinh 1 sự kiện như người dùng bấm phím thì hangup mới được thực hiện.
  7. TieuThien

    TieuThien New Member

    1 thì ko được rồi còn cách 2 bạn hướng dẫn rõ 1 chút được không? lần đầu mình làm nghe ko hiểu lắm
  8. Joe

    Joe Moderator

    to ALL,

    please don't discuss about a theme without knowing what it is and how Object Oriented Programming works and that makes you all looking very silly.

    And Ms Tieu Thien, don't jump from A to B without starting to acquire a basic knowledge. Driving a bike is not the same with driving a car. Got it?

    When a Thread is set to sleep it sleeps during the given time without doing anything. And if the sleep is set in a method this method sleeps during the given time, too.
    The problem is dynamic and it can be only solved by an implemented Listener. In this case it's the "TimeOutListener". And it must be implemented. Click HERE to learn how to implement a Listener
    minhhn0205 likes this.
  9. TieuThien

    TieuThien New Member

    you did try with BaseAgiScript or not? It's okay with basic of JAVA OO but with AgiScript, this don't run.
    I don't know why. Can you help me?
  10. TieuThien

    TieuThien New Member

    "When the HANGUP AGI command is used, the channel is not immediately hung up. Instead, the channel is marked as needing to be hung up. Your AGI application must exit first before Asterisk will continue and perform the actual hangup process."
    Cái này ko phải do tùy chỉnh đâu bạn, command này quy định như vậy rồi
    Mình đã thử rồi nhưng bản chất của nó cũng ko ngay lập tức ngắt được command đang chạy mà phải kết thúc lệnh đó mới thực thi.
  11. Joe

    Joe Moderator

    How long you want to look for a spoonfeeding solution? Without your own development you go nowhere. Asterisk-Java is a 3rd party software and it preconditions that the users must have a good knowledge in JAVA and build their app AROUND it. Typical laziness of some young Vietnamese. Just look around for something that suits them and when nothing is found or available they just sit there, complain loudly if any hint requires them to work, then continue to ask around and wait for someone who would spoonfeed them.

    Viet Ha and TieuThien, if you both ignore my hint it's ok with me personally. But this forum is not purposed for those who just look for spoonfeeding and are too lazy to work or to develop anything themselves.

    Thread will be locked if you both still discuss about the where-to-get-a-complete-solution nonsense!

Chia sẻ trang này