• 开发语音机器人接听功能用到的sip相关知识


    开发接听语音机器人用到的sip相关知识

    1、项目背景

      我们公司最近在开发这样一个业务:买房人给房产经纪人的隐私号码(X号码)打电话,30s内经纪人没有接起,会把用户的电话接入到语音机器人端,语音机器人提醒用户《有什么需要留言的么》,用户留言,然后将用户的相关留言回传给业务方,方便经纪人接听电话。

    2、实现逻辑

      经纪人30s未接起电话,虚拟号码的供应商会给将电话打给我们提供的固话,我们的固话提供商会发送sip信令到我们约定好的机器和端口,从而建立sip连接进行会话。

      其中涉及sip协议的内容包括:怎样监听指定机器端口的sip信令,sip信令怎么将两个电话绑定起来进行通话。

    2.1、sip监听

      java提供一些sip监听的工具类:SipStack、SipProvider、SipFactory、SipListerner

      

     protected void createListenPoint(String listenerName, String serverName, String ip, Integer port)
                throws PeerUnavailableException, InvalidArgumentException, TransportNotSupportedException,
                ObjectInUseException, TooManyListenersException {
            logger.info("init listener{} begin !!!", listenerName);
            this.strListenerName = listenerName;
            // 设置SipStack参数
            Properties properties = new Properties();
            properties.setProperty("javax.sip.STACK_NAME", serverName);
            properties.setProperty("javax.sip.IP_ADDRESS", ip);
            SipFactory sipFactory = SipFactory.getInstance();
            sipFactory.setPathName("gov.nist");
            sipStack = sipFactory.createSipStack(properties);
            ProtocolObjects.init(sipFactory);
            // 创建SipProvider对象
            ListeningPoint udp = sipStack.createListeningPoint(ip, port, ProtocolObjects.transport);
            provider = sipStack.createSipProvider(udp);
            // 设置监听
            provider.addSipListener(this);
            logger.info("init listener{} end !!!", listenerName);
        }
    SipListener是基础接口,ip、端口监听到request信令会把请求包装未RequestEvent事件。
    package javax.sip;
    
    import java.util.EventListener;
    
    public interface SipListener extends EventListener {
        void processRequest(RequestEvent var1);
    
        void processResponse(ResponseEvent var1);
    
        void processTimeout(TimeoutEvent var1);
    
        void processIOException(IOExceptionEvent var1);
    
        void processTransactionTerminated(TransactionTerminatedEvent var1);
    
        void processDialogTerminated(DialogTerminatedEvent var1);
    }
    
    

  • 相关阅读:
    洛谷 P2700 逐个击破
    洛谷 P1503 鬼子进村
    洛谷 P1556 幸福的路
    洛谷 P1490 买蛋糕
    洛谷 P2507 [SCOI2008]配对
    code vs 3305 水果姐逛水果街Ⅱ
    通过idea远程调试
    【Cocos2d-x JavaScript Binding】
    ☀【SeaJS】SeaJS Grunt构建
    -_-#【Better Code】throttle / debounce
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/13822345.html
Copyright © 2020-2023  润新知